Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

rafaeloliveira83

Consulta pelo DBGrid - Delphi

Recommended Posts

Estou precisando criar uma consulta no DBGrid onde quando eu começo a digitar no Edit ele começa a ser mostrado no DBGrid automaticamente.

 

Procurei na internet, mas só achei para ADO com Banco de Dados Acess.

 

Preciso para um Banco de Dados do Firebird, onde utilizo:

 

SQLConnection

ClientDataSet

SQLDataSet

DataSource

 

Tentei utilizar um exemplo de busca com LIKE , mas deu erro alguém saberia me ajudar?????????

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, você pode fazer isso através das propriedades do DataSource...

 

Adicione o código a seguir no evento OnClick do dbGrid para identificar a coluna da pesquisa:

procedure TfrmCadModelo.GridExibicaoTitleClick(Column: TColumn);
Var
i:Integer;
begin
  Try
	for i:=0 to Column.Grid.FieldCount - 1 do
	  begin
		GridExibicao.Columns.Items[i].Title.Font.Color:=ClBlack;//Cor da Fonte
		GridExibicao.COLUMNS.ITEMS[I].TITLE.FONT.STYLE := [];//Cot da Fonte
		GridExibicao.Columns.Items[i].Title.Color:=clBtnFace;//Cor do Fundo do Titulo Normal
		Column.Title.Color :=clSilver;//Cor do Fundo do Titulo Selecionado
		COLUMN.TITLE.FONT.STYLE := [FSBOLD];
		Column.Title.Font.Color:=ClBlue;
		Column.Font.color:=clTeal;
		Col:= GridExibicao.Columns[Column.Index].Index;
		GridExibicao.Columns.Items[i].Font.color:=ClBlack;
		(DataSourceGrid.DataSet as TClientDataSet).IndexFieldNames := Column.FieldName;
	  end;
	  LblPesquisandoPor.Caption := GridExibicao.Columns.Items[col].Title.Caption;
	  EdtBusca.SetFocus;
	Except
		ShowMessage('Neste campo não poderá ser efetuada uma pesquisa.'+#13+
					'Nossa equipe de desenvolvimento está trabalhando'+#13+
					'para solucionar o problema com urgência');
	End;
end;

Em seguida, adicione o seguinte código ao evento OnChange do Edit onde irá digitar os parametros da busca:

procedure TfrmCadModelo.EdtBuscaChange(Sender: TObject);
begin
  Try
	DataSourceGrid.DataSet.Locate(GridExibicao.Columns.Items[col].FieldName,EdtBusca.Text,[LoPartialKey, loCaseInsensitive]);
	//Vai Listando o resultados onde as Letras iniciais são Iguais
  Except
	ShowMessage('Por favor, se você já tiver informações cadastradas'#13+
				'escolha um campo para pesquisa. (Clique sobre o titulo'#13+
				'do grid para selecionar o campo)');
  End;
end;

Declare ainda uma varivale Global (Dentro do Private do form) do tipo Col : Integer;

 

Pronto, faça o teste que estará funcionando...

 

Att

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, você pode fazer isso através das propriedades do DataSource...

 

Adicione o código a seguir no evento OnClick do dbGrid para identificar a coluna da pesquisa:

procedure TfrmCadModelo.GridExibicaoTitleClick(Column: TColumn);
Var
i:Integer;
begin
  Try
	for i:=0 to Column.Grid.FieldCount - 1 do
	  begin
		GridExibicao.Columns.Items[i].Title.Font.Color:=ClBlack;//Cor da Fonte
		GridExibicao.COLUMNS.ITEMS[I].TITLE.FONT.STYLE := [];//Cot da Fonte
		GridExibicao.Columns.Items[i].Title.Color:=clBtnFace;//Cor do Fundo do Titulo Normal
		Column.Title.Color :=clSilver;//Cor do Fundo do Titulo Selecionado
		COLUMN.TITLE.FONT.STYLE := [FSBOLD];
		Column.Title.Font.Color:=ClBlue;
		Column.Font.color:=clTeal;
		Col:= GridExibicao.Columns[Column.Index].Index;
		GridExibicao.Columns.Items[i].Font.color:=ClBlack;
		(DataSourceGrid.DataSet as TClientDataSet).IndexFieldNames := Column.FieldName;
	  end;
	  LblPesquisandoPor.Caption := GridExibicao.Columns.Items[col].Title.Caption;
	  EdtBusca.SetFocus;
	Except
		ShowMessage('Neste campo não poderá ser efetuada uma pesquisa.'+#13+
					'Nossa equipe de desenvolvimento está trabalhando'+#13+
					'para solucionar o problema com urgência');
	End;
end;

Em seguida, adicione o seguinte código ao evento OnChange do Edit onde irá digitar os parametros da busca:

procedure TfrmCadModelo.EdtBuscaChange(Sender: TObject);
begin
  Try
	DataSourceGrid.DataSet.Locate(GridExibicao.Columns.Items[col].FieldName,EdtBusca.Text,[LoPartialKey, loCaseInsensitive]);
	//Vai Listando o resultados onde as Letras iniciais são Iguais
  Except
	ShowMessage('Por favor, se você já tiver informações cadastradas'#13+
				'escolha um campo para pesquisa. (Clique sobre o titulo'#13+
				'do grid para selecionar o campo)');
  End;
end;

Declare ainda uma varivale Global (Dentro do Private do form) do tipo Col : Integer;

 

Pronto, faça o teste que estará funcionando...

 

Att

 

 

 

Ele está dando erro nessa linha:

DataSourceGrid.DataSet.Locate(GridExibicao.Columns.Items[col].FieldName,EdtBusca.Text,[LoPartialKey, loCaseInsensitive]);

Consegui fazer a conexão ele consulta, mas o LblPesquisandoPor não funciona nem os ShowMessage.

Por exemplo estou buscando de um DataModule, mas ao tentar apagar os dados que eu ja inseri no Edit vem o erro e trava.

Compartilhar este post


Link para o post
Compartilhar em outros sites

No edit você pode tirar a mensagem que está no Except..End... dai se apagar todo o ele cai no except e nao retorna nada.

 

Qual o erro da outra linha q você se referiu?

 

Em vez de DataSourceGrid pode usar DataModule.ClientDataSet....

 

você declarou o objeto Col do tipo integer?

 

Att

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu consegui buscar pelo código, mas se eu precisasse buscar por data onde usa / ? ou por nome?

 

O erro quando limpo é

 

EDatabaseError with message 'Expression expected but nothing found"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi

Coloque um combobox para o usuário escolher a opção de pesquisa,

mais ou menos assim:

 

procedure TFteste.Edit1Change(Sender: TObject);
begin

SQLDataSet1.Open;

if ComboBox1.Items[ComboBox1.ItemIndex]='Código' then
begin
SQLDataSet1.Locate('código',Edit1.Text,[]);
end
else if ComboBox1.Items[ComboBox1.ItemIndex]='Data' then
begin
SQLDataSet1.Locate('Data',Edit1.Text,[]);
end;

end;

end.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.