很奇怪的问题,大家看代码,程序运行到第三个Add就出错了,如果把第二个Add删除,程序又可运行,如果把第三个Add中的(符号换掉又可运行了! RS_ContractSum:= TADOQuery.Create(self); RS_ContractSum.Connection:=DataModuleConnection.DataConnection; RS_ContractSum.Close; RS_ContractSum.SQL.Clear; RS_ContractSum.SQL.Add('SELECT Sum([Num]) AS NumSum,'); RS_ContractSum.SQL.Add(' Sum([Num]*[Price]) AS Amount,'); RS_ContractSum.SQL.Add(' Sum([num]*[price]-[num]*[price]*[Discount]) AS DisAmount'); RS_ContractSum.SQL.Add(' FROM sale_OrderMain LEFT JOIN sale_OrderList ON sale_OrderMain.OrderID = sale_OrderList.OrderID'); RS_ContractSum.SQL.Add(' Where ContractID="'+Param_ContractID+'"'); RS_ContractSum.Open;
为什么用left join啊,试试:RS_ContractSum:= TADOQuery.Create(self); RS_ContractSum.Connection:=DataModuleConnection.DataConnection; RS_ContractSum.Close; RS_ContractSum.SQL.Clear; RS_ContractSum.SQL.Add('SELECT Sum([Num]) AS NumSum,'); RS_ContractSum.SQL.Add(' Sum([Num]*[Price]) AS Amount,'); RS_ContractSum.SQL.Add(' Sum([num]*[price]-[num]*[price]*[Discount]) AS DisAmount'); RS_ContractSum.SQL.Add(' FROM sale_OrderMain , sale_OrderMain.OrderID = sale_OrderList.OrderID'); RS_ContractSum.SQL.Add(' Where ContractID="'+Param_ContractID+'"'); RS_ContractSum.Open;
其实不是程序中语句的错误,执行的错误如下:错误Project xx.exe raiseed exception calss Eaccessviolation with message 'Access Violntion at address' B03F511 in module' msjet40.dll不知道是否有遇到这个问题的?程序运行的到一个很正常的地方出这个错误!
我多次实验发现是这个问题:TADOQuery.SQL.Add('中间有三个sum()函数就出错的问题 ')列如:TADOQuery.SQL.Add('select sum(a) as a1,sum(b) as b1,sum(c) as c1');运行这个包含三个SUM的语句系统就出错!D6环境。50分送解决方法!错误提示如下 Project xx.exe raiseed exception calss Eaccessviolation with message 'Access Violntion at address' B03F511 in module' msjet40.dll
★==========★==========★
‖ Delphi里的最后一丝游魂‖
★==========★==========★
TADOQuery.SQL.Add('select sum(工资) from 工资表 group by 部门')
这个不会错吧!
★==========★==========★
‖ Delphi里的最后一丝游魂‖
★==========★==========★
RS_ContractSum.Connection:=DataModuleConnection.DataConnection;
RS_ContractSum.Close;
RS_ContractSum.SQL.Clear;
RS_ContractSum.SQL.Add('SELECT Sum([Num]) AS NumSum,');
RS_ContractSum.SQL.Add(' Sum([Num]*[Price]) AS Amount,');
RS_ContractSum.SQL.Add(' Sum([num]*[price]-[num]*[price]*[Discount]) AS DisAmount');
RS_ContractSum.SQL.Add(' FROM sale_OrderMain LEFT JOIN sale_OrderList ON sale_OrderMain.OrderID = sale_OrderList.OrderID');
RS_ContractSum.SQL.Add(' Where ContractID="'+Param_ContractID+'"');
RS_ContractSum.Open;
RS_ContractSum.Connection:=DataModuleConnection.DataConnection;
RS_ContractSum.Close;
RS_ContractSum.SQL.Clear; RS_ContractSum.SQL.Add('SELECT Sum([Num]) AS NumSum,');
RS_ContractSum.SQL.Add(' Sum([Num]*[Price]) AS Amount,');
RS_ContractSum.SQL.Add(' Sum([num]*[price]-[num]*[price]*[Discount]) AS DisAmount');
RS_ContractSum.SQL.Add(' FROM sale_OrderMain , sale_OrderMain.OrderID = sale_OrderList.OrderID');
RS_ContractSum.SQL.Add(' Where ContractID="'+Param_ContractID+'"');
RS_ContractSum.Open;
如果是須改成兩個單引號。
Project xx.exe raiseed exception calss Eaccessviolation with message 'Access Violntion at address' B03F511 in module' msjet40.dll