Buscando valores errados em uma procedure

Delphi

04/05/2006

:evil:
O problema é o seguinte:
Tenho uma procedure que me retorna o valor total de um pedido, bastando para isso eu passar o cliente (tipo), numero da nota (numero_nota).
A primeira vez que é executado o procedimento dentro de um loop, o valor retornado fica correto, mas os outros totais ficam iguais ao primeiro.

Ex:
[list:c2843ed6e4]
pedido - cliente - total_nota
0001 - 0001 - 149,56
0002 - 0002 - 165,06
0003 - 0040 - 698,66

O valor retornado é 149,56 para as três impressões.
[/list:u:c2843ed6e4]

Veja um pedaço do meu codigo:

var impressora : TTipoImp;
    nosso_numero, numero_nota, tipo : string;
    total_pedido : real;
begin
   if not Validar() then
      exit;

   if Application.MessageBox(PChar(´Confirma a impressão ?´), ´Pergunta´, MB_ICONQUESTION + MB_YESNO) = idNo then
      Exit;

   cdsPedImp.First();
   while not cdsPedImp.EoF do
   begin
        cdsNF.Locate(´NFNumPed´, cdsPedImp_num.AsString, []);
        numero_nota := cdsNF.FieldByName(´NFNumNota´).AsString;
        tipo := cdsNF.FieldByName(´NFCodCli´).AsString;

      cdsTotalNota.Close;
      cdsTotalNota.FetchParams();
      sqlTotalNota.SQL.Text := ´SELECT * FROM consultanotas(:0,:1)´;
      sqlTotalNota.Params[0].AsString := tipo;
      sqlTotalNota.Params[1].AsString := numero_nota;
      cdsTotalNota.Open;
      total_pedido := cdsTotalNota.FieldByName(´TOTAL_NOTA´).AsFloat;      
      cdsTotalNota.Close;
      ...
      
   end;




Digitom

Digitom

Curtidas 0

Respostas

Marco Salles

Marco Salles

04/05/2006

e voce quer é so saber o total_nota por pedido ou por cliente

Quem é esta tabela ???... Parece que ela ja mostra o total da nota por pedido.. Porque que tenho que fazer uma consulta se ja tem o valor ???
pedido - cliente - total_nota 0001 - 0001 - 149,56 0002 - 0002 - 165,06 0003 - 0040 - 698,66


Alem da duvida acima , Na sua rotina voce envolveu cdsPedImp , cdsNF , cdsTotalNota... Com esta a estrutura dessas tabelas ?? e qual delas e a
tabela acima ????


GOSTEI 0
Digitom

Digitom

04/05/2006

Ok. Deixa tentar explicar:

Este resultados provem da pesquisa em PEDIDOS

pedido - cliente - total_nota
0001 - 0001 - 149,56
0002 - 0002 - 165,06
0003 - 0040 - 698,66

Chamo a procedure assim:
CONSULTANOTAS(´0001´,´00001´)
Retorno -> 149,56
CONSULTANOTAS(´0002´,´00002´)
Retorno -> 165,06
CONSULTANOTAS(´0042´,´00002´)
Retorno -> 698,66

Ou seja, é uma tabela calculada.

Porque que tenho que fazer uma consulta se ja tem o valor ???
R: Porque busca informacoes em de ITENSDOPEDIDOS onde após calcular quantidades x Preco_venda encontro o TOTAL_PEDIDO.
Cada chamada na procedure só me retorna um valor.

Ref. as tabelas que uso na impressão:
cdsPedImp -> Lista de quais pedidos serão impressos. Somente o numero do pedido.
cdsNF -> Serve para buscar o codigo do cliente
cdsTotalNota -> ClientDataSet que armazenará o Total do pedido


O problema é o seguinte:
Se no meu cdspedimp informar só o pedido 1 o resultado será retornado 149,56.
Se no meu cdspedimp informar só o pedido 2 o resultado será retornado 165,06

Mas, se eu pedir 1 e o 2, a resposta vai ser 149,56 para o pedido 1 e 149,56 para o pedido 2.

:shock:


GOSTEI 0
Marco Salles

Marco Salles

04/05/2006

Mas, se eu pedir 1 e o 2, a resposta vai ser 149,56 para o pedido 1 e 149,56 para o pedido 2.


esta instrução

sqlTotalNota.SQL.Text := ´SELECT * FROM consultanotas(:0,:1)´;

Não deveria se assim

sqlTotalNota.SQL.Text := ´SELECT * FROM consultanotas Where
  (CampoCodCli =:0)and(CampoNFNumNota =:1)´;


[b:909e86563e]P:S eu não sei o nome dos seus campo CampoCodCli e
CampoNFNumNota [/b:909e86563e]

Alem disso , porque que voce não pega o valor de sqlTotalNota diretamente

 sqlTotalNota.open;
 total_pedido := sqlTotalNota.FieldByName(´TOTAL_NOTA´).AsFloat; 



[b:909e86563e]Outra coisa que me seixou encucado , se voce esta interessado somente no Valor do Campo Total porque fazer [/b:909e86563e]

SELECT * FROM ????


Poderia fazer somente

SELECT TOTAL_NOTA FROM


é com certeza uma consulta mais Otimizada


GOSTEI 0
POSTAR