sql7.0/BDE连接,sql语句返回'Error creating cursor handle'。。。。。。(100分)

  • 主题发起人 主题发起人 bacycle
  • 开始时间 开始时间
B

bacycle

Unregistered / Unconfirmed
GUEST, unregistred user!
sql7.0/BDE连接,sql语句返回'Error creating cursor handle'
将sql属性reques:=true,语句执行正常,但是有时返回table is readonly的提示。
请高手执教。
原码:
with query1 do
begin
sql.clear;
sql.add('insert goods select * from aaa where item_no=:tj');
parambyname('tj').asstring:='123456';
open;
end;
就这样。
 
1. should be: insert INTO goods ... (INTO missing)
2. should return something to query1 (simply add SELECT -1)
 
with query1 do
begin
sql.clear;
sql.add('insert goods select * from aaa where item_no=:tj');
parambyname('tj').asstring:='123456';
[red]execsql[/red];
end;
 

在這里應該用execsql.
open用于需返回結果集的SQL運用.
 
改为如下:
with query1 do
begin
sql.clear;
sql.add('insert goods select * from aaa where item_no=:tj');
parambyname('tj').asstring:='123456';
try
[red]execSQL[/red];
except
//异常处理过程
end;
end;
在sql中有返回结果的用open,没有返回结果的要用execSQL.
 
with query1 do
begin
sql.clear;
sql.add('insert goods select * from aaa where item_no=:tj');
parambyname('tj').asstring:='123456';
execsql;
open;
end;
不过我觉得像这种操作最好使用存储过程,利用Tstoredproc控件更好
 
将sql属性reques:=true,语句执行正常,但是有时返回table is readonly的提示
仍然没有解决,其他我已经解决,用open完全可以。
 
我现在在上海,在靠近楼主公司的一个网吧里。希望能和楼主成为同事。

对于这个问题,我没有注意过。
不过我有几点建议。
我刚工作的时候,也是用的bde/sql7.0.
当时是用delph5开发的,不过delphi5的ado有bug.
现在开发一般都不用bde了,而且borland公司在继6.0以后就没有在发展bde
ado比较方便。给客户用的 时候不用把bde打包进去。
还可以用dbExpress,这种方法很牛。可以做成瘦客户端。
也就是说客户端不用安装sql server,只要几个dll就可以。
不过dbExpress我没有用过,应该很简单的。

sql.add('insert goods select * from aaa where item_no=:tj');
parambyname('tj').asstring:='123456';
这两句可以合成一句:
sql.add('insert goods select * from aaa where item_no='''123456''');



 
同意应该用execsql执行,open用于需返回结果集的SQL语句,同时请注意将requestlive属性设为true,更加安全些,应该不会报错了。
 
后退
顶部