Duvidas com DBExpress

Delphi

02/04/2008

estou fazendo um controle de clientes em firebird, estou usando dbexpress, estou precisando fazer uma pesquisa sql usando o clientdataset e tenho o codigo abaixo:
Mas esta dando o erro: EDatabaseError with message ´Token unknown - line 1,char 16 select´.

clientdataset1.Close;
clientdataset1.CommandText :=´select * from cliente´;
clientdataset1.CommandText := clientdataset1.CommandText+´WHERE nome LIKE ´+#39+´¬´+edit2.Text+´¬´+39;
clientdataset1.Open;

procurei varios exemplos na net de como fazer pesquisa sql com o dbexpress atravez do cds mas só encontrei pesquisa sem sql.
alguem pode me ajudar, ou se souber algum lugar q tem exemplo para esta pesquisa.
valeu!!


Japapdb

Japapdb

Curtidas 0

Melhor post

Japapdb

Japapdb

03/04/2008

Amigo, meu num eh possivel acho q eh soh ak q num funciona mesmo, eu testei como vc disse: select * from cliente WHERE nome LIKE ´¬???¬´. e funcionou tudo blz, dei o commit e testei no programa mas da o mesmo erro.
Verifiquei o nome da tabela tbm e coloquei do jeito q foi criado.

Da uma olhada e ve se estou conectando tudo certo ak. pq to desistindo de usar banco de dados em firebird com dbexpress não estou conseguindo fazer a consulta de jeito nenhum, se ate o final de semana eu num conseguir fazer funcionar isso ak. vou ter q apelar pro paradox com bde, e encher de gambiarra mesmo kkkk pq a partir do fds vai começar a contar os dias para a entrega do sistema. mas tenho medo do banco de dados em paradox não aguentar, eh um cadastro para controle de estoque de loda de modas, eo banco de dados vai ter trocentos campos para cadastro completo de tudo da loja, vai rodar em 2 micros.

sqldataset:
commandtext esta ligado a ´cliente´
commandtype esta na opção ´cttable´
Sqlconnection ligao ao ´SQLconnection´

clientdataset
provider name liguei no datasetprovider

datasetprovider
dataset ´liguei no SQLDataset´
e habilitei o ´poAllowCommandtext´

datasource
Dataset ligado ao Clientdataset


GOSTEI 1

Mais Respostas

Fabiano Góes

Fabiano Góes

02/04/2008

teste assim:

var
   sSql: string;
begin
   sSql := ´select * from cliente WHERE Upper(nome) LIKE ´ + QuotedStr(´¬´ + UpperCase(edit2.Text) + ´¬´);

   clientdataset1.Close;
   clientdataset1.CommandText := sSql;
   clientdataset1.Open;
end;


obs: lembrando que pra poder fazer a pesquisa com o ClientDataSet direto, o DataSetProvider deve estar configurado a propriedade: Options.poAllowCommandText = True.


GOSTEI 0
Japapdb

Japapdb

02/04/2008

o amigo, da o mesmo erro, fiz da maneira q vc explicou o datasetprovider esta configurado certinho tbm. mas o erro continua. :(


GOSTEI 0
Brunolspp

Brunolspp

02/04/2008

Monte as consultas no SQLDataSet e não no ClientDataSet.

No meu link de downloads gratuitos (http://cc.codegear.com/author/795118) tem vários exemplos e uma apostila básica de uso do dbexpress com delphi 7 e firebird que pode te ajudar nisso. É passo a passo e bem básica, mas pode srvir como base e para entendimento de algumas dúvidas.

Em tempo, para funcionar via clientdataset, é necessário que o allowcommand no datasetprovider esteja habilitado.

Mas esta não é a melhor prática.


GOSTEI 0
Macario

Macario

02/04/2008

estou fazendo um controle de clientes em firebird, estou usando dbexpress, estou precisando fazer uma pesquisa sql usando o clientdataset e tenho o codigo abaixo: Mas esta dando o erro: EDatabaseError with message ´Token unknown - line 1,char 16 select´. clientdataset1.Close; clientdataset1.CommandText :=´select * from cliente´; clientdataset1.CommandText := clientdataset1.CommandText+´WHERE nome LIKE ´+#39+´¬´+edit2.Text+´¬´+39; clientdataset1.Open; procurei varios exemplos na net de como fazer pesquisa sql com o dbexpress atravez do cds mas só encontrei pesquisa sem sql. alguem pode me ajudar, ou se souber algum lugar q tem exemplo para esta pesquisa. valeu!!


Esta ocorrendo o erro pois a String montada fica:

select * from [b:98c77512c9]clienteWHERE[/b:98c77512c9] nome LIKE ´¬texto¬´

8)


GOSTEI 0
Japapdb

Japapdb

02/04/2008

Então eu testei colocando um espaço, colocando todo o camando na mesma linha, mas mesmo assim da o mesmo erro. estou tentando de toda a maneira ak, procurando alguma coisa na net mas ta dificil


GOSTEI 0
Roger1976

Roger1976

02/04/2008

amigo, pelo o que eu vi, o erro tá apontando para o nome da tabela. Normalmente, eu crio no banco em maiúsculo, e no sql faço da mesma forma:

´select * from CLIENTE where NOME like ´ + quotedstr(´¬´ + edit1.text + ´¬´).

Como vc criou o nome da tabela no banco?


GOSTEI 0
Macario

Macario

02/04/2008

Aproveitando o codigo do nosso colega Fabiano Goes,
tente assim


var sSql: string; begin sSql := ´select * from cliente WHERE Upper(nome) LIKE ´ + QuotedStr(´¬´ + UpperCase(edit2.Text) + ´¬´); clientdataset1.Close; // [i:2947b213f9]Aqui força a ´limpeza´ do commandtext[/i:2947b213f9] [b:2947b213f9]clientdataset1.CommandText := ´´; [/b:2947b213f9] clientdataset1.CommandText := sSql; clientdataset1.Open; end;


Se não funcionar, tente usar a instrução no SQLDataSet.


GOSTEI 0
Builder

Builder

02/04/2008

Observando a sintaxe:

select * from clienteWHERE nome LIKE ´¬texto¬´

o clienteWHERE esta sem espaço, deveria ser cliente WHERE para separar o nome da tabela do comando WHERE.

Ficam assim suas linhas de comando:

clientdataset1.Close;
clientdataset1.CommandText :=´select * from cliente´;
clientdataset1.CommandText := clientdataset1.CommandText+´ WHERE nome LIKE ´+QuotedStr(´¬´+edit2.Text+´¬)´;
clientdataset1.Open;

Se mesmo assim não funcionar, abra o banco de dados através de uma ferramenta SQL de consulta de dados (Flamerobin, IBConsole, pgAdmin, etc. conforme o banco de dados) e teste a linha de comando:

select * from cliente WHERE nome LIKE ´¬???¬´

onde ??? é o que deseja procurar, por exemplo:

select * from cliente WHERE nome LIKE ´¬JOA¬´

O teste acima vai validar coisas como nome da tabela, campo, ...

Você também esta usando o nome da tabela em minúsculo, tenha cuidado com a padronização dos nomes das tabelas, pois nas edições isto pode ser um problema, já que o dbexpress (conforme o driver+bco de dados utilizado) poderá não reconhecer a tabela (table unknow), que irá enxergar cliente e CLIENTE como tabelas diferentes.


GOSTEI 0
Fabiano Góes

Fabiano Góes

02/04/2008

sqldataset: commandtext esta ligado a ´cliente´ commandtype esta na opção ´cttable´ Sqlconnection ligao ao ´SQLconnection´ clientdataset provider name liguei no datasetprovider datasetprovider dataset ´liguei no SQLDataset´ e habilitei o ´poAllowCommandtext´ datasource Dataset ligado ao Clientdataset


tai seu problema cara,
no sqldataset:
[b:c002775eb2]commandtype[/b:c002775eb2] deve ser ´ctQuery´
e
[b:c002775eb2]commandtext[/b:c002775eb2] deve estar limpo

obs: isso se você for mandar os camandos sql pelo ClientDataSet,
mais como o BrunoLSPP falou não é uma boa pratica o certo seria usar o SqlDataSet pra escrever o sql tipo:
SqlDataSet.Close;
SqlDataSet.CommandText := seuSql;
ClientDataSet.Open;


mais o importante é que se você vai fazer pesquisas o SqlDataSet deve estar com [b:c002775eb2]commandtype[/b:c002775eb2] deve ser ´ctQuery´ seja escrevendo o sql nele mesmo ou no ClientDataSet.


GOSTEI 0
Japapdb

Japapdb

02/04/2008

O Amigo, Agora sim ta tudo funcionando bonito...
o problema era esse mesmo das opções do sqldataset em command text e command type fiz da maneira q vc falou e funcionou tudo... valeu mesmo...

Agradeço a todos vcs q me ajudaram neste problema. muito agradecido.


GOSTEI 0
POSTAR