Inserir dados em tabela atraves do DBGrid

Delphi

04/04/2008

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!


Mahdak

Mahdak

Curtidas 0

Respostas

Mahdak

Mahdak

04/04/2008

bom em alguns minutos eu consegui escrevendo o seguinte codigo no evento ColEnter do DBGrid:

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

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.


GOSTEI 0
Mahdak

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:

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
POSTAR