Chave Primária auto incrementada com chave estrangeira dentro de uma transação

MySQL

Delphi

17/03/2017

Estou com seguinte problema: Preciso gravar a chave primária da tabela pedido como chave estrangeira na tabela itens dentro de uma transação, o problema é que a chave primária é autoincrement e por isso só é gerada no momento da gravação, impedindo assim que eu posso inserir os itens já que não tenho a chave estrangeira. então como gravar a chave estrangeira se ela a chave primária só é gerada no momento da gravação? se eu fizer fora de uma transação da certo, mas isso precisa de fato ser realizado dentro de uma transação para que os itens só sejam realmente gravados se o pedido também for gravado.
O Código abaixo exemplifica melhor o que eu estou tentando dizer. Desde já agradeço.

try
Transaction := DataModule.SQLConnection.BeginTransaction(TDBXIsolations.ReadCommitted);

// ID - PK e é auto incrementado pelo banco MySQL
DataModule.cdsPedido.Close;
DataModule.cdsPedido.Open;
DataModule.cdsPedido.Insert;
DataModule.cdsDataPedido.AsDateTime := Date;
DataModule.ValorPedido.AsCurrency := Tot;
DataModule.cdsPedido.Post;
DataModule.cdsPedido.ApplyUpDates(0);

// ID - PK e é auto incrementado pelo banco MySQL
DataModule.cdsItens.Close;
DataModule.cdsItens.Open;
DataModule.cdsItens.Insert;
DataModule.cdsItensIDPedido.AsInteger := DataModule.cdsPedidoID.AsInteger; // IDPedido é a chave estrangeira na tabela de Intens
DataModule.cdsItens.AsString := Itens;
DataModule.cdsItens.Post;
DataModule.cdsItens..ApplyUpDates(0);

DataModule.SQLConnection.CommitFreeAndNil(Transaction);
Application.MessageBox('Regisgtro Salvo com Sucesso!','Informação', MB_OK+MB_ICONINFORMATION);
except
On E : Exception do
begin
dm.SQLConn.RollbackFreeAndNil(Transaction);
showmessage(E.Message);
end;
Edivania

Edivania

Curtidas 0

Respostas

Edivania

Edivania

17/03/2017

pessoal, desculpem por não identar o código, na realidade estava identado mas acabei apagando a Tag Código que fica responsável por manter a Identação
GOSTEI 0
POSTAR