'0RA-01000 超出打开游标的最大数' 这是什么错误,怎么解决

jjdown 2005-08-02 10:14:37
我的程序是在一个 edit 框里用条形码扫描器输入条形码,然后根据这个条形码查询数据库里是否存在这个条形码,如果存在弹出提示信息,如果不存在就将条形码添加到listbox里。
edit 的KeyPress 事件如下:
procedure Tfrm.Edit2KeyPress(Sender: TObject; var Key: Char);
var
opensql:string;
d:tdataset;
i:integer;
begin
//加条码位数及字符判断
if not ((key in ['0'..'9']) or (key in ['a'..'z']) or(key in ['A'..'Z']) or (key in [#8,#13,'*'])) then
begin
showmessage('请输入字母或数字,其他字符无效!');
edit2.clear;
abort;
end;
key:=upcase(key);
if key=#13 then
begin
if not ((length(edit2.Text)=13) or (length(edit2.Text)=11)) then
begin
showmessage('条形码的位数不正确,请检查!');
edit2.clear;
abort;
end;
edit2.SetFocus;
//检查数据库中是否有此邮件的资料,如果有则不录入
begin
d:=tdataset.Create(nil);
opensql:='select * from table1 where tm='''+UpperCase(edit2.Text)+'''';
try
这里执行sql语句
except
showmessage('操作失败!');
end;
if d.RecordCount=0 then
begin //插入到listbox里

//---------
for i:=0 to Listbox1.Items.Count do
begin
if ListBox1.Items.Indexof(edit2.Text)<0 then
begin
listbox1.Items.Add(UpperCase(edit2.Text));
n:=n+1;
label4.Caption:=inttostr(n);
edit2.Clear;
end
else
edit2.Clear;
edit2.SetFocus;
abort;
end;
//-------------
end
else
begin
showmessage('该条码已存在,请勿重复录入!');
edit2.clear;
abort;
end;
end;
end;


使用的是oracle数据库,当listbox 里的记录累积到一定数目时,通常在280-290条时,系统会提示“0RA-01000 超出打开游标的最大数”,然后整个程序就跟数据库断开了,必须关闭程序重新启动才能操作,请问上面的语句哪里出问题了?
...全文
119 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
peterluolaw 2005-10-08
  • 打赏
  • 举报
回复
你不断地使用d:=tdataset.Create(nil);用完后又不释放.
falcoperegrinusman 2005-10-08
  • 打赏
  • 举报
回复
也正在试图解决这个问题.问题出现的原因是,操作数据库有没有释放游标,致使游标累加超出最大游标数。解决的方法是操作数据后关闭游标。楼主可以在取tdataset的返回结果后关闭连接。
herman~~ 2005-08-02
  • 打赏
  • 举报
回复
帮顶
是内存满了吗 ?

5,928

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧