ADO挑SQL语句(50分)

  • 主题发起人 主题发起人 江西的delphi
  • 开始时间 开始时间

江西的delphi

Unregistered / Unconfirmed
GUEST, unregistred user!
编程环境:D5,Win2000,ADO已升级,Access2000
发布环境:win98或win2000,access2000,安装过mdac_typ2.6或mdac_typ2.5,安装过Jet40SP3_comp.exe
在我的电脑程序运行正常!
在其它电脑运行,只有执行下面这条SQL语句的界面报错(Access Violation at address 11304FE77 in module
'MSJET40.DLL,Read of address FFFFFFF)
其它界面都正常。
怎么办?

with AdoQry do
begin
DisableControls;
Close;
SQL.Clear;
SQL.Add('SELECT TableA.sSellID,TableA.sItemID ,TableA.sBuildingID,TableA.sHouseID,TableA.sClientID ,TableA.sOperatorID,TableA.sAgentID ,');
SQL.Add(' IIF(A.fDealTotal<>NULL,A.fDealTotal,0) AS fDealTotal,IIF(B.fPayTotal<>NULL,B.fPayTotal,0) AS fPayTotal, ');
SQL.Add(' (IIF(fDealTotal<>NULL,fDealTotal,0)-IIF(fPayTotal<>NULL,fPayTotal,0)) AS fDutyPay,(IIF(C.APay<>NULL,C.APay,0)-IIF(fPayTotal<>NULL,fPayTotal,0)) AS fDateNoPay ');
SQL.Add(' FROM ((TableA LEFT JOIN [select sHouseSDID,SUM(IIF(fMoney<>NULL,fMoney,0)) as fDealTotal from Deal group by sHouseSDID]. AS A ');
SQL.Add(' ON (TableA.bIsAvail=True AND TableA.sSellID=A.sHouseSDID)) LEFT JOIN [select sHouseSDID,SUM(IIF(fMoney<>NULL,fMoney,0)) as fPayTotal from ');
SQL.Add(' Pay group by sHouseSDID]. AS B ON TableA.sSellID=B.sHouseSDID) LEFT JOIN [select sHouseSDID,SUM(IIF(fMoney<>NULL,fMoney,0)) as APay from Deal ');
SQL.Add(' where dLimitDate<Now() group by sHouseSDID]. AS C ON (TableA.sSellID=C.sHouseSDID ');
SQL.Add(' AND TableA.sItemID LIKE:psItemID AND TableA.sBuildingID LIKE:psBuildID AND TableA.sOperatorID LIKE:psOperatID AND TableA.sAgentID LIKE:psAgentID )');
SQL.Add(' ORDER BY TableA.sSellID ');
Parameters.ParamByName('psItemID').Value:=EDIT1.TEXT;
Parameters.ParamByName('psBuildID').Value:=EDIT2.TEXT;
Parameters.ParamByName('psOperatID').Value:=EDIT3.TEXT;
Parameters.ParamByName('psAgentID').Value:=EDIT4.TEXT;
Prepared:=True;
Open;
EnableControls;
end;
 
有没有搞错,这么复杂的语句,你调试出它岂不要一天

我也是江西人,公司还要不要人?
 
select nul(aa,0,aa)...
 
with AdoQry do

老大,好象是少了一U哟
应该是 adoquery1 才对。我先看一个,再来慢慢找意见。
 
to:all
不是sql语句语法的问题,在我电脑是好好的,发布到别的电脑就通不过,可能是该sql
不标准!(因为access的左右链接的sql就这样)
 
你把这个sql在sqlexplore里面执行试一下。
 
to:小猪
执行通过!
 
是不是因为sql太长了???
我不知道。
 
to:小猪
在我电脑正常!
 
来了,没有遇到过类似问题,推荐你几个方法:
1、确定错误源
在出错的机器上DEBUG一下,看看执行到哪句错,时不时SQL语句错,AV错,一般不是SQL语句错,是不是有其它原因?

2、如果原因还不明,按出错机器的配制重新编译,有没有问题

3、打最新的补丁,UPDATE2+ADO PACK2(3?)不过你既然用了D5+ADO+2.6,那么估计你不打补丁也不行:)

4、如果是SQL的问题,推荐你在ACCESS中运行一下这句语句;

5、安装和开发机器同样版本的ADO/JET

6、SQL最后+个;
 
sorry,我的数据库狗屁不通,没能帮上你
 
to:CJ,DNChen
我会去试的,谢谢!
 
access的左右链接的sql并非就这样的,access我用了很久了,没有见过你写的这种格式,
Jet40SP3_comp.exe我没装过,会不会是Jet40SP3支持的新语法?
access的左右链接的写法与SQL标准的写法差不多,你用access的查询中用图形方式建一个,
再看看它的生成的语句,就知道了。
另外,我以前碰到过这么一件事,用SQL.Add添加语句,执行正常,但是结果不正确,而且
只在delphi中执行不正确,一点原因都没有,实在没辙,把用SQL.Add添加的语句先用一个
字符串变量保存:SQLString:='……'(语句原封不动),再SQL.Add(SQLString),居然执
行正常了!不知对你有没有用。
 
ADO跳的数据庫驱动,你把ADO和数据庫驱动都升级试试,我以前就是这么解决的。
 
同意CJ
检查一下能正确执行的机器环境与不能正确执行的机器的环境有什么不同

老乡见老乡,,,,,,,
 
是否参数问题?在定义新的参数之前有没有去掉就的参数定义?
 
to:all
我的电脑运行正常,到别的电脑才有这个错误,也就是执行这条语名才有错,
别的界面也是好好的,我想就是这条语句不标准,但在我的电脑是正常的!
 
to:all
辛苦大家了,现在分银子!希望大家以此为鉴,少走弯路。
解决办法:
原SQL.Add(' where dLimitDate<Now() group by sHouseSDID]. AS C
现在去掉'['及']'用'('及')'代替
原 SQL.Add(' AND TableA.sItemID LIKE:psItemID AND TableA.sBuildingID LIKE:psBuildID AND TableA.sOperatorID LIKE:psOperatID AND TableA.sAgentID LIKE:psAgentID )');
SQL.Add(' ORDER BY TableA.sSellID ');
Parameters.ParamByName('psItemID').Value:=EDIT1.TEXT;
Parameters.ParamByName('psBuildID').Value:=EDIT2.TEXT;
现把参数写在SQL里面。
如sQL.Add(' AND HouseSell.sItemID='+''''+sItemID+''''+' AND HouseSell.sBuildingID='+''''+sBuildID+''''+' )');

 
后退
顶部