G
gy02564107
Unregistered / Unconfirmed
GUEST, unregistred user!
sql.add()参数用字符串数组代替,可是报出错误Access violation at address 00520066 in module 'project1.exe' ( 积分: 100 )<br />以下是SQL字符串类<br>unit Unit21;<br>interface<br>type<br> strsql = class(TObject)<br> public<br> strArray : array[1..10] of String;<br> constructor Create;virtual;<br> function getArray(n:integer) :string;<br> end;<br>var<br> strSQLArray : strsql;<br>implementation<br><br> constructor strsql.Create;<br> begin<br> strArray[1]:='select 工程代号,季度,年份,总图幅=sum(图幅),总张数=sum(白纸张数)+sum(亮纸张数),总费用=sum(出图费用) from 普通费用视图';<br> strArray[2]:='where 年份=year(getdate()) and 季度 between :a and :b';<br> strArray[3]:='where 年份=:c and 季度 between :a and :b';<br> strArray[4]:='group by 工程代号,季度,年份';<br> strArray[5]:='where 年份=year(getdate()) and 月份 between :a and :b';<br> strArray[6]:='where 年份=:c and 月份 between :a and :b';<br> strArray[7]:='group by 工程代号,月份,季度,年份';<br> strArray[8]:='select 工程代号,年份,总图幅=sum(图幅),总张数=sum(白纸张数)+sum(亮纸张数),总费用=sum(出图费用) from 普通费用视图';<br> strArray[9]:='where 年份 between :a and :b';<br> strArray[10]:='group by 工程代号,年份';<br> end;<br><br> function strsql.getArray(n:integer) :string;<br> begin<br> result := strArray[n];<br> end;<br>end.<br>我是这么用的:<br>unit Unit13;<br> ....<br>implementation<br><br>uses ...,Unit21;<br>var<br> strSQLArray : strsql;<br>...<br>procedure Tcostbydate.SelectDataMonth(....);<br> dbgrid1.Show;<br> dm1.querymain.Active:=false;<br> dm1.querymain.Close;<br> dm1.querymain.SQL.Clear;<br> ......<br> dm1.querymain.SQL.Add(strSQLArray.strArray[8]);<br> dm1.querymain.SQL.Add(strSQLArray.strArray[9]); <br> dm1.querymain.SQL.Add(strSQLArray.strArray[10]);<br> dm1.querymain.Parameters.ParamByName('a').Value:=temp4;<br> dm1.querymain.Parameters.ParamByName('b').Value:=temp3;<br> dm1.querymain.Open;<br> dm1.querymain.Active:=true;<br><br>***dm1是一个数据模块,querymain使该模块中的一个ADOQuery组件<br>***之前曾经用Unit21做过测试,可以正常运行,可是不知道放到这个项目里怎么会报出这个错误。