Selecao DevMedia QUERO SER PRIME

Fórum Delphi 2009 x dbExpress x SQL Server 2005 -erro ApplyUpdates #371432

19/06/2009

0

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

Responder

Posts

19/06/2009

Uasan

Boa Tarde,

Posso estar enganado mas tente.

CDSPacientes.ApplyUpdates(-1);


[]´s


Responder

Gostei + 0

19/06/2009

Polyannawenze

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:


Responder

Gostei + 0

22/06/2009

Emerson Nascimento

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.


Responder

Gostei + 0

22/06/2009

Polyannawenze

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


Responder

Gostei + 0

22/06/2009

Polyannawenze

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


Responder

Gostei + 0

22/06/2009

Uasan

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


Responder

Gostei + 0

22/06/2009

Emerson Nascimento

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.


Responder

Gostei + 0

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

Aceitar