Pesquisa no DBGrid
Boa Tarde a Todos,
Antes de tudo quero dizer que sou iniciante em Delphi, estou aprendendo sozinho e com apostilas...
mais vai lá minha dúvida...
tenho uma DBGrid (DBGrid1)
um campo Edit (Edit1)
um BitBtn (BitBtn1)
e um ComboBox (ComboBox1)
preciso fazer com que ao digitar um texto no Edit, vai alimentando minha DbGrid,
por exemplo, inicio o form listando todos os registros de um cadastro de produtos no DBGrid, e ao começar digitar "COCA" no Edit1, apareça tudo que contenha a palavra "COCA", ou quando eu clicar no BitBtn, mas isso filtrando de acordo com meu combobox que tem as seguintes opções: Descrição, Código e Código de Barras.
já tentei com algumas formas que achei na net, mas não funcionou.
conto com a ajuda de vocês, Ótimo Fim de Semana pra todos!
Antes de tudo quero dizer que sou iniciante em Delphi, estou aprendendo sozinho e com apostilas...
mais vai lá minha dúvida...
tenho uma DBGrid (DBGrid1)
um campo Edit (Edit1)
um BitBtn (BitBtn1)
e um ComboBox (ComboBox1)
preciso fazer com que ao digitar um texto no Edit, vai alimentando minha DbGrid,
por exemplo, inicio o form listando todos os registros de um cadastro de produtos no DBGrid, e ao começar digitar "COCA" no Edit1, apareça tudo que contenha a palavra "COCA", ou quando eu clicar no BitBtn, mas isso filtrando de acordo com meu combobox que tem as seguintes opções: Descrição, Código e Código de Barras.
já tentei com algumas formas que achei na net, mas não funcionou.
conto com a ajuda de vocês, Ótimo Fim de Semana pra todos!
Ewerton Batista
Curtidas 0
Respostas
Robson Catunda
10/04/2010
Uma forma bem simples.
No evento onclick do botão faça:
var
xcamando: string;
begin
case combobox1.itemindex of
0 : xcamando:='select * from produtos where descricao=%'+quotedstr(edit1.text)+'%';
1 : xcamando:='select * from produtos where codigo='+quotedstr(edit1.text);
2 : xcamando:='select * from produtos where codigodebarras=%'+quotedstr(edit1.text)+'%';
end;
datasource1.dataset.close;
sqldataset1.commandText:=xcomando;
datasource1.dataset.open;
end;
obs: como vc não especificou o componente de acesso aos dados, eu considerei um conjunto sqldataset e clientdataset, com o clientdataset ligado ao datasource.
GOSTEI 0
Robson Catunda
10/04/2010
ah... um conselho, já que vc diz ser iniciante:
Nunca abra uma tabela trazendo todos os registros, à menos que vc tenha certeza de ser uma tabela tipicamente pequena.
Cadastros de produtos, clientes e vendas por exemplo, costumam ser muito grandes.
Sempre defina uma condição antes de executar o sql.
GOSTEI 0
Ewerton Batista
10/04/2010
Então Robson eu uso um DataModule (como a propridade Name= Dm) e dentro dele eu tenho:
SimpleDataSetProdutos
DataSourceProdutos
como ficaria então?
eu modifiquei de acordo com meus campos e ficou assim somente a em vermelho que não sei como ficaria
var
comando: string;
begin
case combobox1.itemindex of
0 : comando:='select * from PRODUTOS where PRODESCRICAO=%'+quotedstr(Edit1.text)+'%';
1 : comando:='select * from PRODUTOS where PROCODIGO='+quotedstr(Edit1.text);
2 : comando:='select * from PRODUTOS where PROCODBAR=%'+quotedstr(Edit1.text)+'%';
end;
Dm.DataSourceProduto.DataSet.Close;
sqldataset1.commandText:=comando;
Dm.DataSourceProduto.DataSet.Close;
end;
Brigadãooo!
SimpleDataSetProdutos
DataSourceProdutos
como ficaria então?
eu modifiquei de acordo com meus campos e ficou assim somente a em vermelho que não sei como ficaria
var
comando: string;
begin
case combobox1.itemindex of
0 : comando:='select * from PRODUTOS where PRODESCRICAO=%'+quotedstr(Edit1.text)+'%';
1 : comando:='select * from PRODUTOS where PROCODIGO='+quotedstr(Edit1.text);
2 : comando:='select * from PRODUTOS where PROCODBAR=%'+quotedstr(Edit1.text)+'%';
end;
Dm.DataSourceProduto.DataSet.Close;
sqldataset1.commandText:=comando;
Dm.DataSourceProduto.DataSet.Close;
end;
Brigadãooo!
GOSTEI 0
Ewerton Batista
10/04/2010
Fiz assim, acho que ta certo,
mas quando clico no botão, não aparece nada na DBGrid!
fica sem nenhum registro, e não apresenta nenhuma mensagem de erro.
begin
Close;
end;
procedure TFrmPesquisaUsuario.BitBtn1Click(Sender: TObject);
var
comando: string;
begin
case ComboBox1.itemindex of
0 : comando:='select * from PRODUTOS where PRODESCRICAO=%'+quotedstr(Edit1.text)+'%';
1 : comando:='select * from PRODUTOS where PROCODIGO='+quotedstr(Edit1.text);
2 : comando:='select * from PRODUTOS where PROCODBAR=%'+quotedstr(Edit1.text)+'%';
end;
Dm.DataSourceProduto.DataSet.Close;
Dm.SimpleDataSetProdutos.DataSet.CommandText:=comando;
Dm.DataSourceProduto.DataSet.Close;
end;
Espero pela sua ajuda...
mas quando clico no botão, não aparece nada na DBGrid!
fica sem nenhum registro, e não apresenta nenhuma mensagem de erro.
begin
Close;
end;
procedure TFrmPesquisaUsuario.BitBtn1Click(Sender: TObject);
var
comando: string;
begin
case ComboBox1.itemindex of
0 : comando:='select * from PRODUTOS where PRODESCRICAO=%'+quotedstr(Edit1.text)+'%';
1 : comando:='select * from PRODUTOS where PROCODIGO='+quotedstr(Edit1.text);
2 : comando:='select * from PRODUTOS where PROCODBAR=%'+quotedstr(Edit1.text)+'%';
end;
Dm.DataSourceProduto.DataSet.Close;
Dm.SimpleDataSetProdutos.DataSet.CommandText:=comando;
Dm.DataSourceProduto.DataSet.Close;
end;
Espero pela sua ajuda...
GOSTEI 0
Robson Catunda
10/04/2010
Tente colocando o case como segue abaixo:
(observe que foram alteradas as opções 0 e 2)
case ComboBox1.itemindex of
0 : comando:='select * from PRODUTOS where PRODESCRICAO containing '+quotedstr(Edit1.text);
1 : comando:='select * from PRODUTOS where PROCODIGO='+quotedstr(Edit1.text);
2 : comando:='select * from PRODUTOS where PROCODBAR containing '+quotedstr(Edit1.text);
end;. Além disso, verifique se o DBGrid está realmente ligado ao DataSource e este ao SimpleDataSet. Outras observações: 1 - Sempre prefira o Dialect 3. 2 - O CharSet e Collate definidos tem influencia nos selects efetuados, devido a letras maiúsculas, minúsculas e acentos. 3 - Eu costumo utilizar o CharSet=ISO8859_1 e o Collate=ISO8859_1 para Firebird 1.5, ou Collate=PT_BR no Firebird 2.0.
0 : comando:='select * from PRODUTOS where PRODESCRICAO containing '+quotedstr(Edit1.text);
1 : comando:='select * from PRODUTOS where PROCODIGO='+quotedstr(Edit1.text);
2 : comando:='select * from PRODUTOS where PROCODBAR containing '+quotedstr(Edit1.text);
end;. Além disso, verifique se o DBGrid está realmente ligado ao DataSource e este ao SimpleDataSet. Outras observações: 1 - Sempre prefira o Dialect 3. 2 - O CharSet e Collate definidos tem influencia nos selects efetuados, devido a letras maiúsculas, minúsculas e acentos. 3 - Eu costumo utilizar o CharSet=ISO8859_1 e o Collate=ISO8859_1 para Firebird 1.5, ou Collate=PT_BR no Firebird 2.0.
GOSTEI 0
Wilson Junior
10/04/2010
Faltou você abrir o DataSet.
Dm.DataSourceProduto.DataSet.Close;
Dm.SimpleDataSetProdutos.DataSet.CommandText:=comando;
Dm.DataSourceProduto.DataSet.Open;
Espero ter colaborado.
Dm.DataSourceProduto.DataSet.Close;
Dm.SimpleDataSetProdutos.DataSet.CommandText:=comando;
Dm.DataSourceProduto.DataSet.Open;
Espero ter colaborado.
GOSTEI 0
Ewerton Batista
10/04/2010
Obrigado Wilson, Obrigado Robson...
está funcionando agora certinho...porém...mais uma ajudinha de vocês
se eu por pra filtrar por código, e deixar o Edit em branco ele apresenta essa msg de erro:
acho que vai precisar de um if mas não sei onde por, poderiam me ajudar?
Obrigado!
está funcionando agora certinho...porém...mais uma ajudinha de vocês
se eu por pra filtrar por código, e deixar o Edit em branco ele apresenta essa msg de erro:
acho que vai precisar de um if mas não sei onde por, poderiam me ajudar?
Obrigado!
GOSTEI 0
Wilson Junior
10/04/2010
Substitua:
Por:
Qualquer dúvida sobre o código é só perguntar.
Espero ter colaborado.
1 : comando:='select * from PRODUTOS where PROCODIGO='+quotedstr(Edit1.text);
Por:
1 : comando:='select * from PRODUTOS where PROCODIGO='+IntToStr( StrToIntDef(Edit1.text, -1) );
Qualquer dúvida sobre o código é só perguntar.
Espero ter colaborado.
GOSTEI 0
Ewerton Batista
10/04/2010
Muito Obrigado Wilsson, deu mas se o Edit1 estiver em branco não mostra nada, como eu faço para que quando estiver em branco, mostre todos os registros?
Obrigado!
Obrigado!
GOSTEI 0
Wilson Junior
10/04/2010
Comando := 'SELECT * FROM PRODUTO'; if Trim(Edit1.Text) <> '' then begin case ComboBox1.ItemIndex of 0: Comando := Comando + 'WHERE ProDescricao CONTAINING ' + QuotedStr( Edit1.text ); 1: Comando := Comando + 'WHERE ProCodigo = ' + IntToStr( StrToIntDef(Edit1.text, -1) ); 2: Comando := Comando + 'WHERE ProCodBar CONTAINING ' + QuotedStr( Edit1.text ); end; end ;
Espero ter colaborado.
GOSTEI 0
Ewerton Batista
10/04/2010
É Wilson, não deu certo não...
substiui o código, e quando faço a pesquisa continua do mesmo jeito, não apresenta nenhuma mensagem mas não efetua a pesquisa tambem.
substiui o código, e quando faço a pesquisa continua do mesmo jeito, não apresenta nenhuma mensagem mas não efetua a pesquisa tambem.
GOSTEI 0
Wilson Junior
10/04/2010
Acho que deve ser porque eu esqueci de colocar um espaço após o nome da tabela
Comando := 'SELECT * FROM PRODUTO ';
GOSTEI 0
Ewerton Batista
10/04/2010
Agora quando eu digito qualquer coisa no Edit1, aparece o seguinte erro:
olhe meu código como está, verifique se é isso mesmo:
olhe meu código como está, verifique se é isso mesmo:
procedure TFrmPesquisaProduto.Edit1Change(Sender: TObject); var comando: string; begin Comando := 'SELECT * FROM PRODUTO '; if Trim(Edit1.Text) <> '' then begin case ComboBox1.ItemIndex of 0: Comando := Comando + 'WHERE ProDescricao CONTAINING ' + QuotedStr( Edit1.text ); 1: Comando := Comando + 'WHERE ProCodigo = ' + IntToStr( StrToIntDef(Edit1.text, -1) ); 2: Comando := Comando + 'WHERE ProCodBar CONTAINING ' + QuotedStr( Edit1.text ); end; end ; Dm.DataSourceProduto.DataSet.Close; Dm.SimpleDataSetProdutos.DataSet.CommandText:=comando; Dm.DataSourceProduto.DataSet.Open; end;
GOSTEI 0
Wilson Junior
10/04/2010
O erro é porque você está tentando acessar a tabela PRODUTO e o nome dela é PRODUTOS, pois escrevi errado no código que lhe passei anteriormente.
Espero ter colaborado.
Espero ter colaborado.
GOSTEI 0
Wilson Junior
10/04/2010
Funcionou???
Se sim, coloque como concluído o post, caso contrário informe o erro que está acontecendo.
Se sim, coloque como concluído o post, caso contrário informe o erro que está acontecendo.
GOSTEI 0
Andre Batista
10/04/2010
E ae galera tudo bem??? como vcs pdem ver tmb sou novato, mas dando uma olhada no forum e neste post ja que preciso fazer um desses, eu percebi uma coisa mas naum sei c estou certo, mas assim, isso soh vai funcionar se tiver alguma coisa escrita no edit1, esse edit1 é do nome, mas se vc escolher o codigo de barra por exemplo isso naum vai funcionar, talvez eu esteja errado, mas naum fica mais facil fazer assim:
var
comando: string; resultado: string;
begin
Comando := 'SELECT * FROM PRODUTO ';
if Edit1.Text <> '' then resultado:= 'WHERE ProDescricao CONTAINING ' + QuotedStr( Edit1.text ); dm.datasourceproduto.dataset.commandtext := comando+resultado; if edit2.text <> '' then resultado:= 'WHERE ProCodigo = ' + IntToStr( StrToIntDef(Edit2.text, -1) ); dm.datasourceproduto.dataset.commandtext := comando+resultado; if edit3.text <> '' then resultado:='WHERE ProCodBar CONTAINING ' + QuotedStr( Edit2.text ); dm.datasourceproduto.dataset.commandtext := comando+resultado; end;
Dm.DataSourceProduto.DataSet.Open;
end; Acho que eh isso, lembrando que edit1 campo para nome, edit2 para codigo e edit3 paracodigo de barra, apesar de naum saber se esta certo acho que assim vcs ja podem me ajudar no meu dbgrid e na minha consulta, minha consulta vai ser para um formulario de pedido, assim, eu naum lembro o codigo do cliente entaum faço pesquisa para saber e continuar o pedido, vai ser +o- isso ae em cima Valeu espero ter ajudado e depois ser ajudado com isso ae, valeu André Batista
comando: string; resultado: string;
begin
Comando := 'SELECT * FROM PRODUTO ';
if Edit1.Text <> '' then resultado:= 'WHERE ProDescricao CONTAINING ' + QuotedStr( Edit1.text ); dm.datasourceproduto.dataset.commandtext := comando+resultado; if edit2.text <> '' then resultado:= 'WHERE ProCodigo = ' + IntToStr( StrToIntDef(Edit2.text, -1) ); dm.datasourceproduto.dataset.commandtext := comando+resultado; if edit3.text <> '' then resultado:='WHERE ProCodBar CONTAINING ' + QuotedStr( Edit2.text ); dm.datasourceproduto.dataset.commandtext := comando+resultado; end;
Dm.DataSourceProduto.DataSet.Open;
end; Acho que eh isso, lembrando que edit1 campo para nome, edit2 para codigo e edit3 paracodigo de barra, apesar de naum saber se esta certo acho que assim vcs ja podem me ajudar no meu dbgrid e na minha consulta, minha consulta vai ser para um formulario de pedido, assim, eu naum lembro o codigo do cliente entaum faço pesquisa para saber e continuar o pedido, vai ser +o- isso ae em cima Valeu espero ter ajudado e depois ser ajudado com isso ae, valeu André Batista
GOSTEI 0
Andre Batista
10/04/2010
Bem galera, seguinte, depois de ler esse post resolvi fazer o meu form de consulta, fico assim:
procedure TFRMConsultaCliente.BTOFiltrarClick(Sender: TObject);
begin
inherited;
IBQRYConsulta.Close;
IBQRYConsulta.SQL.Clear;
IBQRYConsulta.SQL.Add('select * from TBL_Cliente where (0=0)');
if EDTNome.Text <> '' then
IBQRYConsulta.SQL.Add('and (cli_nome like '+EDTNome.Text+'%'')');
if EDTRazao.Text <> '' then
IBQRYConsulta.SQL.Add('and (cli_razao like '+EDTNome.Text+'%'')');
if EDTCidade.Text <> '' then
IBQRYConsulta.SQL.Add('and (cli_cidade like '+EDTCidade.Text+'%'')');
if edtCNPJ.Text <> '' then
IBQRYConsulta.SQL.Add('and (cli_cnpj = '+QuotedStr(edtCNPJ.Text)+')');
case RDGClassificar.ItemIndex of
0:IBQRYConsulta.SQL.Add('order by Cli_nome');
1:IBQRYConsulta.SQL.Add('order by Cli_Razao');
2:IBQRYConsulta.SQL.Add('order by Cli_Cidade');
3:IBQRYConsulta.sql.Add('order by Cli_CNPJ');
end;
IBQRYConsulta.Open;
end; mas esta dando o seguinte erro: eu naum sei o que esta acontecendo alguem consegue me ajudar Valeu galera André Batista
begin
inherited;
IBQRYConsulta.Close;
IBQRYConsulta.SQL.Clear;
IBQRYConsulta.SQL.Add('select * from TBL_Cliente where (0=0)');
if EDTNome.Text <> '' then
IBQRYConsulta.SQL.Add('and (cli_nome like '+EDTNome.Text+'%'')');
if EDTRazao.Text <> '' then
IBQRYConsulta.SQL.Add('and (cli_razao like '+EDTNome.Text+'%'')');
if EDTCidade.Text <> '' then
IBQRYConsulta.SQL.Add('and (cli_cidade like '+EDTCidade.Text+'%'')');
if edtCNPJ.Text <> '' then
IBQRYConsulta.SQL.Add('and (cli_cnpj = '+QuotedStr(edtCNPJ.Text)+')');
case RDGClassificar.ItemIndex of
0:IBQRYConsulta.SQL.Add('order by Cli_nome');
1:IBQRYConsulta.SQL.Add('order by Cli_Razao');
2:IBQRYConsulta.SQL.Add('order by Cli_Cidade');
3:IBQRYConsulta.sql.Add('order by Cli_CNPJ');
end;
IBQRYConsulta.Open;
end; mas esta dando o seguinte erro: eu naum sei o que esta acontecendo alguem consegue me ajudar Valeu galera André Batista
GOSTEI 0
Andre Batista
10/04/2010
Seguinte, 2 coisas, eu tava dando uma verificada nos componentes para ver se estava td certo, o DBGrid estava conectado no DS errado por isso naum funcionava, agora sim funciona, em termos, auhauhuha, se naum tiver nenhuma condicaum nos edits, ele aparece no DBGrid todos os campos, mas se coloco por exemplo um nome e mando filtrar, da o mesmo erro abaixo, quer dizer, continuo na mesma, auhauhauh, por favor alguem me fale o q esta errado
Bem galera, seguinte, depois de ler esse post resolvi fazer o meu form de consulta, fico assim:
procedure TFRMConsultaCliente.BTOFiltrarClick(Sender: TObject);
begin
inherited;
IBQRYConsulta.Close;
IBQRYConsulta.SQL.Clear;
IBQRYConsulta.SQL.Add('select * from TBL_Cliente where (0=0)');
if EDTNome.Text <> '' then
IBQRYConsulta.SQL.Add('and (cli_nome like '+EDTNome.Text+'%'')');
if EDTRazao.Text <> '' then
IBQRYConsulta.SQL.Add('and (cli_razao like '+EDTNome.Text+'%'')');
if EDTCidade.Text <> '' then
IBQRYConsulta.SQL.Add('and (cli_cidade like '+EDTCidade.Text+'%'')');
if edtCNPJ.Text <> '' then
IBQRYConsulta.SQL.Add('and (cli_cnpj = '+QuotedStr(edtCNPJ.Text)+')');
case RDGClassificar.ItemIndex of
0:IBQRYConsulta.SQL.Add('order by Cli_nome');
1:IBQRYConsulta.SQL.Add('order by Cli_Razao');
2:IBQRYConsulta.SQL.Add('order by Cli_Cidade');
3:IBQRYConsulta.sql.Add('order by Cli_CNPJ');
end;
IBQRYConsulta.Open;
end; mas esta dando o seguinte erro: eu naum sei o que esta acontecendo alguem consegue me ajudar Valeu galera André Batista
begin
inherited;
IBQRYConsulta.Close;
IBQRYConsulta.SQL.Clear;
IBQRYConsulta.SQL.Add('select * from TBL_Cliente where (0=0)');
if EDTNome.Text <> '' then
IBQRYConsulta.SQL.Add('and (cli_nome like '+EDTNome.Text+'%'')');
if EDTRazao.Text <> '' then
IBQRYConsulta.SQL.Add('and (cli_razao like '+EDTNome.Text+'%'')');
if EDTCidade.Text <> '' then
IBQRYConsulta.SQL.Add('and (cli_cidade like '+EDTCidade.Text+'%'')');
if edtCNPJ.Text <> '' then
IBQRYConsulta.SQL.Add('and (cli_cnpj = '+QuotedStr(edtCNPJ.Text)+')');
case RDGClassificar.ItemIndex of
0:IBQRYConsulta.SQL.Add('order by Cli_nome');
1:IBQRYConsulta.SQL.Add('order by Cli_Razao');
2:IBQRYConsulta.SQL.Add('order by Cli_Cidade');
3:IBQRYConsulta.sql.Add('order by Cli_CNPJ');
end;
IBQRYConsulta.Open;
end; mas esta dando o seguinte erro: eu naum sei o que esta acontecendo alguem consegue me ajudar Valeu galera André Batista
GOSTEI 0
Andre Batista
10/04/2010
Bem galera, devem estar me achando chato já, mas descobri o erro, logo, me aparece outro, uhauhauh, o codigo ficou assim agora:
begin
inherited;
IBQRYConsulta.Close;
IBQRYConsulta.SQL.Clear;
IBQRYConsulta.SQL.Add('select * from TBL_Cliente where (0=0)');
if EDTNome.Text <> '' then
IBQRYConsulta.SQL.Add('and (cli_nome like ''%'+EDTNome.Text+'%'')');
if EDTRazao.Text <> '' then
IBQRYConsulta.SQL.Add('and (cli_razao like ''%'+EDTNome.Text+'%'')');
if EDTCidade.Text <> '' then
IBQRYConsulta.SQL.Add('and (cli_cidade like ''%'+EDTCidade.Text+'%'')');
if edtCNPJ.Text <> '' then
IBQRYConsulta.SQL.Add('and (cli_cnpj = '+QuotedStr(edtCNPJ.Text)+')');
case RDGClassificar.ItemIndex of
0:IBQRYConsulta.SQL.Add('order by Cli_nome');
1:IBQRYConsulta.SQL.Add('order by Cli_Razao');
2:IBQRYConsulta.SQL.Add('order by Cli_CNPJ');
3:IBQRYConsulta.sql.Add('order by Cli_Cidade');
end;
IBQRYConsulta.Open; Agora naum da erro nenhum, mas se coloco um nome para a pesquisa o DBGrid fica em branco, mas se tiro o nome aparece todos os campos, a ordem está funcionando corretamente, e agora o que fazer??? acredito q seja alguma coisa bem pequena que naum consegui ver, pois no erro anterior faltava apenas %, agora q naum falta mais pq ele insiste em naum fazer a pesquisa Valeu André Batista
inherited;
IBQRYConsulta.Close;
IBQRYConsulta.SQL.Clear;
IBQRYConsulta.SQL.Add('select * from TBL_Cliente where (0=0)');
if EDTNome.Text <> '' then
IBQRYConsulta.SQL.Add('and (cli_nome like ''%'+EDTNome.Text+'%'')');
if EDTRazao.Text <> '' then
IBQRYConsulta.SQL.Add('and (cli_razao like ''%'+EDTNome.Text+'%'')');
if EDTCidade.Text <> '' then
IBQRYConsulta.SQL.Add('and (cli_cidade like ''%'+EDTCidade.Text+'%'')');
if edtCNPJ.Text <> '' then
IBQRYConsulta.SQL.Add('and (cli_cnpj = '+QuotedStr(edtCNPJ.Text)+')');
case RDGClassificar.ItemIndex of
0:IBQRYConsulta.SQL.Add('order by Cli_nome');
1:IBQRYConsulta.SQL.Add('order by Cli_Razao');
2:IBQRYConsulta.SQL.Add('order by Cli_CNPJ');
3:IBQRYConsulta.sql.Add('order by Cli_Cidade');
end;
IBQRYConsulta.Open; Agora naum da erro nenhum, mas se coloco um nome para a pesquisa o DBGrid fica em branco, mas se tiro o nome aparece todos os campos, a ordem está funcionando corretamente, e agora o que fazer??? acredito q seja alguma coisa bem pequena que naum consegui ver, pois no erro anterior faltava apenas %, agora q naum falta mais pq ele insiste em naum fazer a pesquisa Valeu André Batista
GOSTEI 0
Andre Batista
10/04/2010
Agora sim fiquei insuportavel, auhauhauhauhhua, ninguem quer ver mais meus posts aqui, mas finalmente funcionou, e espero que ajude alguem ou até mesmo de alguma outra ideia para melhorias, finalmente ficou assim o codigo:
begin
inherited;
IBQRYConsulta.Close;
IBQRYConsulta.SQL.Clear;
IBQRYConsulta.SQL.Add('select * from TBL_Cliente where (0=0)');
if EDTNome.Text <> '' then
IBQRYConsulta.SQL.Add('and (cli_nome like ''%'+EDTNome.Text+'%'')');
if EDTRazao.Text <> '' then
IBQRYConsulta.SQL.Add('and (cli_razao like ''%'+EDTRazao.Text+'%'')');
if EDTCidade.Text <> '' then
IBQRYConsulta.SQL.Add('and (cli_cidade like ''%'+EDTCidade.Text+'%'')');
if edtCNPJ.Text <> '' then
IBQRYConsulta.SQL.Add('and (cli_cnpj = '+QuotedStr(edtCNPJ.Text)+')');
case RDGClassificar.ItemIndex of
0:IBQRYConsulta.SQL.Add('order by Cli_nome');
1:IBQRYConsulta.SQL.Add('order by Cli_Razao');
2:IBQRYConsulta.SQL.Add('order by Cli_CNPJ');
3:IBQRYConsulta.sql.Add('order by Cli_Cidade');
end;
IBQRYConsulta.Open;
O unico problema que me apresentou, mas naum vou me preocupar com isso por enquanto, é que se por exemplo eu digitar no nome "Pedro" e filtrar ele acha, mas se eu digitar "pedro" ele naum acha, naum esta case sensitive, para mim está servindo, se ajudar alguem, otimo, mas pode ser que precise de algumas melhorias, entaum é isso, neste post naum escrevo mais, apenas se me pedirem, auhauhauhuhahua Valeu André Batista
inherited;
IBQRYConsulta.Close;
IBQRYConsulta.SQL.Clear;
IBQRYConsulta.SQL.Add('select * from TBL_Cliente where (0=0)');
if EDTNome.Text <> '' then
IBQRYConsulta.SQL.Add('and (cli_nome like ''%'+EDTNome.Text+'%'')');
if EDTRazao.Text <> '' then
IBQRYConsulta.SQL.Add('and (cli_razao like ''%'+EDTRazao.Text+'%'')');
if EDTCidade.Text <> '' then
IBQRYConsulta.SQL.Add('and (cli_cidade like ''%'+EDTCidade.Text+'%'')');
if edtCNPJ.Text <> '' then
IBQRYConsulta.SQL.Add('and (cli_cnpj = '+QuotedStr(edtCNPJ.Text)+')');
case RDGClassificar.ItemIndex of
0:IBQRYConsulta.SQL.Add('order by Cli_nome');
1:IBQRYConsulta.SQL.Add('order by Cli_Razao');
2:IBQRYConsulta.SQL.Add('order by Cli_CNPJ');
3:IBQRYConsulta.sql.Add('order by Cli_Cidade');
end;
IBQRYConsulta.Open;
O unico problema que me apresentou, mas naum vou me preocupar com isso por enquanto, é que se por exemplo eu digitar no nome "Pedro" e filtrar ele acha, mas se eu digitar "pedro" ele naum acha, naum esta case sensitive, para mim está servindo, se ajudar alguem, otimo, mas pode ser que precise de algumas melhorias, entaum é isso, neste post naum escrevo mais, apenas se me pedirem, auhauhauhuhahua Valeu André Batista
GOSTEI 0
Wilson Junior
10/04/2010
Tente desta maneira
Espero ter colaborado.
if
EDTNome.Text <> '' then
IBQRYConsulta.SQL.Add(' and
(UPPER(cli_nome) LIKE UPPER( ' + QuotedStr( '%' + EDTNome.Text + '%' ) + ') )' )
;
if EDTRazao.Text <>
'' then
IBQRYConsulta.SQL.Add( ' and (UPPER(cli_razao) LIKE
UPPER(' + QuotedStr( '%' + EDTRazao.Text + '%' ) + ') )' )
;
if EDTCidade.Text <> '' then
IBQRYConsulta.SQL.Add( ' and (UPPER(cli_cidade) like UPPER(
' + QuotedStr( '%' + EDTCidade.Text + '%' ) + ') )' )
;
if edtCNPJ.Text <> '' then
IBQRYConsulta.SQL.Add( ' and (cli_cnpj = ' + QuotedStr(edtCNPJ.Text)+ ')' )
;
Espero ter colaborado.
GOSTEI 0
Ewerton Batista
10/04/2010
Olá Pessoal, desculpem pela demora, fiquei sem computador por um tempo, mas agora já está tudo de bowa, Wilson muito obrigado pela ajuda, funcionou perfeitamente! Nota 10!
GOSTEI 0
Bruno Henrique
10/04/2010
Pessoal, boa noite!!!
Tenho um edit e um combobox, seleciono o indice no combobox e digito no edit para trazer os dados no dbgrid, o indice do codigo funcionou normal, mais o nome e o usuario quando digito a letra no edit para pesquisar me retorna um erro, não consigo solucionar.
Mensagem de erro:
.exe raised exception EOleException white message Line1:Incorrect syntax near CONTAINING".Process stopped.Use Step or run continue.
Abaixo o meu codigo fonte.
unit U_Pesquisa_Funcionarios;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, ADODB, Grids, DBGrids, ExtCtrls;
type
TFrm_Pesquisa_Funcionarios = class(TForm)
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
Dbg_Pesquisa_Funcionarios: TDBGrid;
ADODataSet1: TADODataSet;
DataSource1: TDataSource;
Edit1: TEdit;
ComboBox1: TComboBox;
Label1: TLabel;
procedure Edit1Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Frm_Pesquisa_Funcionarios: TFrm_Pesquisa_Funcionarios;
var
comando: string;
implementation
{$R *.dfm}
procedure TFrm_Pesquisa_Funcionarios.Edit1Change(Sender: TObject);
begin
begin
Comando := SELECT * FROM Cad_Funcionarios ;
if Trim(Edit1.Text) then
begin
case ComboBox1.ItemIndex of
0: Comando := Comando + WHERE Codigo = + IntToStr( StrToIntDef(Edit1.text, -1) );
1: Comando := Comando + WHERE Nome CONTAINING + QuotedStr( Edit1.text);
2: Comando := Comando + WHERE Usuario CONTAINIG + QuotedStr( Edit1.text);
end;
end;
ADODataSet1.Close;
ADODataSet1.CommandText:=comando;
ADODataSet1.Open;
end;
end;
Tenho um edit e um combobox, seleciono o indice no combobox e digito no edit para trazer os dados no dbgrid, o indice do codigo funcionou normal, mais o nome e o usuario quando digito a letra no edit para pesquisar me retorna um erro, não consigo solucionar.
Mensagem de erro:
.exe raised exception EOleException white message Line1:Incorrect syntax near CONTAINING".Process stopped.Use Step or run continue.
Abaixo o meu codigo fonte.
unit U_Pesquisa_Funcionarios;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, ADODB, Grids, DBGrids, ExtCtrls;
type
TFrm_Pesquisa_Funcionarios = class(TForm)
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
Dbg_Pesquisa_Funcionarios: TDBGrid;
ADODataSet1: TADODataSet;
DataSource1: TDataSource;
Edit1: TEdit;
ComboBox1: TComboBox;
Label1: TLabel;
procedure Edit1Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Frm_Pesquisa_Funcionarios: TFrm_Pesquisa_Funcionarios;
var
comando: string;
implementation
{$R *.dfm}
procedure TFrm_Pesquisa_Funcionarios.Edit1Change(Sender: TObject);
begin
begin
Comando := SELECT * FROM Cad_Funcionarios ;
if Trim(Edit1.Text) then
begin
case ComboBox1.ItemIndex of
0: Comando := Comando + WHERE Codigo = + IntToStr( StrToIntDef(Edit1.text, -1) );
1: Comando := Comando + WHERE Nome CONTAINING + QuotedStr( Edit1.text);
2: Comando := Comando + WHERE Usuario CONTAINIG + QuotedStr( Edit1.text);
end;
end;
ADODataSet1.Close;
ADODataSet1.CommandText:=comando;
ADODataSet1.Open;
end;
end;
GOSTEI 0