大家看看这段代码是什么问题(50分)

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

bytelife

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure Tfrm_hawb_input.Button2Click(Sender: TObject);
begin
dm1.adoconnection1.ConnectionString:=frm_main.strconn;
with dm1.ADOQuery1 do
begin
close;
Connection:=dm1.ADOConnection1;
with sql do
begin
clear;
add('select mawb from mawb');
add('where mawb=:dmawb');
end;
Parameters.ParamByName('dmawb').Value:=edit1.text;
open;
end;

if dm1.ADOQuery1.RecordCount=0 then
begin
messagebox(handle,'该总运单号不存在,请您重新输入一个已录入的总运单号。','提示',mb_ok+mb_iconinformation);
dm1.ADOQuery1.close;
edit1.setfocus;
EXIT;
end;
dm1.ADOQuery1.close;
end;

第一次点击这个BUTTON的时候,会正常运行,再点击这个BUTTON的时候就会提示
‘对象打开时,操作不被允许’了,
但是明明我已经把adoquery.close了呀。

 
EXIT;已退出
你没有执行dm1.ADOQuery1.close;
建议在EXIT前也放一个dm1.ADOQuery1.close;
 
exit;之前也有ADOQUERY.CLOSE呀
 
在最后加上Adoconnection.connected := false;

开始处也可
 
原因是关了dataset对象但connection已经是active了.

而在connection is active是不能更新connectionstring的
 
怎么不关啊!?
 
dm1.adoconnection1.ConnectionString:=frm_main.strconn;
在这之前,dm1.adoconnection1.active:=false
 
建议你设置一个变量来记录记录的数目,不要用OPEN,直接用QUERY1.ACTIVE=TRUE
然后将QUERY1的RECORDCOUNT属性附给这个变量,再设置QUERY1.ACTIVE=FALSE就可以
了。
在后面的程序里判断这个变量是否为0就可以了
 
这样试试:
with dm1.ADOQuery1 do
begin
close;
open;
close;
Connection:=dm1.ADOConnection1;
...
...
...
 
好像是这段代码出问题了
if dm1.ADOQuery1.RecordCount=0 then
begin
messagebox(handle,'该总运单号不存在,请您重新输入一个已录入的总运单号。','提示',mb_ok+mb_iconinformation);
dm1.ADOQuery1.close;
edit1.setfocus;
EXIT;
end;
dm1.ADOQuery1.close;
end;
应改为
if dm1.ADOQuery1.RecordCount=0 then
begin
messagebox(handle,'该总运单号不存在,请您重新输入一个已录入的总运单号。','提示',mb_ok+mb_iconinformation);
dm1.ADOQuery1.close;
edit1.setfocus;
[red]dm1.ADOQuery1.close;
EXIT;[/red]

end;
end;
即先数据集在退出
 
加上dm1.adoconnection1.connected:=false;后问题解决
多谢各位
讨论结束!送分!来者都有份!
 
顶部