Fórum Problema com atualização de registro #231180
10/05/2004
0
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
Curtir tópico
+ 0Posts
10/05/2004
G1b4
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...
Gostei + 0
10/05/2004
Macario
Não trabalho com FB, mas creio que deva ser assim
[color=green:beaf77f0da]
voce estava fazendo [b:beaf77f0da]ApplyUpdates[/b:beaf77f0da] antes de concluir a transação.
espero ter ajudado.
Gostei + 0
10/05/2004
G1b4
Gostei + 0
10/05/2004
Leandro_si
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]
Gostei + 0
11/05/2004
G1b4
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.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)