Elisei 0 Denunciar post Postado Maio 29, 2009 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
Marcelo R Moura 0 Denunciar post Postado Maio 29, 2009 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
Elisei 0 Denunciar post Postado Maio 29, 2009 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
Marcelo R Moura 0 Denunciar post Postado Maio 29, 2009 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
Chrnos 30 Denunciar post Postado Maio 29, 2009 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
Elisei 0 Denunciar post Postado Maio 29, 2009 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
Elisei 0 Denunciar post Postado Maio 29, 2009 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