Rodrigo

Pra mim funcionou...direitinho, 

eu apenas 'inventei' os dominios que voce nao havia passado na msg
e tirei o colate...pois na base de teste que criei eu nao o tinha
definido..rs..

de uma olhada no metada; 


*******************
SET SQL DIALECT 3;

/* CREATE DATABASE 'c:\teste.fdb' PAGE_SIZE 4096

 DEFAULT CHARACTER SET NONE */
/* Domain definitions */
CREATE DOMAIN D_CODIGO AS INTEGER NOT NULL;
CREATE DOMAIN D_CODPRODUTO AS INTEGER NOT NULL;
CREATE DOMAIN D_VALOR3 AS INTEGER NOT NULL;

/* Table: ESTOQUE, Owner: SYSDBA */

CREATE TABLE ESTOQUE 
( CPRODUTO      VARCHAR(15) NOT NULL,
  CEMPRESA      D_CODIGO,
  EST_LOJA      NUMERIC(18, 3) NOT NULL,
  EST_DEPO      NUMERIC(18, 3) DEFAULT 0 NOT NULL);

/* Table: PRODUTO, Owner: SYSDBA */

CREATE TABLE PRODUTO 
( CPRODUTO      VARCHAR(15) NOT NULL,
  NPRODUTO      VARCHAR(200) NOT NULL);

/* Table: REL_ESTOQUE, Owner: SYSDBA */

CREATE TABLE REL_ESTOQUE 
( CPRODUTO      D_CODPRODUTO,
  D3    D_VALOR3,
  L3    D_VALOR3,
  D5    D_VALOR3,
  L5    D_VALOR3,
  D8    D_VALOR3,
  L8    D_VALOR3,
  D10   D_VALOR3,
  L10   D_VALOR3);

COMMIT WORK;

SET AUTODDL OFF;
SET TERM !! ;
CREATE OR ALTER PROCEDURE GERAR_ESTOQUE_GERAL 
( PEST_LOJA FLOAT,
  PEST_DEPO FLOAT,
  PCEMPRESA INTEGER,
  PCPRODUTO VARCHAR(15))
AS
begin
  /* CRIAR OS PRODUTOS NA TABELA DE REL_ESTOQUE */
  for
    select P.CProduto from PRODUTO P order by P.CProduto into :PCPRODUTO
  do begin
    insert into REL_ESTOQUE(CPRODUTO, D3, L3, D5, L5, D8, L8, L10, D10)
    values(:PCPRODUTO, 0, 0, 0, 0, 0, 0, 0, 0);
  end
  /* select na tabela de estoque */
  for
    select E.* from ESTOQUE E order by E.CPRODUTO into :PCPRODUTO,
:PCEMPRESA, :PEST_LOJA, :PEST_DEPO
  do begin
    /* VERIFICAR SE EXISTE O PRODUTO, SEMPRE VAI EXISTIR, POIS INCLUO NA
PARTE DE CIMA */
    if (exists (select RE.* from REL_ESTOQUE RE where RE.CPRODUTO =
:PCPRODUTO)) then
    begin
      /*  VERIFICAR QUAL É A EMPRESA */
      if (:PCEMPRESA = 3) then
      begin
        update REL_ESTOQUE set L3 = (L3 + :PEST_LOJA ), D3 = (D3 +
:PEST_DEPO) where CPRODUTO = :PCPRODUTO;
      end
      if (:PCEMPRESA = 5) then
      begin
        update REL_ESTOQUE set L5 = (L5 + :PEST_LOJA ), D5 = (D5 +
:PEST_DEPO) where CPRODUTO = :PCPRODUTO;
      end
      if (:PCEMPRESA = 8) then
      begin
        update REL_ESTOQUE set L8 = (L8 + :PEST_LOJA ), D8 = (D8 +
:PEST_DEPO) where CPRODUTO = :PCPRODUTO;
      end
      if (:PCEMPRESA = 10) then
      begin
        update REL_ESTOQUE set L10 = (L10 + :PEST_LOJA ), D10 = (D10 +
:PEST_DEPO) where CPRODUTO = :PCPRODUTO;
      end
    end
  end
  suspend;
END !!
SET TERM ; !!
COMMIT WORK;
SET AUTODDL ON;

/* Grant Roles for this database */


/* Grant permissions for this database */
*******************

Atenciosamente;
Elazar




-----Mensagem original-----
De: delphi-br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED]
Em nome de Rodrigo - Winsoft
Enviada em: sexta-feira, 24 de fevereiro de 2006 09:46
Para: Lista - Delphi-br
Assunto: [delphi-br] ERRO NA SP - PRAZO DE ENTREGA EXPIRANDO !!!


BOM DIA GALERA...

TENHO AS SEGUINTES TABELAS:


CREATE TABLE PRODUTO (
    CPRODUTO          VARCHAR(15) NOT NULL COLLATE PXW_INTL850,
    NPRODUTO          VARCHAR(200) NOT NULL COLLATE PXW_INTL850
);


CREATE TABLE ESTOQUE (
    CPRODUTO            VARCHAR(15) NOT NULL COLLATE PXW_INTL850,
    CEMPRESA            D_CODIGO,
    EST_LOJA            NUMERIC(18,3) NOT NULL,
    EST_DEPO            NUMERIC(18,3) DEFAULT 0 NOT NULL
);


CREATE TABLE REL_ESTOQUE (
    CPRODUTO  D_CODPRODUTO,
    D3        D_VALOR3, /* CORRESPONDE AO ESTOQUE DEPOSITO DA EMPRESA DE
COD. 3
    L3        D_VALOR3, /* CORRESPONDE AO ESTOQUE LOJA DA EMPRESA DE
COD. 3
    D5        D_VALOR3, /* CORRESPONDE AO ESTOQUE DEPOSITO DA EMPRESA DE
COD. 5
    L5        D_VALOR3, /* CORRESPONDE AO ESTOQUE LOJA DA EMPRESA DE
COD. 5
    D8        D_VALOR3, /* CORRESPONDE AO ESTOQUE DEPOSITO DA EMPRESA DE
COD. 8 
    L8        D_VALOR3, /* CORRESPONDE AO ESTOQUE LOJA DA EMPRESA DE
COD. 8
    D10       D_VALOR3, /* CORRESPONDE AO ESTOQUE DEPOSITO DA EMPRESA DE
COD. 10
    L10       D_VALOR3  /* CORRESPONDE AO ESTOQUE LOJA DA EMPRESA DE
COD. 10
);


estou criando a store procedure abaixo

CREATE PROCEDURE GERAR_ESTOQUE_GERAL (
    PEST_LOJA FLOAT,
    PEST_DEPO FLOAT,
    PCEMPRESA INTEGER,
    PCPRODUTO VARCHAR(15))
AS
begin
  /* CRIAR OS PRODUTOS NA TABELA DE REL_ESTOQUE */
  for
    select P.CProduto from PRODUTO P order by P.CProduto into :PCPRODUTO
  do begin
    insert into REL_ESTOQUE(CPRODUTO, D3, L3, D5, L5, D8, L8, L10, D10)
    values(:PCPRODUTO, 0, 0, 0, 0, 0, 0, 0, 0);
  end


  /* select na tabela de estoque */
  for
    select E.* from ESTOQUE E order by E.CPRODUTO into :PCPRODUTO,
:PCEMPRESA, :PEST_LOJA, :PEST_DEPO
  do begin
    /* VERIFICAR SE EXISTE O PRODUTO, SEMPRE VAI EXISTIR, POIS INCLUO NA
PARTE DE CIMA */ 

    if (exists (select RE.* from REL_ESTOQUE RE where RE.CPRODUTO =
:PCPRODUTO)) then
    begin
      /*  VERIFICAR QUAL É A EMPRESA */   
      if (:PCEMPRESA = 3) then
      begin
        update REL_ESTOQUE set L3 = (L3 + :PEST_LOJA ), D3 = (D3 +
:PEST_DEPO) where CPRODUTO = :PCPRODUTO;
      end

      if (:PCEMPRESA = 5) then
      begin
        update REL_ESTOQUE set L5 = (L5 + :PEST_LOJA ), D5 = (D5 +
:PEST_DEPO) where CPRODUTO = :PCPRODUTO;
      end

      if (:PCEMPRESA = 8) then
      begin
        update REL_ESTOQUE set L8 = (L8 + :PEST_LOJA ), D8 = (D8 +
:PEST_DEPO) where CPRODUTO = :PCPRODUTO;
      end

      if (:PCEMPRESA = 10) then
      begin
        update REL_ESTOQUE set L10 = (L10 + :PEST_LOJA ), D10 = (D10 +
:PEST_DEPO) where CPRODUTO = :PCPRODUTO;
      end
    end
  end

  suspend;
end



ESTA ME RETORNADO O SEGUINTE ERRO:

count of column list and variable list do not match.
Dynamic SQL Error.
SQL error code = -313.
count of column list and variable list do not match.


sERÁ Q ALGUEM SABE O Q ESTÁ ACONTECENDO...
SEI Q É MEIO COMPLICADO, MAS É UM POUCO URGENTE !!!

sE ALGUEM PUDER ME AJUDAR......


Obrigado.

Rodrigo Pedroso
Winsoft Informática - (14) 3664-1586
[EMAIL PROTECTED]

[As partes desta mensagem que não continham texto foram removidas]



-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>





Yahoo! Grupos, um serviço oferecido por:
PUBLICIDADE
 




Links do Yahoo! Grupos

Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/delphi-br/
  
Para sair deste grupo, envie um e-mail para:
[EMAIL PROTECTED]
  
O uso que você faz do Yahoo! Grupos está sujeito aos Termos do Serviço
do Yahoo!. 


        

        
                
_______________________________________________________ 
Yahoo! doce lar. Faça do Yahoo! sua homepage. 
http://br.yahoo.com/homepageset.html 



-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>

<*> Para ver as mensagens antigas, acesse:
    http://br.groups.yahoo.com/group/delphi-br/messages

<*> Para falar com o moderador, envie um e-mail para:
    [EMAIL PROTECTED]
 
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/delphi-br/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 


Responder a