Fórum AutoIncremento no DBExpress. Será q vou voltar pro ADO/IBX?? #346876
02/10/2007
0
Tenho um sistema com o Banco de Dados SQL-SERVER onde a maioria de minhas tabelas estão com a Chave-Primária - Autoincremento (IDENTDY) e resolvi remover o acesso via ADO e implantar a Tecnologia DBExpress no mesmo, com o Delphi 2007.
Quando vou trabalhar com operações do tipo Mestre-Detalhe, tipo o famoso PEDIDO(mestre) e ITENS_DO_PEDIDO(detalhe) preciso gravar o ID da Tab.Pedido na Tab.Itens_Pedido (faço isso na ´unha´, sem usar MasterSource/MasterField)
Quando executo o POST no ClientDataSet-Mestre eu não consigo obter no novo valor do campo PK para que em seguida eu tenha condições de gravar os registros com o valor do ID_Pedidos no ClientDataSet-Detalhes.
E toda essa operação tem que estar em uma única transação.
Mesmo executando um ApplyUpdates no ClientDataSet.Mestre o valor do campo Prim.Key não é atualizado.
O que fazer para que o ClientDataSet-Mestre me retorne o valor do campo AutoIncremento para poder gravar no ClientDataSet-Detalhe, em uma única transação???
Sou inciante em DBExpress e ´travei´ aqui.
Agradeço a Ajuda!
Quando vou trabalhar com operações do tipo Mestre-Detalhe, tipo o famoso PEDIDO(mestre) e ITENS_DO_PEDIDO(detalhe) preciso gravar o ID da Tab.Pedido na Tab.Itens_Pedido (faço isso na ´unha´, sem usar MasterSource/MasterField)
Quando executo o POST no ClientDataSet-Mestre eu não consigo obter no novo valor do campo PK para que em seguida eu tenha condições de gravar os registros com o valor do ID_Pedidos no ClientDataSet-Detalhes.
E toda essa operação tem que estar em uma única transação.
Mesmo executando um ApplyUpdates no ClientDataSet.Mestre o valor do campo Prim.Key não é atualizado.
O que fazer para que o ClientDataSet-Mestre me retorne o valor do campo AutoIncremento para poder gravar no ClientDataSet-Detalhe, em uma única transação???
Sou inciante em DBExpress e ´travei´ aqui.
Agradeço a Ajuda!
Roneto
Curtir tópico
+ 0
Responder
Posts
02/10/2007
Comodelphi
Cara na minha opinião MS-SQL Server com ADO seria a melhor escolha. Agora respondendo a sua dúvida no DataSetProvider vc tem a propriedade Options, onde existe a opção poPropogateChanges, deve ser True. Isso faz com que os dados alterados no Provider se reflitam no ClientDataSet, só não tenho certeza se ira funcionar qdo vc usa o ApplyUpdates pura do Midas, nas minhas aplicações eu controlo os inserts, updates e deletes, no Evento BeforeUpdateRecord do Provider, dai eu faço as alterações que quero no Delta e uso no cliente atualizando os ClientDataSet Detalhes.
procedure BeforeUpdateRecord(Sender: TObject;
SourceDS: TDataSet; DeltaDS: TCustomClientDataSet;
UpdateKind: TUpdateKind; var Applied: Boolean);
begin
ExcecSQL(<SEU SQL>);
// Depois do applyupdate o clientDataSet tera o valor atualizado conforme instrucao abaixo;
Delta.FieldByName(<cpo chave>).Value := <valor identity>;
Applied := True;
end;
procedure BeforeUpdateRecord(Sender: TObject;
SourceDS: TDataSet; DeltaDS: TCustomClientDataSet;
UpdateKind: TUpdateKind; var Applied: Boolean);
begin
ExcecSQL(<SEU SQL>);
// Depois do applyupdate o clientDataSet tera o valor atualizado conforme instrucao abaixo;
Delta.FieldByName(<cpo chave>).Value := <valor identity>;
Applied := True;
end;
Responder
Gostei + 0
02/10/2007
Walfrido
você já procurou aqui no forum sobre ´auto incremento´, tem muitos assuntos e um deles vai lhe cair como uma luva...
Procure antes de postar, sempre encontramos a maior partes de nossas dúvidas no forum já solucionadas. Mas caso ainda precise olhe o artigo do Bruno Lichot na edição 68 da ClubeDelphi é muito útil.
http://www.clubedelphi.net/Novo/Revista/ed68-lichot-chaves.zip
Procure antes de postar, sempre encontramos a maior partes de nossas dúvidas no forum já solucionadas. Mas caso ainda precise olhe o artigo do Bruno Lichot na edição 68 da ClubeDelphi é muito útil.
http://www.clubedelphi.net/Novo/Revista/ed68-lichot-chaves.zip
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)