Fórum Problema com atualização de registro #231180

10/05/2004

0

Uso DbExpress c/ clientdataset e FB 1.5.
Tenho um form com dois panels, um de cadastro e outro de consulta.
Uso 2 datasources, um p/ cadastro e outro p/ consulta.
Acontece q qdo vou atualizar pelo dbgrid da consulta ele não atualiza a tabela.
Olhem só:
var
tr :TTransactionDesc;
begin
inherited;
tr.TransactionID:=1;
tr.IsolationLevel:=xilReadCommitted;
SQLConnection1.StartTransaction(tr);
if not(DataSource1.State in [dsEdit]) then
ClientDataSet1.Edit;
ClientDataSet1.Post;
ClientDataSet1ApplyUpdates(-1);
SQLConnection1.Commit(tr);
end;
end;

Alguém pode me ajudar???
Desde já meus agradecimentos.


G1b4

G1b4

Responder

Posts

10/05/2004

G1b4

Ah, esqueci de um detalhe...
Qdo executo refresh no dataset ele retorna essa mensagem:
´ClientDataSet: Must apply updates before refreshing data.´
Mas a dúvida ocorre pois como mencionado acima eu até comito a transação.
Difícil explicar o que ocorre...


Responder

Gostei + 0

10/05/2004

Macario

Ola programador, boa tarde.

Não trabalho com FB, mas creio que deva ser assim


[color=green:beaf77f0da]
var tr :TTransactionDesc; begin inherited; tr.TransactionID:=1; tr.IsolationLevel:=xilReadCommitted; SQLConnection1.StartTransaction(tr); if not(DataSource1.State in [dsEdit]) then ClientDataSet1.Edit; ClientDataSet1.Post; SQLConnection1.Commit(tr); [color=red]ClientDataSet1ApplyUpdates(-1); [/color:beaf77f0da] end; end;
[/color]


voce estava fazendo [b:beaf77f0da]ApplyUpdates[/b:beaf77f0da] antes de concluir a transação.


espero ter ajudado.


Responder

Gostei + 0

10/05/2004

G1b4

Vlw Macario, mas ainda não funciona


Responder

Gostei + 0

10/05/2004

Leandro_si

Tente algo desse tipo...

  try
   if not DM.SQLConnection1.InTransaction then
   begin
    TD.TransactionID := 1; {de preferencia incrementar o ID da transação}
    TD.IsolationLevel := xilREADCOMMITTED;
    DM.SQLConnection1.StartTransaction(TD);
    try
     (DS.DataSet as TClientDataSet).ApplyUpdates(-1);
     DM.SQLConnection1.Commit(TD);
     (DS.DataSet as TClientDataSet).Refresh;
     MessageBox(0,´Seus dados foram salvos com sucesso.´,´Confirmação !´,MB_OK+MB_ICONINFORMATION);
    except
     (DS.DataSet as TClientDataSet).CancelUpdates;
     DM.SQLConnection1.Rollback(TD);
     (DS.DataSet as TClientDataSet).Refresh;
     MessageBox(0,´Erro ao gravar no banco de dados!´,´Erro crítico!´,MB_OK+MB_ICONERROR);
    end;
   end
   else
    MessageBox(0,´Erro ao gravar no banco de dados!´,´Erro crítico!´,MB_OK+MB_ICONERROR);
  except on E: Exception do
   begin
    ShowMessage(´Erro ao gravar no banco de dados! ´ + #13 + E.Message);
   (DS.DataSet as TClientDataSet).Refresh;    
    Abort;
   end;
  end;

[color=red:dca70fea54]
Legenda:
DS -DataSource
DM - DataModule[/color:dca70fea54]

[b:dca70fea54]Leandro Silveira[/b:dca70fea54]


Responder

Gostei + 0

11/05/2004

G1b4

Vlw leandro_si...
Isto me ajudou muito, agora sei onde está o erro...
´SQLConnection1: There is no active connection.´
Mas como isso ocorre se como vc me mostrou no exemplo :
Código:

....
try
if not DM.SQLConnection1.InTransaction then
begin
TD.TransactionID := 1; {de preferencia incrementar o ID da transação}
TD.IsolationLevel := xilREADCOMMITTED;
DM.SQLConnection1.StartTransaction(TD);
try
(DS.DataSet as TClientDataSet).ApplyUpdates(-1);
DM.SQLConnection1.Commit(TD);
(DS.DataSet as TClientDataSet).Refresh;
MessageBox(0,´Seus dados foram salvos com sucesso.´,´Confirmação !´,MB_OK+MB_ICONINFORMATION);
except
(DS.DataSet as TClientDataSet).CancelUpdates;
DM.SQLConnection1.Rollback(TD);
(DS.DataSet as TClientDataSet).Refresh;
MessageBox(0,´Erro ao gravar no banco de dados!´,´Erro crítico!´,MB_OK+MB_ICONERROR);
end;
end
else
MessageBox(0,´Erro ao gravar no banco de dados!´,´Erro crítico!´,MB_OK+MB_ICONERROR);
except on E: Exception do
begin
ShowMessage(´Erro ao gravar no banco de dados! ´ + #13 + E.Message);
(DS.DataSet as TClientDataSet).Refresh;
Abort;
end;
end;

Mas por que ele não inicia a transação no SQLConnection??? Pois se a transação não for iniciada, ele tinha q iniciar (conforme o fonte de leandro_si). Aew q está o problema.


Responder

Gostei + 0

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

Aceitar