我的程序是在一个 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 超出打开游标的最大数”,然后整个程序就跟数据库断开了,必须关闭程序重新启动才能操作,请问上面的语句哪里出问题了?
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 超出打开游标的最大数”,然后整个程序就跟数据库断开了,必须关闭程序重新启动才能操作,请问上面的语句哪里出问题了?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货