程序结构是这样的:有一部分TQuery控件用于访问本地数据库,另一部分TQuery用一TDataBase控件连接SQL数据服务器。访问本地的TQuery没有任何问题,访SQL的TQuery控件如果已打开一个,这时再打开一个,这时如果想去关先打开的那个TQuery控件,不论是程序隐示或自己显示的调用UnPrepare方法,都会报错!  但如果把一个TQuery控件换成一个TStoredProc控件,就不会出错,但如果两个都换了也要出相同的错误! 错误的意思是:违规访问!

解决方案 »

  1.   

    比如我先再一函数内
       try
        With Data.Query_DrinkFoodClass do
        begin
          Close;
          SQL.Clear;
          SQL.Add('Select zlbh,zlmc,pictpath from zlda');
          Prepare;
          OPen;
          First;
        end;
        ....
        .....//操作数据库
      except
      end;然再运行下面代码
      try
        With Data.Query_DrinkFoodView do
        begin
          Close;
          UnPrepare;
          SQL.Clear;
          SQL.Add('select spbh,spmc,jldw,'
                  + m_DrinkAndServer.Food.strUnitpriceClass
                  + ' as xsdj from spda where zlbh='''
                  + strFoodClass
                  + ''' and xzflag=1 and '
                  + m_DrinkAndServer.Food.strUnitpriceClass + '<>0');
          Prepare;
          Open;
          First;
        end;
        ....//操作数据库
       except
       end;
    现在我如果关闭上面先打开的TQuery就会真接弹出一CPU窗口,跟踪时发现是在Upprepare方法的地方弹出的
      

  2.   

    而且这种错出现几次后,BDE就死掉了,要注销了再来
      

  3.   

    两上语句中间加一个:
    Query_DrinkFoodView .activer:=false
      

  4.   

    有一点我忘了说了,就是程序里还有TStoredproc控件,我把TDataBase的AliasName设好后
    把DatabaseName设一个程序里的别名,把所有TStoredproc的DatabaseNamey设成TDataBase的
    DatabaseName,把所有TQuery的DatabaseName设为TDataBase的AliasName,就没得问题了,但我也没弄清楚为什么