Ir para conteúdo
Fórum Script Brasil
  • 0

SubSelect SQL


Sérgio H. Martins

Pergunta

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

Editado por 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. ;-)
Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0
Link para o comentário
Compartilhar em outros sites

  • 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

Link para o comentário
Compartilhar em outros 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

Editado por Sérgio H. Martins
Link para o comentário
Compartilhar em outros 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

Link para o comentário
Compartilhar em outros 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

Link para o comentário
Compartilhar em outros 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

Link para o comentário
Compartilhar em outros 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.

Link para o comentário
Compartilhar em outros 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

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...