Código em um DBGrid?
Olá pessal, alguém poderia me dar uma dica de como pegar um valor em uma linha de um DBGrid?
Joule
Curtidas 0
Respostas
Steve_narancic
05/09/2005
Pegar o valor da linha selecionada de da primeira coluna, basta alterar de zero para outro numero para pegar o valor de outra coluna:
edit1.text := dbgDados.Fields[0].Value;
GOSTEI 0
Steve_narancic
05/09/2005
dbgDados = Dbgrid;[/code]
GOSTEI 0
Massuda
05/09/2005
...como pegar um valor em uma linha de um DBGrid?
Para pegar um valor em uma coluna do DBGrid para a linha atual, faça...var S: string; ... // se souber a posição da coluna no grid S := DBGrid1.Columns[NumeroDaColuna].Field.AsString; // se souber a posição do campo na tabela S := DBGrid1.Fields[NumeroDoCampo].AsString; // do campo/coluna selecionado no grid S := DBGrid1.SelectedField.AsString; ...
Para escolher uma determinada linha do grid, você pode dar um Locate no DataSet ligado ao DataSource do DBGrid.
A linha atual do DBGrid é sempre o registro atual do DataSet ligado ao DataSource do DBGrid.
GOSTEI 0
Martins
05/09/2005
Não sei se é o q vc precisa, mas eu fiz assim:
Como disse logo acima não sei se é o q vc precisa, mas tem as dicas do restante do pessoal aqui que manja pra carambas, vale conferir.
Um forte abraço!!!
Boa Sorte!!!
Retorna para dizer qual foi a solução, preciso adicionar novas dicas em meus doc.
// Se vc clicar na celula desejada ele transfere o conteúdo do campo // nome para o Edit procedure TForm1.DBGrid1CellClick(Column: TColumn); begin Edit1.Text := Md.cdsContas.FieldbyName(´Nome´).AsString; end; // Aqui ele transfere o conteúdo do campo nome para o Edit quando // vc utiliza as teclas de navegação procedure TForm1.DBGrid1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin Edit1.Text := Md.cdsContas.FieldbyName(´Nome´).AsString; end; // Ao entrar no grid ele já transfere o valor do campo nome atual para // o Edit. procedure TForm1.DBGrid1Enter(Sender: TObject); begin Edit1.Text := Md.cdsContas.FieldbyName(´Nome´).AsString; end;
Como disse logo acima não sei se é o q vc precisa, mas tem as dicas do restante do pessoal aqui que manja pra carambas, vale conferir.
Um forte abraço!!!
Boa Sorte!!!
Retorna para dizer qual foi a solução, preciso adicionar novas dicas em meus doc.
GOSTEI 0
Joule
05/09/2005
Obrigado pessoal resolveu o meu problema... mais apareceu outro, estou tentando alterar um valor mais agora apareceu esse erro: ´Unable to find record. No key specified´
a rotina é essa que estou usando:
var
Valor_DBGrid : Integer;
begin
Valor_DBGrid := DBGrid1.SelectedField.AsInteger;
frmDM.cdsMov.Close;
frmDM.cdsMov.Params.ParamByName(´CodMov´).AsInteger:= Valor_DBGrid;
frmDM.cdsMov.Open;
if not (frmDM.cdsMov.IsEmpty) then
begin
frmDM.cdsMov.Edit;
frmDM.cdsMovTEMPO_TOTAL.AsDateTime :=
frmDM.cdsMovHORAINICIO.AsDateTime-frmDM.cdsMovHORAFINAL.AsDateTime;
frmDM.cdsMov.Post;
try
frmDM.cdsMov.ApplyUpdates(0);
ShowMessage( ´Os dados foram gravados no Banco de Dados.´ );
except
ShowMessage( ´Erro ao tentar salvar informações no Banco de Dados.´ );
end;
frmDM.cdsVerMov.Close;
frmDM.cdsVerMov.Open;
end;
a rotina é essa que estou usando:
var
Valor_DBGrid : Integer;
begin
Valor_DBGrid := DBGrid1.SelectedField.AsInteger;
frmDM.cdsMov.Close;
frmDM.cdsMov.Params.ParamByName(´CodMov´).AsInteger:= Valor_DBGrid;
frmDM.cdsMov.Open;
if not (frmDM.cdsMov.IsEmpty) then
begin
frmDM.cdsMov.Edit;
frmDM.cdsMovTEMPO_TOTAL.AsDateTime :=
frmDM.cdsMovHORAINICIO.AsDateTime-frmDM.cdsMovHORAFINAL.AsDateTime;
frmDM.cdsMov.Post;
try
frmDM.cdsMov.ApplyUpdates(0);
ShowMessage( ´Os dados foram gravados no Banco de Dados.´ );
except
ShowMessage( ´Erro ao tentar salvar informações no Banco de Dados.´ );
end;
frmDM.cdsVerMov.Close;
frmDM.cdsVerMov.Open;
end;
GOSTEI 0
Massuda
05/09/2005
Eu não entendo muito de BD, não entendi seu código...
Valor_DBGrid := DBGrid1.SelectedField.AsInteger;
A propriedade TDBGrid.SelectedField vai retornar o campo selecionado pelo usuário; a não ser que você tenha apenas uma coluna/campo no DBGrid, essa coluna/campo pode ser qualquer uma das exibidas no DBGrid, não necessariamente um valor compatível com o CodMov da outra tabela.GOSTEI 0
Joule
05/09/2005
eu troquei por esse ´Valor_DBGrid := DBGrid1.Fields[0].AsInteger;´
mais ainda tá apareceu esse erro: ´Unable to find record. No key specified´
mais ainda tá apareceu esse erro: ´Unable to find record. No key specified´
GOSTEI 0
Martins
05/09/2005
Obrigado pessoal resolveu o meu problema... mais apareceu outro, estou tentando alterar um valor mais agora apareceu esse erro: ´Unable to find record. No key specified´
a rotina é essa que estou usando:
var
Valor_DBGrid : Integer;
begin
Valor_DBGrid := DBGrid1.SelectedField.AsInteger;
frmDM.cdsMov.Close;
frmDM.cdsMov.Params.ParamByName(´CodMov´).AsInteger:= Valor_DBGrid;
frmDM.cdsMov.Open;
if not (frmDM.cdsMov.IsEmpty) then
begin
frmDM.cdsMov.Edit;
frmDM.cdsMovTEMPO_TOTAL.AsDateTime :=
frmDM.cdsMovHORAINICIO.AsDateTime-frmDM.cdsMovHORAFINAL.AsDateTime;
frmDM.cdsMov.Post;
try
frmDM.cdsMov.ApplyUpdates(0);
ShowMessage( ´Os dados foram gravados no Banco de Dados.´ );
except
ShowMessage( ´Erro ao tentar salvar informações no Banco de Dados.´ );
end;
frmDM.cdsVerMov.Close;
frmDM.cdsVerMov.Open;
end;
Os dados em seu DbGrid são de outro CDS certo?
vc está selecionando o registro no DbGrid e depois retornando para outra tela, ou é tudo em uma tela só?
Post um comentário sobre seu objetivo com esse código.
GOSTEI 0
Joule
05/09/2005
Os dados do meu DBGrid são do mesmo CDS e estou usando somente uma tela
GOSTEI 0
Martins
05/09/2005
Tenta implementar essa linha em teu código e depois retorna para falar se funcionou OK!
Espero q possa lhe ajudar!!!
Boa sorte!!!
Martins
Edit2.Text := DbGrid1.SelectedField.DataSet.FieldByName(´Nome´).AsString;
Espero q possa lhe ajudar!!!
Boa sorte!!!
Martins
GOSTEI 0
Joule
05/09/2005
tô usando somente um cds em uma mesma tela
fiz assim:
frmDM.cdsMov.Close;
frmDM.cdsMov.Params.ParamByName(´CodMov´).AsInteger:= DbGrid1.SelectedField.DataSet.FieldByName(´CodMov´).AsInteger;
frmDM.cdsMov.Open;
if not (frmDM.cdsMov.IsEmpty) then
begin
frmDM.cdsMov.Edit;
frmDM.cdsMovTEMPO_TOTAL.AsDateTime :=
frmDM.cdsMovHORAINICIO.AsDateTime-frmDM.cdsMovHORAFINAL.AsDateTime;
frmDM.cdsMov.Post;
try
frmDM.cdsMov.ApplyUpdates(0);
ShowMessage( ´Os dados foram gravados no Banco de Dados.´ );
except
ShowMessage( ´Erro ao tentar salvar informações no Banco de Dados.´ );
end;
frmDM.cdsVerMov.Close;
frmDM.cdsVerMov.Open;
end;
mais ainda tá apareceu esse erro: ´Unable to find record. No key specified´
fiz assim:
frmDM.cdsMov.Close;
frmDM.cdsMov.Params.ParamByName(´CodMov´).AsInteger:= DbGrid1.SelectedField.DataSet.FieldByName(´CodMov´).AsInteger;
frmDM.cdsMov.Open;
if not (frmDM.cdsMov.IsEmpty) then
begin
frmDM.cdsMov.Edit;
frmDM.cdsMovTEMPO_TOTAL.AsDateTime :=
frmDM.cdsMovHORAINICIO.AsDateTime-frmDM.cdsMovHORAFINAL.AsDateTime;
frmDM.cdsMov.Post;
try
frmDM.cdsMov.ApplyUpdates(0);
ShowMessage( ´Os dados foram gravados no Banco de Dados.´ );
except
ShowMessage( ´Erro ao tentar salvar informações no Banco de Dados.´ );
end;
frmDM.cdsVerMov.Close;
frmDM.cdsVerMov.Open;
end;
mais ainda tá apareceu esse erro: ´Unable to find record. No key specified´
GOSTEI 0
Martins
05/09/2005
vc tem algum campo chave primária, ou tem algum campo q não está sendo chamado aí em seu procedimento, pq ele não está encontranto o registro, verifique sua tabela e os parametros de sua CDS.
GOSTEI 0
Joule
05/09/2005
Pessoal desculpe minha falta de atenção o nosso colega Martins falou sobre o uso do CDS e eu me toquei que para esse tipo de operação teria que usar 2 CDS... e deu certo... muito obrigado pela atenção de todos.
GOSTEI 0
Martins
05/09/2005
Pessoal desculpe minha falta de atenção o nosso colega Martins falou sobre o uso do CDS e eu me toquei que para esse tipo de operação teria que usar 2 CDS... e deu certo... muito obrigado pela atenção de todos.
Estamos aqui para ajudar, por isso sempre q precisar, é só postar.
Boa sorte!!!
Martins
GOSTEI 0