Problemas com Delphi e SQL Server ...
E ai galera tudo beleza??
Seguinte, estou tendo um problema que não consigo resolver.
Estou fazendo a migração de um sistema em Delphi 7 de Firebird para SQL Server 2005, porém, um procedimento que é simples não esta funcionando !!
Veja o que estou fazendo...
TD.GlobalID := 1;
TD.IsolationLevel := xilREADCOMMITTED;
sqlConexao.StartTransaction(TD);
Try
if cdsVenda.State in [dsInsert, dsEdit] then
cdsVenda.Post;
cdsVenda.ApplyUpdates(0);
sqlAuxiliar.Close;
sqlAuxiliar.SQL.Clear;
sqlAuxiliar.SQL.Add('SELECT @@IDENTITY AS ID FROM VENDA');
sqlAuxiliar.Open;
if cdsProdutoVenda.State in [dsInsert, dsEdit] then
cdsProdutoVenda.Post;
cdsProdutoVenda.First;
While not cdsProdutoVenda.EOF Do
begin
Try
cdsProdutoVenda.Edit;
cdsProdutoVendaCODIGO_VENDA.AsInteger := sqlAuxiliar.Fields[0].AsInteger;
cdsProdutoVenda.Post;
Finally
cdsProdutoVenda.Next;
End;
end;
cdsProdutoVenda.ApplyUpdates(0);
sqlConexao.Commit(TD);
Except
sqlConexao.Rollback(TD);
End;
Este procedimento faz inclusão de dados em duas tabelas ... e quando executo isso apenas uma fez funciona normal ... !!
Porém, quando executo este procedimento mais de uma vez (tanto faz se executá-lo em e executáveis diferentes) me retorna a seguinte mensagem de erro: "Não é possível criar uma nova conexão porque o modo usado é o de transação manual ou distribuída."
Utilizo o padrão de 3 camadas para executar o procedimento: TSQLConnection + TSQLQuery + TDataSetProvider + TClientDataSet e TDataSource.
O que pode ser???
Seguinte, estou tendo um problema que não consigo resolver.
Estou fazendo a migração de um sistema em Delphi 7 de Firebird para SQL Server 2005, porém, um procedimento que é simples não esta funcionando !!
Veja o que estou fazendo...
TD.GlobalID := 1;
TD.IsolationLevel := xilREADCOMMITTED;
sqlConexao.StartTransaction(TD);
Try
if cdsVenda.State in [dsInsert, dsEdit] then
cdsVenda.Post;
cdsVenda.ApplyUpdates(0);
sqlAuxiliar.Close;
sqlAuxiliar.SQL.Clear;
sqlAuxiliar.SQL.Add('SELECT @@IDENTITY AS ID FROM VENDA');
sqlAuxiliar.Open;
if cdsProdutoVenda.State in [dsInsert, dsEdit] then
cdsProdutoVenda.Post;
cdsProdutoVenda.First;
While not cdsProdutoVenda.EOF Do
begin
Try
cdsProdutoVenda.Edit;
cdsProdutoVendaCODIGO_VENDA.AsInteger := sqlAuxiliar.Fields[0].AsInteger;
cdsProdutoVenda.Post;
Finally
cdsProdutoVenda.Next;
End;
end;
cdsProdutoVenda.ApplyUpdates(0);
sqlConexao.Commit(TD);
Except
sqlConexao.Rollback(TD);
End;
Este procedimento faz inclusão de dados em duas tabelas ... e quando executo isso apenas uma fez funciona normal ... !!
Porém, quando executo este procedimento mais de uma vez (tanto faz se executá-lo em e executáveis diferentes) me retorna a seguinte mensagem de erro: "Não é possível criar uma nova conexão porque o modo usado é o de transação manual ou distribuída."
Utilizo o padrão de 3 camadas para executar o procedimento: TSQLConnection + TSQLQuery + TDataSetProvider + TClientDataSet e TDataSource.
O que pode ser???
Carlos Souza
Curtidas 0
Respostas
Leonardo Xavier
23/11/2010
você ja tentou executar um processo de cada vez?
GOSTEI 0
Carlos Souza
23/11/2010
Não tem como fazer separado uma vez que são tabelas dependentes umas das outras ...
Eu preciso poder dar um Rollback caso haja algum problema no meio do procedimento.
Eu preciso poder dar um Rollback caso haja algum problema no meio do procedimento.
GOSTEI 0
Wilson Junior
23/11/2010
Altere "GlobalID" por "TransactionID".
Espero ter colaborado.
Espero ter colaborado.
GOSTEI 0