程序结构是这样的:有一部分TQuery控件用于访问本地数据库,另一部分TQuery用一TDataBase控件连接SQL数据服务器。访问本地的TQuery没有任何问题,访SQL的TQuery控件如果已打开一个,这时再打开一个,这时如果想去关先打开的那个TQuery控件,不论是程序隐示或自己显示的调用UnPrepare方法,都会报错! 但如果把一个TQuery控件换成一个TStoredProc控件,就不会出错,但如果两个都换了也要出相同的错误! 错误的意思是:违规访问!
调试欢乐多
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方法的地方弹出的
Query_DrinkFoodView .activer:=false
把DatabaseName设一个程序里的别名,把所有TStoredproc的DatabaseNamey设成TDataBase的
DatabaseName,把所有TQuery的DatabaseName设为TDataBase的AliasName,就没得问题了,但我也没弄清楚为什么