Problemas com comando SQL

12/02/2013

1

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.
Responder

Posts

13/02/2013

Joel Rodrigues

No primeiro LIKE, só tem um % mesmo?
Responder

13/02/2013

Cristiano

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?
Responder

13/02/2013

Douglas

MOACIR CHISTE,

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.
Responder

13/02/2013

Douglas

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.
Responder
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)
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!!
Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira