Ajuda DBGrid - Delphi

Delphi

Banco de Dados

31/01/2019

Eu tenho um Dbgrid com 6 colunas e várias linhas que está ligado a um Data Source. Para realizar uma pesquisa no meu BD (SQL Server) preciso que ao clicar em qualquer linha da minha DbGrid sempre pegue o valor que está na minha primeira coluna [0].

Minha primeira coluna é COD_CLI (Integer)
Segunda coluna Nome_CLI
Terceira RG_CLI, etc.

Como deveria ser a procedure?
P.S Comecei a faculdade recentemente e não conheço tanto assim sobre linguagens, além disso não estou familiarizada com Delphi.
Leid

Leid

Curtidas 0

Melhor post

Hélio Devmedia

Hélio Devmedia

31/01/2019

Leid tudo bem?

Talvez a solução seja mais simples do que você imagina...

para pegar o valor da primeira coluna tem várias formas...

A forma mais direta é dentro do onclick do dbgrid você pegar e recuperar o valor direto do DataSet assim

var
i: integer;
begin
i:=dbgrid.datasource.dataset.FieldByName('COD_CLI').asInteger;
end;


isso porque quando você clica no dbgrid selecionando uma linha, automaticamente o seu DataSet seleciona o mesmo registro.
GOSTEI 1

Mais Respostas

Leid

Leid

31/01/2019


Oi Hélio, tudo bem sim e contigo?
O código ficou assim e coloquei no events da Dbgrid, mas ao clicar em uma coluna que não é onde tem o código me retornou um erro de conversão. Por exemplo, nome é String e está na segunda coluna, o que eu quero é quando clicar no nome (ou qlqr outro campo da minha DBGRID) pegue o Código desse cliente que está na primeira coluna.

Para conexão com meu banco estou usando um DataModule com os componentes TADOConnection, TADOCommand e uma TADOQuery;
No meu form Cliente coloquei um DataSource e uma TADOQuery;


procedure TFTabelaCliente.DBGridClienteCellClick(Column: TColumn);
var
i: integer;
begin
i:= DBGridCliente.DataSource.DataSet.FieldByName('COD_CLI').asInteger;
end;
GOSTEI 0
Hélio Devmedia

Hélio Devmedia

31/01/2019


Oi Hélio, tudo bem sim e contigo?
O código ficou assim e coloquei no events da Dbgrid, mas ao clicar em uma coluna que não é onde tem o código me retornou um erro de conversão. Por exemplo, nome é String e está na segunda coluna, o que eu quero é quando clicar no nome (ou qlqr outro campo da minha DBGRID) pegue o Código desse cliente que está na primeira coluna.

Para conexão com meu banco estou usando um DataModule com os componentes TADOConnection, TADOCommand e uma TADOQuery;
No meu form Cliente coloquei um DataSource e uma TADOQuery;


procedure TFTabelaCliente.DBGridClienteCellClick(Column: TColumn);
var
i: integer;
begin
i:= DBGridCliente.DataSource.DataSet.FieldByName('COD_CLI').asInteger;
end;


Leid, este código acima ele sempre pega o valor do Dataset e sempre procura pelo campo COD_CLI, mas se você estiver precisando de algo mais genérico para servir pra qualquer outra tabela que for colocada no dataset o correto é:

procedure TFTabelaCliente.DBGridClienteCellClick(Column: TColumn);
var
   i: integer;
begin
   i:= DBGrid1.DataSource.DataSet.FieldByName(DBGrid1.Columns[0].FieldName).asInteger;
end;


porque aí independente dos nomes do campo da tabela, ele sempre pega o nome do campo que está na primeira coluna...
GOSTEI 1
Leid

Leid

31/01/2019


Eu testei com os dois códigos mas continua dando o mesmo erro. Eu clico na linha e ao invés de pegar o valor da minha primeira coluna ele esta pegando o valor da linha que clico. Eu não quero converter o nome, eu quero pegar o código do meu cliente para editar, excluir, etc no meu banco de dados.

O Erro informado é esse: Conversion failed when converting the varchar value 'MARIA' to data type int.

Eu tenho um Tedit para colocar o nome, um botão pesquisar que vai mostrar na Dbgrid dados de todos meus clientes e além disso, meu form possui botões para editar, excluir, etc no meu BD.
GOSTEI 0
Leid

Leid

31/01/2019

Encontrei uma maneira: Nas propriedades da DBGRID vá em options e coloque TRUE em dgRowSelect.
Desse modo ele seleciona a linha inteira :)
GOSTEI 0
POSTAR