各位大哥,小弟初涉sybase不久,遇到一个难以解决的问题,还望各位赐教问题是这样的:服务器:共创Linux+Sybase12.5
客户端:Windows XP
通过ODBC连接服务器客户端用Delphi7开发,用TADOConnection通过ODBC连接的,
增加、删除和修改是用TADOConnection的Execute()来执行的
查询是用TADOQuery来进行的,TADOQuery是通过TADOConnection连接的,在事务开启之后,先用TADOQuery查询,查询后,将结果放在一个结构中,然后进行修改,
在执行修改语句时,弹出的错误信息如下:
“在事务中,不能存在多个使用此游标类型的记录集。请更改游标类型、提交事务,或关闭其中某个记录集”程序在MS SQL Server 2000服务器下没有问题,在Sybase下出现这个问题,个人认为应该不是程序的问题,求教各位,怎么样才能解决这个问题啊??急急~~谢谢各位~~~
客户端:Windows XP
通过ODBC连接服务器客户端用Delphi7开发,用TADOConnection通过ODBC连接的,
增加、删除和修改是用TADOConnection的Execute()来执行的
查询是用TADOQuery来进行的,TADOQuery是通过TADOConnection连接的,在事务开启之后,先用TADOQuery查询,查询后,将结果放在一个结构中,然后进行修改,
在执行修改语句时,弹出的错误信息如下:
“在事务中,不能存在多个使用此游标类型的记录集。请更改游标类型、提交事务,或关闭其中某个记录集”程序在MS SQL Server 2000服务器下没有问题,在Sybase下出现这个问题,个人认为应该不是程序的问题,求教各位,怎么样才能解决这个问题啊??急急~~谢谢各位~~~
增,删,改等应该用adoquery1或adodataset等控件来做.
应该是这样
adoconnection1.BeginTrans;
try
利用adoquery1来取出数据,修改,删除等
adoconnection1.CommitTrans;
except
adoconnection1.RollbackTrans;
end;
ExeSql :='update TabName set Num = 2 where ID = 1';
QrySql :='select * from TabName where ID = 1';
ADOConnection1.Connected := True;
ADOConnection1.BeginTrans;
Try
Result := true;
ADOQuery1.Active := False;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(QrySql);
ADOQuery1.Active := True; ADOConnection1.Execute(ExeSql,cmdText); //执行到这句时候出错
Except
On errMsg : Exception do
begin
Result := False;
errorMsg := ErrMsg.Message;
end;
end;
if Result then
begin
ADOConnection1.CommitTrans;
MessageBox(handle,'操作成功!','系统提示: ',MB_Ok);
end else
begin
ADOConnection1.RollbackTrans;
MessageBox(handle,'操作失败!','系统提示: ',MB_Ok);
end;
各位大哥知道怎么解决吗?
//QrySql :='select * from TabName where ID = 1';
ADOConnection1.Connected := True;
ADOConnection1.BeginTrans;
Result := true;
Try
ADOQuery1.Close;
ADOQuery1.SQL.Text := ExeSql;
ADOQuery1.ExecSql;
Except
On errMsg : Exception do
begin
Result := False;
errorMsg := ErrMsg.Message;
end;
end;
if Result then
begin
ADOConnection1.CommitTrans;
MessageBox(handle,'操作成功!','系统提示: ',MB_Ok);
end else
begin
ADOConnection1.RollbackTrans;
MessageBox(handle,'操作失败!','系统提示: ',MB_Ok);
end;
所以我判断是你的程序的其它部分影响到了此部分.你检查一下,你的adoquery1在哪里用过.
不过,我还是建议你按我所说的那样来写,不用adoconnection.execute这样的方式,似乎这样用的不多.
而且我只写了这段作为测试用,程序中只有这里在用ADOQuery,没有其他地方在用......
而且,这段代码如果连接MS SQL Server是没有问题的,问题是要求连接Linux下的Sybase......
我试了一下,如果查询和修改都用ADOQuery,也会出现顶楼描述的问题.......
感谢各位帮忙......
继续等待解决办法......