Fórum Uso de Transaction - Duvida #41379

08/01/2004

0

Uso D7 + Db 1.5 + DbExpess

Uso esta combinação e estou muito satisfeito, mas passei a ter alguns problemas, principalmente quanto a cadastro

Nos cadastros uso compnentes DBEdit, Dbware, de varios tipos.

Mas na inclusões de cadastros nunca usei Tramsaction, sempre usei quando fazia inclusões sem componentes Dbware(Dbedit... etc), mas percebni que algumas vezes o cadastro não gravava embora sempre usei Applyupdate e post.

Então me remendaram a usar transaction tbm neste tipo de cadastro.

Uma pergunta,

Sempre use transactiond entro de um Try except, e entre eles uma instrução SQL.

Neste tipo de cadastro que é na verdade um formulario, que quando crio coloco a tabela em insert, como uso a TRansaction

na ora de colocar a tabela em Insert ?


Nilson


T+


Nilson Junior

Nilson Junior

Responder

Posts

08/01/2004

Afarias

|Mas na inclusões de cadastros nunca usei Tramsaction, sempre usei
|quando fazia inclusões sem componentes Dbware(Dbedit... etc), mas
|percebni que algumas vezes o cadastro não gravava embora sempre
|usei Applyupdate e post.

O ClientDataSet/DataSetProvider controlam as transações automaticamente (de forma implícita) -- isso funciona muito bem desde q vc nunca ´toque´ nestas transações -- e desde q seus Mestre-Detalhe sejam feitos com Nested DataSets.


|Então me remendaram a usar transaction tbm neste tipo de cadastro.

Não é necessário em geral... mas, depende do caso


|Sempre use transactiond entro de um Try except, e entre eles uma
|instrução SQL.

1- Abre a transação
2- Faz suas operações
3- Fecha a transação (com commit ou rollback)


|Neste tipo de cadastro que é na verdade um formulario, que quando crio
|coloco a tabela em insert, como uso a TRansaction
|na ora de colocar a tabela em Insert ?

Quando vc dá um Open no ClientDataSet -- uma transação é iniciada, o SELECT é executado, os registros são trazidos e a transação é fechada com um COMMIT.

Como vc passa a trabalhar com os registros em memória, não é necessário manter uma transação aberta.

A transação deve ser aberta (se vc pretende controlar explicitamente suas transações) antes do ApplyUpdates, e encerrada logo após -- existem outras formas, mas isso é o ´básico´.


T+


Responder

Gostei + 0

08/01/2004

Nilson Junior

é necessário dar Post e Applyupdate

é ainda necessário dar Commit

USO DBEXPRESS


Responder

Gostei + 0

08/01/2004

Afarias

Como disse... desde q vc não ´toque´ nas transações... o ClientDataSet/DataSetProvider controlam as transações automaticamente... sendo assim, apenas o ApplyUpdates é necessário.

Caso vc perceba q as alterações não foram gravadas, provavelmente é pq algum erro ocorreu durante a aplicação das atualizações.

A função ApplyUpdates retorna o número de erros ocorridos, então::

if CDS.ApplyUpdates(0) > 0 then
  ShowMessage(´algum erro ocorreu´);


vc pode tb usar o evento OnReconcileError do ClientDataSet para capturar os erros.


T+


Responder

Gostei + 0

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

Aceitar