Fórum Pesquisa no DBGrid #134601
10/04/2010
0
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
Curtir tópico
+ 0Posts
10/04/2010
Robson Catunda
Gostei + 0
10/04/2010
Robson Catunda
Gostei + 0
10/04/2010
Ewerton Batista
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
10/04/2010
Ewerton Batista
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
12/04/2010
Robson Catunda
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
12/04/2010
Wilson Junior
Dm.DataSourceProduto.DataSet.Close;
Dm.SimpleDataSetProdutos.DataSet.CommandText:=comando;
Dm.DataSourceProduto.DataSet.Open;
Espero ter colaborado.
Gostei + 0
12/04/2010
Ewerton Batista
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
13/04/2010
Wilson Junior
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
13/04/2010
Ewerton Batista
Obrigado!
Gostei + 0
13/04/2010
Wilson Junior
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
14/04/2010
Ewerton Batista
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
15/04/2010
Wilson Junior
Comando := 'SELECT * FROM PRODUTO ';
Gostei + 0
15/04/2010
Ewerton Batista
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
15/04/2010
Wilson Junior
Espero ter colaborado.
Gostei + 0
16/04/2010
Wilson Junior
Se sim, coloque como concluído o post, caso contrário informe o erro que está acontecendo.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)