sql.add()参数用字符串数组代替,可是报出错误Access violation at address 00520066 in module 'projec

  • 主题发起人 主题发起人 gy02564107
  • 开始时间 开始时间
G

gy02564107

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