Delphi 2009 x dbExpress x SQL Server 2005 -erro ApplyUpdates

Delphi

19/06/2009

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:


Polyannawenze

Polyannawenze

Curtidas 0

Respostas

Uasan

Uasan

19/06/2009

Boa Tarde,

Posso estar enganado mas tente.

CDSPacientes.ApplyUpdates(-1);


[]´s


GOSTEI 0
Polyannawenze

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:


GOSTEI 0
Emerson Nascimento

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.


GOSTEI 0
Polyannawenze

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


GOSTEI 0
Polyannawenze

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


GOSTEI 0
Uasan

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


GOSTEI 0
Emerson Nascimento

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
POSTAR