Delphi 2009 x dbExpress x SQL Server 2005 -erro ApplyUpdates
Olá..
Gente, estou desenvolvendo um sistema, usando os componentes abaixo (pela primeira vez), mas com problema no ApplyUpdates..
Uso o SQLDataSet+DataSetProvider+ClientDataSet+DataSource...
SQLDataSet:
-CommandType=ctQuery;
-CommandType=´SELECT * FROM PACIENTES ORDER BY NOME´;
Bom, quando eu vou salvar alguma inserção/alteração de registro:
SQLDataSet.Insert;
SQLDataSet.FieldByName(´teste´).asString:=´lalalalala´;
SQLDataSet.Post;
SQLDataSet.ApplyUpdates(0); <<----- dá o erro aqi
Diz ´Não é possível criar uma nova conexão porque o modo usado é o de transação manual ou distribuída´.
Então já mandaram eu colocar um SQLConnection.CloseDataSet em BeforeApplyUpdates do SQLDataSet. Aí ele salva, mas ele fechou o dataset, dando a mensagem de que ´Não pode executar esta operação porque o DataSet está fechado´, porque o sistema vai fazer outra coisa depois que salva.
Aí eu li que era pra eu colocar um tal de Transaction, iniciar a transação antes de salvar a alteração/inserção, e depois dá o commit:
if SQLConnection.DSPacientes.State in [dsInsert,dsEdit] then
begin
TD.TransactionID := 1;
TD.IsolationLevel:=xilReadCommitted;
SQLConnection.StartTransaction(TD);
.
. (uso DBEdits para serem preenchidos)
.
try
CDSPacientes.Post;
CDSPacientes.ApplyUpdates(0); <<---- dá erro aqui tb
SQLConnection.Commit(TD);
except
SQLConection.Rollback(TD);
end;
Aí dá a mesma msg de erro que deu no ApplyUpdates:
´Não é possível criar uma nova conexão porque o modo usado é o de transação manual ou distribuída´.
E se eu tirar o ApplyUpdates, ele não vai salvar nada no banco..
E agora, quem poderá me ajudar??? :cry:
Gente, estou desenvolvendo um sistema, usando os componentes abaixo (pela primeira vez), mas com problema no ApplyUpdates..
Uso o SQLDataSet+DataSetProvider+ClientDataSet+DataSource...
SQLDataSet:
-CommandType=ctQuery;
-CommandType=´SELECT * FROM PACIENTES ORDER BY NOME´;
Bom, quando eu vou salvar alguma inserção/alteração de registro:
SQLDataSet.Insert;
SQLDataSet.FieldByName(´teste´).asString:=´lalalalala´;
SQLDataSet.Post;
SQLDataSet.ApplyUpdates(0); <<----- dá o erro aqi
Diz ´Não é possível criar uma nova conexão porque o modo usado é o de transação manual ou distribuída´.
Então já mandaram eu colocar um SQLConnection.CloseDataSet em BeforeApplyUpdates do SQLDataSet. Aí ele salva, mas ele fechou o dataset, dando a mensagem de que ´Não pode executar esta operação porque o DataSet está fechado´, porque o sistema vai fazer outra coisa depois que salva.
Aí eu li que era pra eu colocar um tal de Transaction, iniciar a transação antes de salvar a alteração/inserção, e depois dá o commit:
if SQLConnection.DSPacientes.State in [dsInsert,dsEdit] then
begin
TD.TransactionID := 1;
TD.IsolationLevel:=xilReadCommitted;
SQLConnection.StartTransaction(TD);
.
. (uso DBEdits para serem preenchidos)
.
try
CDSPacientes.Post;
CDSPacientes.ApplyUpdates(0); <<---- dá erro aqui tb
SQLConnection.Commit(TD);
except
SQLConection.Rollback(TD);
end;
Aí dá a mesma msg de erro que deu no ApplyUpdates:
´Não é possível criar uma nova conexão porque o modo usado é o de transação manual ou distribuída´.
E se eu tirar o ApplyUpdates, ele não vai salvar nada no banco..
E agora, quem poderá me ajudar??? :cry:
Polyannawenze
Curtidas 0
Respostas
Uasan
19/06/2009
Boa Tarde,
Posso estar enganado mas tente.
CDSPacientes.ApplyUpdates(-1);
[]´s
Posso estar enganado mas tente.
CDSPacientes.ApplyUpdates(-1);
[]´s
GOSTEI 0
Polyannawenze
19/06/2009
Oi UaSan, coloquei -1, mas mesmo assim mostra a mensagem
´Não é possível criar uma nova conexão porque o modo usado é o de transação manual ou distribuída´.
:cry:
´Não é possível criar uma nova conexão porque o modo usado é o de transação manual ou distribuída´.
:cry:
GOSTEI 0
Emerson Nascimento
19/06/2009
algum dataset pode estar aberto no momento da gravação dos dados. certifique-se que seu sqldataset esteja fechado. deixe apenas o clientdataset aberto.
quando você trabalha com dbExpress, na maioria dos casos não se deve manipular diretamente os SQLdatasets, somente os CLIENTdatasets.
quando você trabalha com dbExpress, na maioria dos casos não se deve manipular diretamente os SQLdatasets, somente os CLIENTdatasets.
GOSTEI 0
Polyannawenze
19/06/2009
Olá, antes de dar o post e applyupdates, eu tenho que fechar o SQLDataSet?? Bom, isso eu não sabia.. :oops:
Vou tentar aqui..
Obrigada.. :P
Vou tentar aqui..
Obrigada.. :P
GOSTEI 0
Polyannawenze
19/06/2009
caraca!! êêêê!! \o/ :D
Era isso mesmo.. Eu coloquei no evento BeforeApplyUpdates de cada ClientDataSet: SQLDataSet.Close;
Valeu Emerson e UaSan.. :wink:
Eu já estava há tempos com esse erro.. :-)
Brigadão mesmo.. Qualquer erro, vou atentar vcs d novo.. :P
Era isso mesmo.. Eu coloquei no evento BeforeApplyUpdates de cada ClientDataSet: SQLDataSet.Close;
Valeu Emerson e UaSan.. :wink:
Eu já estava há tempos com esse erro.. :-)
Brigadão mesmo.. Qualquer erro, vou atentar vcs d novo.. :P
GOSTEI 0
Uasan
19/06/2009
Bom Dia,
Nossa essa eu já não sabia, vlw pela dica sempre dei post applyupdates com sqldataset aberto =/. Mas engraçado que nunca apresento erro.
Isso é alguma alteração no delphi 2009?
[]´s
Nossa essa eu já não sabia, vlw pela dica sempre dei post applyupdates com sqldataset aberto =/. Mas engraçado que nunca apresento erro.
Isso é alguma alteração no delphi 2009?
[]´s
GOSTEI 0
Emerson Nascimento
19/06/2009
não é só no Delphi 2009, não. eu trabalhava com Delphi 7 e tive o mesmo problema. creio ser um problema no driver dbExpress, pois compramos o driver da CoreLab e o problema deixou de acontecer.
GOSTEI 0