技术成就梦想
努力展现自我

Delphi 程序运行时提示对象打开时,不允许操作错误;

第一种:ado 对象打开时,不允许操作(带参数查询)

delphi,用ADO操作数据库:

procedure TForm1.Button1Click(Sender: TObject);   //*查询Bt*/
 var
  i :integer;

  CurPage:integer;

  NumEveryPage :integer;
begin
  CurPage:=0;
  NumEveryPage:=1000;

  //1 ADOQuerySelect.Close;

  //2 conn.Close;
  conn.ConnectionString:=’Provider=MSDASQL.1;Persist Security Info=False;Data Source=MyAccessDatabase’;
  conn.LoginPrompt:=false;  //不要输入密码

  ADOQuerySelect.SQL.Clear;   //查询数据
  sql:=’select * from ‘+                    //查询语句,带参数量查询
        ‘ (select top %d * from ‘+
            ‘ (select top %d * from outputdata ‘ +
                ‘order by 日期 ‘+
              ‘ )’+
         ‘ order by 日期 desc ‘+
      ‘ )’+
      ‘order by 日期’;
  ADOQuerySelect.SQL.add(Format(sql,[NumEveryPage,NumEveryPage*(CurPage+1)]));
  ADOQuerySelect.Prepared;
  ADOQuerySelect.Active:=True;  //执行查询

  //ADOQuery1.Active:=true;
end;

当再次按按钮时会提示:

对象打开时不允许操作  的异常。定位在ADOQuerySelect.SQL.Clear;   //查询数据  这一行。

去网上找到原因是ADOQuerySelect 打开了。

1在开始的时候加入一句:ADOQuerySelect.Close;把它关闭吧。

运行发现conn.LoginPromot:=false那行也提示一样的错误。那就应该是把conn也关了。

2 conn.Close也加上,就是上面的代码注释的那两行加上就好了。

第二种:

问题的原因可能:

1、在其他地方已经打开这里没有用close先进行关闭在open

2、如果你的程序是多线程的活,虽然也写了close但是还会报错。

  原因是当你这个线程到sql语句时程序跳到下一个线程执行了open,又回来执行前一个线程的open,就会报同样的错误

解决办法:

1、单线程就将close在sql语句之前,先关闭再打开

2、多线程时尽量不要使用同一个数据库控件,如果使用同一个则尽量在同一个线程里将所需功能处理。

第三种:我本人遇到的问题

只需要在开发模式中如图显示的报错原因

修改为:
再次编译运行程序即可,不在出现报错现象。
赞(0) 打赏
未经允许不得转载:鸿华工作室 » Delphi 程序运行时提示对象打开时,不允许操作错误;
分享到: 更多 (0)

鸿华网络工作室,收集各类技术类优秀文章,少走弯路学习

NAS数据存储中心鸿华在线音乐

觉得文章有用就打赏一下文章作者

微信扫一扫打赏