我用多线程访问我的   access型的数据库(mdb)   
  用了两个adoconnection   控件和多个   adoquery   控件,   
其中3个adoquery 公用 ADOConnection1,其它的公用ADOConnection2.     
  多个子线程会多次或同时访问这个数据库,程序在运行时有时会出现:   
  "对象打开时,不允许操作"     或   "在异步运行时,操作不能被执行" 偶尔还有"List index out of bounds (0)".有时运行又没有问题。ADOConnection1.Connected := False;ADOConnection1.ConnectionString := Provider = 'Microsoft.Jet.OLEDB.4.0;Data Source=9db.mdb;Persist Security Info=False';
    ADOConnection1.Connected := True;ADOConnection2.Connected := False;
    ADOConnection2.ConnectionString := frmDM.ADOConnection1.ConnectionString;
    ADOConnection2.Connected := True;

解决方案 »

  1.   

    "List index out of bounds (0)".
    明显是越界了,比如你有循环访问数据集,应该是从0到数据集行数-1,而不是从0到数据集行数,数组的上界是3,你去访问数组[4]
      

  2.   

    所有用到数据集的我都是count-1为最大值的。
      

  3.   

    线程冲突?access桌面型还要多线程访问?
      

  4.   

    提示List index out of bounds (0)错误,点击确定后,发现游标跳到sql语句处,这样表示这个SQL语句有问题吗?
      

  5.   

    SQL语句是: 
    SELECT IsApplyDown FROM MachinePurview 
    WHERE (1=1)  
     AND NetNo=IntToStr(aNetNo) 
     AND MachineSN= QuotedStr(aMachineSN)
     AND MachineUses=IntToStr(aMachineUses)   
     AND MachineState=True 
     AND IsUseThread=True 
     AND IsApplyDown=True 
      

  6.   

    sql语句不会有时正确有时不正确。
      

  7.   

    我曾用过线程中使用数据库,也出错,后来我将每个线程都使用独立的ADOCONNECTION,和独立的ADOQUERY就解决了。
      

  8.   

    type 
     adoqGetData: TADOQuery;if adoqGetData.Active then
         adoqGetData.Close;
      adoqGetData.SQL.Text := aSQL;  //aSQL 是SQL语句
      adoqGetData.Open;   //这个地方报错'在异步运行时,操作不能被执行' 或 "对象打开时,不允许操作" 是多线程的,第一次执行没有问题,第二次执行时才报这样的错误。
      

  9.   

    遇到这类问题明显是对业务的逻辑没有完全把握,画个流程图吧,肯定有一个冲突访问的。任何时候保证只有一个访问,特别是在有Write存在的情况下。
      

  10.   

    程序太长,跟踪时,不报这样的错误,而是报其它一些莫名其妙的问题。系统运行有时报List index out of bounds 有时又不报,还没有查到问题到底在什么地方。
      

  11.   

    ACCess到底支持不支持多线程访问,目前我一直没有找到答案,谁知道,请告诉我一声。程序写不出来,心里很难受呀!