我的程序是在一个 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 超出打开游标的最大数”,然后整个程序就跟数据库断开了,必须关闭程序重新启动才能操作,请问上面的语句哪里出问题了?