Uso de Transaction - Duvida

Firebird

08/01/2004

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

Curtidas 0

Respostas

Afarias

Afarias

08/01/2004

|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+


GOSTEI 0
Nilson Junior

Nilson Junior

08/01/2004

é necessário dar Post e Applyupdate

é ainda necessário dar Commit

USO DBEXPRESS


GOSTEI 0
Afarias

Afarias

08/01/2004

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+


GOSTEI 0
POSTAR