Jump to content
Fórum Script Brasil
  • 0
Sign in to follow this  
Sérgio H. Martins

SubSelect SQL

Question

Ola pessoal tudo tranquilo?

Estou com uma dúvida, tenha uma pesquisa por clientes que preciso que ela me retorne, todas as notas do clientes com status AP e com data anterior a do edit. Segue o q tentei fazer:

var
  DtaVcto: TDate;
  consulta:integer;
begin
  if key=#13 then
  begin
    with dm.ADOQueryjurossei do
    begin
      consulta:=strtoint(edit12.text);
      DtaVcto:= StrToDate(Edit7.Text);
      Close;
      SQL.Clear;
      SQL.Add('select *  from faturas');
      SQL.Add('where txt_situac =("AP")');
      SQL.Add('and num_codcli =:appCliente') 
      parameters.ParamByName('appCliente').Value:=consulta;
         
 // Tem como passar a pesquisa abaixo com os dados obtidos com a pesquisa acima?, (Pensei em um Subselect, mas não consigo fazer funcionar).

      SQL.Add('and DTAVCTO < :pDataAtual');
      Parameters.ParamByName('pDataAtual').Value:= FormatDateTime('dd/mm/yyyy', DtaVcto);
      Open;

Agradeço a atenção de todos

Sergio Martins

Edited by Micheus
Adicionado o delimitador de código [code] [/code] e identado o código para melhor visualização. Lembre-se de utilizá-los também. ;-)

Share this post


Link to post
Share on other sites

9 answers to this question

Recommended Posts

  • 0
  • 0
Estou com uma dúvida, tenha uma pesquisa por clientes que preciso que ela me retorne, todas as notas do clientes com status AP e com data anterior a do edit.(...)

...

// Tem como passar a pesquisa abaixo com os dados obtidos com a pesquisa acima?, (Pensei em um Subselect, mas não consigo fazer funcionar).

...

Sérgio H. Martins, a consulta como está não retorna o que você procura?

Aparentemente, não há qualquer necessidade de executar um sub-select.

Vejo que você está utilizando componentes da paleta ADO. Por acaso você está acessando banco de dados Access?

você adicionou esta consulta ao seu componente ADOQueryjurossei em design-time? Se sim, você acessou a propriedade Parameters e definiu a propriedade DataType para o parâmetro pDataAtual? De que tipo?

Abraços

Share this post


Link to post
Share on other sites
  • 0

Ola amigo Micheus

Utilizando este código me aparece a seguinte mensagem : 'Nenhum valor foi fornecido para um ou mais parâmetros necessários'.

Se eu utilizar a pesquisa sem adicionar a parte da Data funciona perfeitamente, mas quando tento filtrar os dados com o resultado + a data menor que a data atual acontece este problema. Parece que a pesquisa se perde quando coloco dois parametros.

Estou utilizando Access 2003.

ADOQueryjurossei em design-time?

Sou um pouco iniciante, acredito que tenha feito isto sim, vou colocar um screen para ver se esta correto.

Link Screen Design Time

Se sim, você acessou a propriedade Parameters e definiu a propriedade DataType para o parâmetro pDataAtual? De que tipo?

Esta parte não fiz nada referente a isso, como devo fazer?

Fico muito grato pela atenção

Um abraço

Sérgio Martins

Edited by Sérgio H. Martins

Share this post


Link to post
Share on other sites
  • 0
ADOQueryjurossei em design-time?

Sou um pouco iniciante, acredito que tenha feito isto sim, vou colocar um screen para ver se esta correto.

Link Screen Design Time

nesta tela que você pôs, na propriedade Parameters tem um botãozinho [...]. É clicando nele que aparece o que eu queria que você respondesse.

Se sim, você acessou a propriedade Parameters e definiu a propriedade DataType para o parâmetro pDataAtual? De que tipo?

Esta parte não fiz nada referente a isso, como devo fazer?

Deveria estar algo assim:

http://img391.imageshack.us/img391/5581/delphiik5.jpg

Confira e veja como fica o resultado.

Preferencialmente, quando definida a SQL em design-time, declare o tipo dos parâmetros.

Abraços

Share this post


Link to post
Share on other sites
  • 0

Ola Amigo

Cliquei em Parameters e estava em branco, então criei manualmente seguindo a imagem q você passou, mas continua retornando o mesmo erro.

Teria algum outro modo de fazer esta pesquisa?

Agradeço a atenção

Abraços

Sérgio

Share this post


Link to post
Share on other sites
  • 0
Teria algum outro modo de fazer esta pesquisa?
Sim, mas antes de tentá-la, faça mais uma alteração que eu me esqueci de mencionar. Tendo definido o tipo do parâmetro como DateTime (conforme sugerido), altere a linha de atribuição do parâmetro de:

Parameters.ParamByName('pDataAtual').Value:= FormatDateTime('dd/mm/yyyy', DtaVcto);

para:

Parameters.ParamByName('pDataAtual').Value:= DtaVcto;

Se ainda não funcionar (eu acredito que vá), você pode utilizar esta outra opção - apesar de não ser algo que eu goste: concatenar a data ao string SQL.

O MSAccess tem a particularidade de utilizar o # como delimitador de datas, então, troque as linhas:

SQL.Add('and DTAVCTO < :pDataAtual');

Parameters.ParamByName('pDataAtual').Value:= FormatDateTime('dd/mm/yyyy', DtaVcto);

por:

SQL.Add('and DTAVCTO < #'+FormatDateTime('dd/mm/yyyy', DtaVcto)+'#');

Nesta opção, faça uns testes e verifique se não será necessário mudar a formatação de dd/mm/yyyy para yyyy/mm/dd para ter resultados corretos.

Abraços

Share this post


Link to post
Share on other sites
  • 0

Ola amigo

Fiz todos os passos, mas os mesmos não retornaram o resultado, fiz uma alteração para testes e me deu um erro que o Parâmetro DTAVCTO não tem valor padrão.

Segue o código que usei

 var
DtaVcto: TDate;
consulta:integer;
begin
if key=#13 then
begin
with dm.ADOQueryjurossei do
begin
consulta:=strtoint(edit12.text);
DtaVcto:= StrToDate(Edit7.Text);
Close;
SQL.Clear;
SQL.Add('select * from faturas');
SQL.Add('where txt_situac =("AP")');
SQL.Add('and num_codcli = 17'); //Mudei esta parte só para testes//
SQL.Add('and DTAVCTO < #'+FormatDateTime('dd/mm/yyyy', DtaVcto)+'#');
Open;[/codebox]

Não entendo porque não esta funcionando, porque parece estar perfeito.

Obrigado pela ajuda

Att

Sérgio Martins

Share this post


Link to post
Share on other sites
  • 0
Fiz todos os passos, mas os mesmos não retornaram o resultado, fiz uma alteração para testes e me deu um erro que o Parâmetro DTAVCTO não tem valor padrão.

Sérgio H. Martins, agora que não há o parâmetro na instrução SQL, este erro relacionado à DtVcto não poderia ocorrer. Acredito que você deva ter mantido a definição deste parâmetro na propriedade Parameters - você deve removê-la.

Share this post


Link to post
Share on other sites
  • 0

Ola Micheus

Fico muito grato pela ajuda, mas não sei porque não esta funcinando, mas mudei o código, e consegui um resultado que não igual mais vai funcionar tranquilamente.

Então agradeço pois aprendi bastante coisa, quando eu souber estarei ajudando o pessoal, segue abaixo o código

var
consulta:integer;
begin
if key=#13 then
begin
with dm.ADOQueryjurossei do
begin
consulta:=strtoint(edit12.text);

Close;
SQL.Clear;
SQL.Add('select * from faturas');
SQL.Add('where txt_situac =("AP")');
SQL.Add('and num_codcli=:appCliente ORDER BY dat_vencto');
parameters.ParamByName('appCliente').Value:=consulta;
Open;[/CODEBOX]

Um abração

Sergio Martins

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  



  • Forum Statistics

    • Total Topics
      148586
    • Total Posts
      644292
×
×
  • Create New...