Fórum Buscando valores errados em uma procedure #320616
04/05/2006
0
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
Curtir tópico
+ 0Posts
05/05/2006
Marco Salles
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 ???
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
05/05/2006
Digitom
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
06/05/2006
Marco Salles
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]
Poderia fazer somente
é com certeza uma consulta mais Otimizada
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)