Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Elisei

[Resolvido] Alguem descobre porque este SQL não retorna dados?

Recommended Posts

Pessoal, boa noite.

 

Estou tentando efetuar uma pesquisa em um dbgrid informando alguns parâmetros.

O problema é que não retorna nada. Também não dá erro e eu tenho os dados na tabela.

Então peguei o string do SQL e joguei num memo para ver o que esta fazendo.

 

Código no Delphi:

 

DMSisAlma.QRListaHistoricoVisitas.Close;
   DMSisAlma.QRListaHistoricoVisitas.SQL.Clear;
   DMSisAlma.QRListaHistoricoVisitas.SQL.Add('SELECT informacoes_pessoais.nome, historico_visitas.data_visita, historico_visitas.nome_loja, historico_visitas.oriente, historico_visitas.uf, ritos.nom_rito, ordem_sessao.desc_ordem_sessao, tipo_sessao.desc_tip_sessao, historico_visitas.obediencia');
   DMSisAlma.QRListaHistoricoVisitas.SQL.Add('FROM historico_visitas, informacoes_pessoais, ritos, ordem_sessao,tipo_sessao');
   DMSisAlma.QRListaHistoricoVisitas.SQL.Add('WHERE historico_visitas.num_cpf = informacoes_pessoais.num_cpf');
   DMSisAlma.QRListaHistoricoVisitas.SQL.Add('AND historico_visitas.cod_rito = ritos.cod_rito');
   DMSisAlma.QRListaHistoricoVisitas.SQL.Add('AND historico_visitas.cod_ordem_sessao = ordem_sessao.cod_ordem_sessao');
   DMSisAlma.QRListaHistoricoVisitas.SQL.Add('AND historico_visitas.cod_tip_sessao = tipo_sessao.cod_tip_sessao');
   DMSisAlma.QRListaHistoricoVisitas.SQL.Add('AND informacoes_pessoais.nome LIKE :NomeCon ');
   DMSisAlma.QRListaHistoricoVisitas.SQL.Add('AND historico_visitas.nome_loja LIKE :LojaCon ');
   DMSisAlma.QRListaHistoricoVisitas.SQL.Add('AND historico_visitas.data_visita BETWEEN :DataConIni AND :DataConFim ');
   DMSisAlma.QRListaHistoricoVisitas.SQL.Add('ORDER BY data_visita DESC, nome');
   DMSisAlma.QRListaHistoricoVisitas.ParamByName('NomeCon').AsString := QuotedStr('%' + CXnomeCon.text + '%' );
   DMSisAlma.QRListaHistoricoVisitas.ParamByName('LojaCon').AsString := QuotedStr('%' + CXLojaCon.text + '%' );
   DMSisAlma.QRListaHistoricoVisitas.ParamByName('DataConIni').AsDate := CXiniCon.Date;
   DMSisAlma.QRListaHistoricoVisitas.ParamByName('DataConFim').AsDate := CXfimCon.Date;
   Memo1.Lines.Add(DMSisAlma.QRListaHistoricoVisitas.SQL.text);
   Memo1.Lines.Add('Parametro1:' + DMSisAlma.QRListaHistoricoVisitas.Params.ParamValues['NomeCon']);
   Memo1.Lines.Add('Parametro2:' + DMSisAlma.QRListaHistoricoVisitas.Params.ParamValues['LojaCon']);
   Memo1.Lines.Add('Parametro3:' + datetostr(DMSisAlma.QRListaHistoricoVisitas.Params.ParamValues['DataConIni']));
   Memo1.Lines.Add('Parametro3:' + datetostr(DMSisAlma.QRListaHistoricoVisitas.Params.ParamValues['DataConFim']));
   DMSisAlma.QRListaHistoricoVisitas.Open;

 

Gerou isso pra mim:

 

SELECT informacoes_pessoais.nome, historico_visitas.data_visita, historico_visitas.nome_loja, historico_visitas.oriente, historico_visitas.uf, ritos.nom_rito, ordem_sessao.desc_ordem_sessao, tipo_sessao.desc_tip_sessao, historico_visitas.obediencia
FROM historico_visitas, informacoes_pessoais, ritos, ordem_sessao,tipo_sessao
WHERE historico_visitas.num_cpf = informacoes_pessoais.num_cpf
AND historico_visitas.cod_rito = ritos.cod_rito
AND historico_visitas.cod_ordem_sessao = ordem_sessao.cod_ordem_sessao
AND historico_visitas.cod_tip_sessao = tipo_sessao.cod_tip_sessao
AND informacoes_pessoais.nome LIKE :NomeCon 
AND historico_visitas.nome_loja LIKE :LojaCon 
AND historico_visitas.data_visita BETWEEN :DataConIni AND :DataConFim 
ORDER BY data_visita DESC, nome

Variáveis:

 

Parametro1:'lip% '
Parametro2:'%abc% '
Parametro3:1/5/2009
Parametro3:28/5/2009

Se eu copiar e executar este comando direto no editor do banco e substituir as variáveis, me retorna os valores corretamente.

 

Alguem sabe o que pode estara contecendo?

Acredito ser os coringas "%"

 

Desde já, obrigado pela atenção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

não seria o formato da sua data?

 

a propriedade DATASOURCE do seu grid está ligado a um componente DATASOURCE, que por sua vez está ligado ao seu QRListaHistoricoVisitas?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola, as ligações estão corretas.

O problema está no comando que contem a comparação LIKE

 

Tanto que se eu comentar qualquer linha que contenha o comando LIKE a consulta me retorna corretamente e alimenta o DBgrid.

 

Ex: Se eu comentar as linhas de compa5ração de datas, o SQL não traz dados do mesmo jeito.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Certo ... faça o seguinte...

 

coloque os operadores coringas "%" dentro da sentença sql, e nao passando por parametro.. so para testar... assim:

 

DMSisAlma.QRListaHistoricoVisitas.SQL.Add('AND informacoes_pessoais.nome LIKE %:NomeCon% ');

DMSisAlma.QRListaHistoricoVisitas.SQL.Add('AND historico_visitas.nome_loja LIKE %:LojaCon% ');

 

Parametro1:'lip'

Parametro2:'abc'

 

diz ae se funfa

Compartilhar este post


Link para o post
Compartilhar em outros sites

O like pra funcionar usa a sintaxe campo like '%valor%' ... então, pra passar por parâmetro, teria que por um QuotedStr('%' + valor + '%'), que enviaria para a sql o valor formatado com '%valor%'.

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde Chrnos!

Meu comando já está com quotedstr().

 

Vou tentar desta forma quando chegar em casa:

 

DMSisAlma.QRListaHistoricoVisitas.SQL.Add('AND nome LIKE ' + Char(39) + '%' + CXnomeCon.text + '%' + Char(39));

Despois posto o resultado pra voces se deu certo ou não.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite

 

Relamente, desta jeito funcionou perfeitamente:

 

DMSisAlma.QRListaHistoricoVisitas.SQL.Add('AND nome LIKE ' + Char(39) + '%' + CXnomeCon.text + '%' + Char(39));

Abraço a todos.

Caso resolvido!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.