GARANTIR DESCONTO

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!


Roneto

Roneto

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;


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


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar