GARANTIR DESCONTO

Fórum Problemas com Like no Interbase #59188

29/11/2007

0

Eu tive um problema ao usar campos do tipo Time, tive que fazer umas mudançar no Dialect, eu tinha algumas funçoes no programa que usava Like, depois de eu ter feito essa alteração do dialect o like não funciona mais, pode ter alguma coisa com o dialect? Mudei para Dialect 3

BD: Interbase


Luiz_aquino

Luiz_aquino

Responder

Posts

30/11/2007

Pestana_

na verdade eu não tenho conhecimento que isso pode afetar o Like, mas sei que quando você muda de Dialect do 1 para o 3 (no Firebird) voce precisa recriar o banco e mudar o tipo do campo para TimeStamp, acredito que o Interbase seja igual, você precisava estar verificando isso. O tipo de dado TimeStamp tem a função de manter a compatibilidade com o Dialeto 1.

se voce não alterou o tipo de dados experimente incluir registros em sua tabela e verifique se ocorre erros.


flw.


Responder

Gostei + 0

03/12/2007

Luiz_aquino

na verdade eu não tenho conhecimento que isso pode afetar o Like, mas sei que quando você muda de Dialect do 1 para o 3 (no Firebird) voce precisa recriar o banco e mudar o tipo do campo para TimeStamp, acredito que o Interbase seja igual, você precisava estar verificando isso. O tipo de dado TimeStamp tem a função de manter a compatibilidade com o Dialeto 1. se voce não alterou o tipo de dados experimente incluir registros em sua tabela e verifique se ocorre erros. flw.


Mas o TimeStamp ele recebe data e hora, eu gostaria somente da hora. se mudo no registro do win SQLDialect = 3 o Date e o Time funcionam mas quando uso o like dentro do Delphi, ou seja com ¬ ele da erro.
Pelo q entendi ele não aceita o ¬, se eu fazer uma consulta no iterbase roda beleza o like, mas em código no delphi q eu usaria um ¬ pq eu pegaria os dados de um edit, ele da erro.


Responder

Gostei + 0

04/12/2007

Joaoshi

Colega, tente assim:

SELECT CAST(SeuCampoTimeStamp AS TIME) FROM SUA TABELA
WHERE CAST(SeuCampoTimeStamp AS TIME) LIKE ´10¬´;

Espero ter ajudado.


Responder

Gostei + 0

04/12/2007

Brasidata

A dica pode não ser muito valiosa, mas se vc está usando instruções SQL dinâmicas no seu aplicativo, preste atenção se ao montar as pesquisas você lembrou que ao mudar o dialeto (além das alterações dos tipos Date, Time e TimeStamp) há uma diferença no uso de ´ ou ´ (aspas duplas onde eram aspas simples e vice-versa).


Responder

Gostei + 0

05/12/2007

Luiz_aquino

A dica pode não ser muito valiosa, mas se vc está usando instruções SQL dinâmicas no seu aplicativo, preste atenção se ao montar as pesquisas você lembrou que ao mudar o dialeto (além das alterações dos tipos Date, Time e TimeStamp) há uma diferença no uso de ´ ou ´ (aspas duplas onde eram aspas simples e vice-versa).


SELECT CAST(SeuCampoTimeStamp AS TIME) FROM SUA TABELA
WHERE CAST(SeuCampoTimeStamp AS TIME) LIKE ´10¬´;

esse código não me ajudaria!

como faço uma consulta com like mas usando parametro?

select * from cliente
where nome_clie like ´T¬´

no lugar do T eu gostaria de usar um paramentro tipo :pnome_clie que receberia o valor de um edit, lembrando que estou com problema com ´´+Edit+´¬´ ele da erro com ¬, acredito q com o parametro funciona, tentei tbm trocar as ´ por ´ vice e versa e não funciona, o delphi não aceita


Responder

Gostei + 0

05/12/2007

Brasidata

Vou considerar que você está usando SQL dinamicamente no Delphi, enviando uma string pro seu componente via código. Portanto, tenta assim (A quantide exata de ´ é relevante para dar certo):


´ select * from cliente where nome_clie like [color=red:847b63cdc2] ´´´ [/color:847b63cdc2]+ Edit1.Text + ´¬[color=red:847b63cdc2]´´´[/color:847b63cdc2];

Observe bem que, em vermelho, estou usando TRES aspas simples para que o Delphi interprete como uma única aspas na hora de passar a string para o seu componente Query.
Uso assim em MUITOS aplicativos meus e não tenho erros com o ¬.

Bom trabalho


Responder

Gostei + 0

05/12/2007

Brasidata

Mas se você preferir deixar a SQL fixa na sua query e usar parâmetros, aí vai o ´PLANO B´ que acabei de testar aqui sem problema algum:
(Nesse exemplo estou usando os componentes DBX, mas vc pode adaptar para qquer outro)

Primeiro:
Na propriedade CommandText do meu SqlDataSet1 escrevi:
select * from CLIENTES where nome_clie like :pnome_clie 


Depois implementei o OnClick de botão assim:

  if Trim(Edit1.Text) = ´´ then Exit;
  ClientDataSet1.Close;
  SQLDataSet1.ParamByName(´:pnome_clie´).AsString := Edit1.Text + ´¬´;
  ClientDataSet1.Open;


Então foi só ver o resultado num DBGrid.
Tudo funcionando perfeitamente.

Espero que uma dessas duas opções (ou as duas) possa te ajudar...


Responder

Gostei + 0

05/12/2007

Brasidata

OPS... ERRATA

Tem dois pontos sobrando no ParamByName.
O correto é:

  if Trim(Edit1.Text) = ´´ then Exit; 
  ClientDataSet1.Close; 
  SQLDataSet1.ParamByName(´pnome_clie´).AsString := Edit1.Text + ´¬´; 
  ClientDataSet1.Open;



Responder

Gostei + 0

05/12/2007

Luiz_aquino

Vlw, as duas formas ajudaram!!!


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar