Inserir dados em tabela atraves do DBGrid
caros colegas, tenho um DBGrid onde eu edito as informaçoes de uma tabela ´detalhe´. o fato é que existe um campo (not null) nessa tabela que é o id da tabela mestre, denominado (idAmostra). no DBGrid eu deixo ele como (visible := false), pois o usuário nao deverá ve-lo.
o id da tabela mestre eu armazeno numa variavel global chamada idAmostra
eu gostaria que quando o usuário estivesse inserindo um novo dado nessa tabela detalhe por meio do DBGrid, que automaticamente fosse atribuido a variavel idAmostra no campo idAmostra da tabela...
estou usando o delphi 2007 + dbExpress + firebird 2.0
alguem saberia como fazer isso?
abraços a todos!
o id da tabela mestre eu armazeno numa variavel global chamada idAmostra
eu gostaria que quando o usuário estivesse inserindo um novo dado nessa tabela detalhe por meio do DBGrid, que automaticamente fosse atribuido a variavel idAmostra no campo idAmostra da tabela...
estou usando o delphi 2007 + dbExpress + firebird 2.0
alguem saberia como fazer isso?
abraços a todos!
Mahdak
Curtidas 0
Respostas
Mahdak
04/04/2008
bom em alguns minutos eu consegui escrevendo o seguinte codigo no evento ColEnter do DBGrid:
nao sei se esse é o melhor procedimento a ser usado, por isso se alguem tiver alguma sugestão, por favor poste aqui.
obrigado a todos!
if DM.cdsAmostras01.State = dsInsert then begin DM.cdsAmostras01ID_AMOSTRA.AsInteger := StrToInt(idAmostra); end;
nao sei se esse é o melhor procedimento a ser usado, por isso se alguem tiver alguma sugestão, por favor poste aqui.
obrigado a todos!
GOSTEI 0
Catunda
04/04/2008
Basta que vc atribua o valor no evento OnNewRecord do ClientDataSet.
Lá não precisa testar se está em modo de inclusão. Apenas coloque a linha abaixo dentro do evento.
DM.cdsAmostras01ID_AMOSTRA.AsInteger := StrToInt(idAmostra);
Da maneira que está no colenter do dbgrid, ele vai atribuir o valor cada vez que vc mudar de coluna durante a inclusão do registro.
Lá não precisa testar se está em modo de inclusão. Apenas coloque a linha abaixo dentro do evento.
DM.cdsAmostras01ID_AMOSTRA.AsInteger := StrToInt(idAmostra);
Da maneira que está no colenter do dbgrid, ele vai atribuir o valor cada vez que vc mudar de coluna durante a inclusão do registro.
GOSTEI 0
Mahdak
04/04/2008
certo, funcionou perfeitamente, porém nesse mesmo ClientDataSet eu tenho tambem um campo do tipo Lookup, no qual no dbGrid aparece como um ComboBox que recupera um determinado campo (campo descriçao) de uma tabela. eu tambem necessitaria recuperar o valor de um determinado campo (campo limite) dessa tabela ligada ao Lookup.
se eu fizer isso no evento OnNewRecord do ClientDataSet, o valor que foi inserido no ultimo registro, se repete no proximo. eu precisaria que ao escolher o registro no combobox do dbgrid, seja inserido no mesmo o valor recuperado da tabela relacionada ao lookup. nao sei qual o evento mais apropriado para fazer isso...
atualmente fasso assim:
obrigado pela atençao!
um forte abraço!
se eu fizer isso no evento OnNewRecord do ClientDataSet, o valor que foi inserido no ultimo registro, se repete no proximo. eu precisaria que ao escolher o registro no combobox do dbgrid, seja inserido no mesmo o valor recuperado da tabela relacionada ao lookup. nao sei qual o evento mais apropriado para fazer isso...
atualmente fasso assim:
procedure TDM.cdsClassf02NewRecord(DataSet: TDataSet); begin cdsClassf02ID_CLASSF01.AsInteger := StrToInt(frmCadClassificacao.idClassificacao); // insere o ID cdsClassf02LIMITE.AsString := DM.cdsRAnF_LIMITE_MAXIMO.AsString; //aqui os valores se repetem quando insiro um novo registro end; end;
obrigado pela atençao!
um forte abraço!
GOSTEI 0