Fórum Pesquisa através de um clientdataset #344546
15/08/2007
0
[quote:3d13237ef8=´Moderação´][color=red:3d13237ef8]Título editado por Massuda
Por favor, não use apenas letras maiúsculas no título/texto.
No caso de reincidência, seus tópicos poderão vir a ser bloqueados.
Leia as :arrow: [url=http://forum.clubedelphi.net/viewtopic.php?t=6689]Regras de Conduta[/url] do fórum.[/color:3d13237ef8][/quote:3d13237ef8]Criei um formulatio e coloquei nele um TEdit com o nome EdtCliente, um DbGrid com o nome de gradeclientes
também coloquei :
SQLDataSet com name= SqlClientes,
DataSetProvider com Name= DspClientes,
ClientDataSet com Name=Clientes,
DataSource com Name = DsClientes,
O Objetivo era é digitar algo em EdtClientes e realizar uma consulta personalizada na tabela clientes através do ClientDataSet e não SQLDataset.
para isso fiz o seguinte coloquei o seguinte código no evento key down do EdtCliente mais não funciona:
begin
If key = vk_return then
begin
//filtra clientes
clientes.close;
clientes.CommandText:= ´select * from CLIENTES where CLIENTE like´+#39+´¬´+ edtclientes.Text+´¬´+39+´order by CLIENTE ASC´;
clientes.Open;
//passa o foco
gradeclientes.SetFocus;
end
else if key = vK_Tab then
EdtCodigo.setfocus;
Acho que a linha do CommandText que filtra clientes está errada alguém pode me ajudar?
Por favor, não use apenas letras maiúsculas no título/texto.
No caso de reincidência, seus tópicos poderão vir a ser bloqueados.
Leia as :arrow: [url=http://forum.clubedelphi.net/viewtopic.php?t=6689]Regras de Conduta[/url] do fórum.[/color:3d13237ef8][/quote:3d13237ef8]Criei um formulatio e coloquei nele um TEdit com o nome EdtCliente, um DbGrid com o nome de gradeclientes
também coloquei :
SQLDataSet com name= SqlClientes,
DataSetProvider com Name= DspClientes,
ClientDataSet com Name=Clientes,
DataSource com Name = DsClientes,
O Objetivo era é digitar algo em EdtClientes e realizar uma consulta personalizada na tabela clientes através do ClientDataSet e não SQLDataset.
para isso fiz o seguinte coloquei o seguinte código no evento key down do EdtCliente mais não funciona:
begin
If key = vk_return then
begin
//filtra clientes
clientes.close;
clientes.CommandText:= ´select * from CLIENTES where CLIENTE like´+#39+´¬´+ edtclientes.Text+´¬´+39+´order by CLIENTE ASC´;
clientes.Open;
//passa o foco
gradeclientes.SetFocus;
end
else if key = vK_Tab then
EdtCodigo.setfocus;
Acho que a linha do CommandText que filtra clientes está errada alguém pode me ajudar?
Benilton
Curtir tópico
+ 0
Responder
Posts
16/08/2007
Emerson Nascimento
o que você quer dizer com ´não funciona´? não abre? não traz registros? dá alguma mensagem de erro?
você não disse que banco de dados está utilizando, então preste atenção numa coisa: se estiver utilizando SQL Server, a busca é feita sem levar em consideração maiúsculas/minúsculas; se estiver utilizando Firebird a busca tem que ser exata: você só encontra se digitar como foi gravado no banco de dados. Para evitar esse problema, utilize a função UPPER().
outra coisa: pressupondo que as ligações dos componentes estejam corretas, ainda será necessário alterar o propriedade Options do DatasetProvider, de modo a incluir a opção poAllowCommandText.
depois disso, faça:
(eu prefiro a utilização de parâmetros ao invés de concatenação direta na instrução. deixa o código mais ´limpo´ e legível)
[b:5bfed51b0a]só pra constar, a ligação dos componentes deve ser assim:[/b:5bfed51b0a]
SqlClientes.SQLConnection := objeto TSQLConnection
DspClientes.Dataset := SqlClientes
DspClientes.Options := [poAllowCommandText] (entre outras que lhe possam ser úteis)
Clientes.ProviderName := DspClientes
DsClientes.Dataset := Clientes
GradeClientes.DataSource := DsClientes
você não disse que banco de dados está utilizando, então preste atenção numa coisa: se estiver utilizando SQL Server, a busca é feita sem levar em consideração maiúsculas/minúsculas; se estiver utilizando Firebird a busca tem que ser exata: você só encontra se digitar como foi gravado no banco de dados. Para evitar esse problema, utilize a função UPPER().
outra coisa: pressupondo que as ligações dos componentes estejam corretas, ainda será necessário alterar o propriedade Options do DatasetProvider, de modo a incluir a opção poAllowCommandText.
depois disso, faça:
begin If key = vk_return then begin //filtra clientes clientes.close; clientes.CommandText := ´select * from CLIENTES ´+ ´where Upper(CLIENTE) like :NomeCliente ´+ ´order by CLIENTE´; clientes.params.parambyname(´NomeCliente´).AsString := AnsiUpperCase(´¬´+edtclientes.Text+´¬´); clientes.Open; //passa o foco gradeclientes.SetFocus; end; end;
(eu prefiro a utilização de parâmetros ao invés de concatenação direta na instrução. deixa o código mais ´limpo´ e legível)
[b:5bfed51b0a]só pra constar, a ligação dos componentes deve ser assim:[/b:5bfed51b0a]
SqlClientes.SQLConnection := objeto TSQLConnection
DspClientes.Dataset := SqlClientes
DspClientes.Options := [poAllowCommandText] (entre outras que lhe possam ser úteis)
Clientes.ProviderName := DspClientes
DsClientes.Dataset := Clientes
GradeClientes.DataSource := DsClientes
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)