Fórum Mais dúvidas com Insert usando MestreDetalhe (DatasetField) #397508
18/03/2011
0
Desde já agradeço as colaborações!
Samuel Silva
Curtir tópico
+ 0Posts
18/03/2011
André Silveira
Pois segundo a Embarcadero, deve-se usar o mínimo de recursos do banco de dados, por isso você deverá implementar uma forma de retornar o código, pode ser por uma procedure no banco que incremente o código e atualize um tabela de códigos por exemplo.
Atenciosamente,
André Luis da Silveira.
Gostei + 0
18/03/2011
Marco Salles
SourceDS: TDataSet; DeltaDS: TCustomClientDataSet; UpdateKind: TUpdateKind;
var Applied: Boolean);
{$J+}
const
Id: Integer = -1;
{$J-}
begin if (UpdateKind = ukInsert) then
begin
if (SourceDS = sqlfornecedor) then
begin
if (DeltaDS.FieldByName('CHAVE_FORNECEDOR').Value < 0) then
begin
Id := GenID('FORNECEDOR');
DeltaDS.FieldByName('CHAVE_FORNECEDOR').NewValue := Id;
end;
end
else
if (SourceDS = sqlcontato) then
if (DeltaDS.FieldByName('CHAVE_CONTATO').Value < 0) then
begin
if DeltaDS.FieldByName('CHAVE_FORNECEDOR').Value < 0 then
DeltaDS.FieldByName('CHAVE_FORNECEDOR').NewValue := Id;
DeltaDS.FieldByName('CHAVE_CONTATO').NewValue := GenID('CONTATO');
end;
end;
end; Tirado do Link https://www.devmedia.com.br/forum/delphi/395811-Master-Detail-com-incremento-negativo.html
Gostei + 0
18/03/2011
Samuel Silva
Os valores corretos da chave serão atulizados geralmente em uma consulta e é utilizado o UpdateRecord do TDataSetProvider
Um exemplo disso é este codigo
procedure TDm_Dados.dtsfornecedorBeforeUpdateRecord(Sender: TObject;
SourceDS: TDataSet; DeltaDS: TCustomClientDataSet; UpdateKind: TUpdateKind;
var Applied: Boolean);
{$J+}
const
Id: Integer = -1;
{$J-}
begin
if (UpdateKind = ukInsert) then
begin
if (SourceDS = sqlfornecedor) then
begin
if (DeltaDS.FieldByName('CHAVE_FORNECEDOR').Value < 0) then
begin
Id := GenID('FORNECEDOR');
DeltaDS.FieldByName('CHAVE_FORNECEDOR').NewValue := Id;
end;
end
else
if (SourceDS = sqlcontato) then
if (DeltaDS.FieldByName('CHAVE_CONTATO').Value < 0) then
begin
if DeltaDS.FieldByName('CHAVE_FORNECEDOR').Value < 0 then
DeltaDS.FieldByName('CHAVE_FORNECEDOR').NewValue := Id;
DeltaDS.FieldByName('CHAVE_CONTATO').NewValue := GenID('CONTATO');
end;
end;
end;
Tirado do Link
https://www.devmedia.com.br/forum/delphi/395811-Master-Detail-com-incremento-negativo.html
Valeu...
Gostei + 0
18/03/2011
Samuel Silva
Pois segundo a Embarcadero, deve-se usar o mínimo de recursos do banco de dados, por isso você deverá implementar uma forma de retornar o código, pode ser por uma procedure no banco que incremente o código e atualize um tabela de códigos por exemplo.
Atenciosamente,
André Luis da Silveira.
Valeu....
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)