Problemas com comando SQL
Olá, tenho uma instrução de select que, ao testar pelo ibexpert, ele roda maravilhosamente, mas quando coloco na minha aplicação, ele não retorna o desejado, traz informações erradas ou nem traz nada, dependendo o que coloco no paramentro.
Porque será que ocorre isso??
Utilizo Firebird 2.0 com Delphi 7, os componente que estou utilizando são SQLQuery, DataSetProvider e ClientDataSet.
O comando é esse:
cdsProduto.Close;
cdsProduto.CommandText := 'select * from ' +
'(select P.CDREDUZIDO, P.CDPRODUTO, P.DSPRODUTO, ' +
'(case when P.DSPRODUTO like :CAMPO||''%'' ' +
'then 0 else 1 end)||P.DSPRODUTO as DSPRODUTO_TEMPORARIO '+
'from PRODUTO P ' +
'where P.DSPRODUTO like ''%''||:CAMPO||''%'') ' +
'order by DSPRODUTO_TEMPORARIO';
É uma consulta por descrição, ordenando pela forma da sequencia de letras digitadas.
Se alguém puder ajudar, ficarei muito agradecido.
Porque será que ocorre isso??
Utilizo Firebird 2.0 com Delphi 7, os componente que estou utilizando são SQLQuery, DataSetProvider e ClientDataSet.
O comando é esse:
cdsProduto.Close;
cdsProduto.CommandText := 'select * from ' +
'(select P.CDREDUZIDO, P.CDPRODUTO, P.DSPRODUTO, ' +
'(case when P.DSPRODUTO like :CAMPO||''%'' ' +
'then 0 else 1 end)||P.DSPRODUTO as DSPRODUTO_TEMPORARIO '+
'from PRODUTO P ' +
'where P.DSPRODUTO like ''%''||:CAMPO||''%'') ' +
'order by DSPRODUTO_TEMPORARIO';
É uma consulta por descrição, ordenando pela forma da sequencia de letras digitadas.
Se alguém puder ajudar, ficarei muito agradecido.
Cristiano
Curtidas 0
Respostas
Joel Rodrigues
12/02/2013
No primeiro LIKE, só tem um % mesmo?
GOSTEI 0
Cristiano
12/02/2013
Isso mesmo, apena um %, como citei, pelo ibexpert, funciona muito bem, mas qdo coloco para rodas na aplicação não ordena da mesma forma, isso quando ele encontra, será que o componente de ligação não da conta?
GOSTEI 0
Douglas
12/02/2013
MOACIR CHISTE,
e se você colocar o modo de ordenação.
Um deles, pois não sei por qual ordem você quer.
e se você colocar o modo de ordenação.
order by DSPRODUTO_TEMPORARIO ASC ou order by DSPRODUTO_TEMPORARIO DESC
Um deles, pois não sei por qual ordem você quer.
GOSTEI 0
Douglas
12/02/2013
Isso mesmo, apena um %, como citei, pelo ibexpert, funciona muito bem, mas qdo coloco para rodas na aplicação não ordena da mesma forma, isso quando ele encontra, será que o componente de ligação não da conta?
Outra coisa toda vez que se for efetuar uma
pesquisa limpe o seu ClientDataSet(cdsProduto.EmptyDataSet) antes,
Pode ser por isto que ele traga o resultado vazio.
GOSTEI 0
Perivaldo Martins
12/02/2013
Meu amigo, não sei se vc já resolveu esse pequeno problema, mas uma idéia seria a que segue abaixo:
Levando em conta que Existe (SQLConnection + SQLQuery + DataSetProvider + ClientDataSet + DataSource)
Boa sorte e bons códigos!!
Levando em conta que Existe (SQLConnection + SQLQuery + DataSetProvider + ClientDataSet + DataSource)
SQLQuery1.Close;
SQLQuery1.SQL.Clear;
SQLQuery1.SQL.Add('SELECT * FROM (SELECT P.CDREDUZIDO, P.CDPRODUTO, P.DSPRODUTO, ');
SQLQuery1.SQL.Add('(case when P.DSPRODUTO LIKE :CAMPO||"%"');
SQLQuery1.SQL.Add(' then 0 else 1 end) ||P.DSPRODUTO as DSPRODUTO_TEMPORARIO FROM PRODUTO P');
SLQQuery1.SQL.Add(' WHERE P.DSPRODUTO LIKE "%"||:CAMPO||"%"');
SQLQuery1.SQL.Add(' Order by DSPRODUTO_TEMPORARIO');
SQLQuery1.ExecSQL;
cdsProduto.Close;
cdsProduto.Open;
Boa sorte e bons códigos!!
GOSTEI 0