GARANTIR DESCONTO

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?


Benilton

Benilton

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:
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

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

Aceitar