Sem ApplyUpdates(), mas consegue gravar

Delphi

23/01/2004

É o seguinte: Utilizo delphi 7 / interbase 6.5 com TSqlDataSet, TDataSetProvider e TClientDataSet. Nas minhas querys, sempre boto o código abaixo no evento AfterPost e AfterDelete das tabelas:

Tabela.ApplyUpdates(-1);


Tudo bem, uma vez que o TClientDataSet trabalha com dados em memória e o comando ApplyUpdates salva as alterações no banco.

[color=red:5f570eb801]Entretanto[/color:5f570eb801], vejam o exemplo que descobri e que ele consegue salvar as alterações no banco [color=red:5f570eb801]sem que seja utilizado o método ApplyUpdates:[/color:5f570eb801]

Uses DBXPress; Evento OnClick De Um Botão Qualquer(Sender : Tobject); Var Transacao : TTransactionDesc; Begin Transacao.TransactionID := 1; Transacao.IsolationLevel := xilREPEATABLEREAD; SqlConnection.StartTransaction(Transacao); Try Tabela.Insert; Tabela.FieldByName(´teste´).Asstring := ´tudo ok´; Tabela.Post; SqlConnection.Commit(Transacao); Except SqlConnection.Rollback(Transacao); End; End;


A minha dúvida é: Será que o método ApplyUpdates realiza em background um commit ?


Rômulo Barros

Rômulo Barros

Curtidas 0

Respostas

Nebrio

Nebrio

23/01/2004

Estranho...Como atualizar algo no banco que ainda não existe ?

Vou fazer testes....

T+

Nébrio


GOSTEI 0
Nebrio

Nebrio

23/01/2004

Cara fiz uns teste aqui e não funcionou não viu !!!!

Este código não funcionou
Uses DBXPress; 
Evento OnClick De Um Botão Qualquer(Sender : Tobject); 
Var 
Transacao : TTransactionDesc; 
Begin 
Transacao.TransactionID := 1; 
Transacao.IsolationLevel := xilREPEATABLEREAD; 
SqlConnection.StartTransaction(Transacao); 
Try 
Tabela.Insert; 
Tabela.FieldByName(´teste´).Asstring := ´tudo ok´; 
Tabela.Post; 
SqlConnection.Commit(Transacao); 
Except 
SqlConnection.Rollback(Transacao); 
End; 
End; 


Mas este aqui funciou
Uses DBXPress; 
Evento OnClick De Um Botão Qualquer(Sender : Tobject); 
Var 
Transacao : TTransactionDesc; 
Begin 
Transacao.TransactionID := 1; 
Transacao.IsolationLevel := xilREPEATABLEREAD; 
SqlConnection.StartTransaction(Transacao); 
Try 
Tabela.Insert; 
Tabela.FieldByName(´teste´).Asstring := ´tudo ok´; 
Tabela.Post; 
Tabela.ApplayUpdates(0);
SqlConnection.Commit(Transacao); 
Except 
SqlConnection.Rollback(Transacao); 
End; 
End; 


O Primeiro código não dá erro e insere no ClientDataSet os dados, porém, quando é realizado o Commit ele não joga para banco, pois, na verdade eles ainda não existem, simplesmente estão armazenados no ClientDataSet...quando usei o ApplayUpdates() para tornar esses dados reais o Commit funcionou beleza.
Faça o teste usando o primeiro código, insira os dados e depois abra a base de dados e consulte, vc verá que o dado inserido não existe.

T+

Nébrio


GOSTEI 0
Rômulo Barros

Rômulo Barros

23/01/2004

Beleza... vou testar de novo ...... Devo ter me enganado !!!1 :oops:


GOSTEI 0
POSTAR