ADO

Delphi

26/08/2005

Ola Pessoal !!!

Estou montando uma Query dinamica com ADOQuery e esbarro
neste problema..

QryCadastro.Sql.Clear;
QryCadastro.Sql.Add(´Select C.Apelido,
sum(S.Quantidade*S.PrecoLiquido) as Venda,´);
QryCadastro.Sql.Add(´sum(S.Quantidade*S.CustoProduto)+
sum (S.Quantidade*S.ValorIcms)+
sum(S.Quantidade*S.Comissao) as Custo,´);
QryCadastro.Sql.Add(´sum(S.Quantidade*(S.PrecoLiquido-S.CustoProduto-S.ValorIcms-S.Comissao)) as Lucro´);
QryCadastro.Sql.Add(´From SaidaProduto S, CadastroCliente C´);
QryCadastro.Sql.Add(´where S.IdCodigoCliente = C.IdCodigoCliente´);
QryCadastro.Sql.Add(´and S.DataEmissao Between
#´+wdat1+´ and ´+wdat2+´´);
QryCadastro.Sql.Add(´Group By C.Apelido´);
QryCadastro.Sql.Add(´Order By C.Apelido´);

Está me dando um erro de MsJET4.0.....

porém se eu colocar tudo isto dentro do ADOQuery e rodar funciona,
so na escrita dinamica e que da problema..

Se alguem puder me dar uma ajuda...

Grato pela atenção..

Robson.


Robsons

Robsons

Curtidas 0

Respostas

Rjun

Rjun

26/08/2005

Pq vc não deixa isso tudo dentro da Query e usa parâmetros para passar os campos [b:3972490b6c]wdat1[/b:3972490b6c] e [b:3972490b6c]wdata2[/b:3972490b6c]?


GOSTEI 0
Robsons

Robsons

26/08/2005

Porque eu tenho alguns outros parametros que não estão ai, e que são definidos em tempo de execução.....


GOSTEI 0
Rjun

Rjun

26/08/2005

Tudo bem, mas mesmo assim pergunto: por que você não usa parâmetros?


GOSTEI 0
Robsons

Robsons

26/08/2005

Tem algum exemplo de como ficaria a declaracao de parametors em tempo de execução....

Só costumo usar os parametros quando uso o componente...
Se existir outra maneira, me de uma ajuda...

Grato


GOSTEI 0
Rjun

Rjun

26/08/2005

Eu particularmente abomino enfiar o código SQL no meio do código do programa. Coloque o código SQL no seu componente ADOQUERY.

SELECT 
  C.Apelido, 
  SUM(S.Quantidade * S.PrecoLiquido) AS Venda,
  SUM(S.Quantidade * S.CustoProduto) + 
  SUM(S.Quantidade * S.ValorIcms) + 
  SUM(S.Quantidade * S.Comissao) AS Custo,
  SUM(S.Quantidade * (S.PrecoLiquido - S.CustoProduto - S.ValorIcms -  S.Comissao)) AS Lucro
From 
  SaidaProduto S, 
  CadastroCliente C
WHERE 
  S.IdCodigoCliente = C.IdCodigoCliente AND
  S.DataEmissao BETWEEN #:wdat1 AND :wdata2
GROUP BY  
  C.Apelido
ORDER BY
  C.Apelido


Depois coloque isso no seu código:

qryCadastro.Parameters.ParamByName(´wdat1´).Value := StrToDate(wdat1);
qryCadastro.Parameters.ParamByName(´wdat2´).Value := StrToDate(wdat2);
qryCadastro.Open;
try
  // coloque o q vc deve fazer com o resultado
finally
  qryCadastro.Close;
end;



GOSTEI 0
POSTAR