|
相关代码如下:
strSqlDetail:='Select a.GBJGZH,a.FORMULA,a.XSSXLX,a.XSHWXL,a.XSMDQY,a.TRANS_TYPE,a.ORIG_STN,a.PRICE_AREA,'+
'a.INSU_RATE,a.ZDBXF,a.TIMELIMIT_TYPE,a.FREIGHT_TYPE_MIN,a.INURE_DATE,a.ENDING_DATE,'+
'b.ZLFWH,b.SJ,b.XZ,b.XZJG,b.SZ,b.ZLXX,b.ZLSX,wmsys.wm_concat(DEST_STN) As DEST_STN '+
'From cae.TB_SAL_PUBLICPRICE1 a Inner Join cae.GSJGTB b On a.TH=b.TH '+
'Where jgxl_id='''+dsbXL.DataSet.FieldByName('JGXL_ID').AsString.Trim+''' '+
'Group By a.GBJGZH,a.FORMULA,a.XSSXLX,a.XSHWXL,a.XSMDQY,a.TRANS_TYPE,a.ORIG_STN,a.PRICE_AREA,a.INSU_RATE,'+
'a.ZDBXF,a.TIMELIMIT_TYPE,a.FREIGHT_TYPE_MIN,a.INURE_DATE,a.ENDING_DATE,b.ZLFWH,b.SJ,b.XZ,b.XZJG,b.SZ,b.ZLXX,b.ZLSX';
qPrices:=TQuery.Create(Self);
qPrices.ConnectionString:='DATABASEURL=Biz:\JUSTEPCOOPERATIONSYSTEM\COOPERATIONDB.DATABASE';
qPrices.CommandText:=strSqlDetail;
qPrices.Open;
i:=0;
while not qPrices.Eof do
begin
i:=i+1;
progress(i,qPrices.RecordCount);
dsbPrices.DataSet.Append;
dsbPrices.DataSet.FieldByName('GS').AsString:=qPrices.FieldByName('FORMULA').AsString.Trim;
dsbPrices.DataSet.FieldByName('CPSX').AsString:=qPrices.FieldByName('XSSXLX').AsString.Trim;
dsbPrices.DataSet.FieldByName('HWLX').AsString:=qPrices.FieldByName('XSHWXL').AsString.Trim;
dsbPrices.DataSet.FieldByName('ZDQY').AsString:=qPrices.FieldByName('XSMDQY').AsString.Trim;
dsbPrices.DataSet.FieldByName('YSFS').AsString:=qPrices.FieldByName('TRANS_TYPE').AsString.Trim;
dsbPrices.DataSet.FieldByName('QDQY').AsString:=qPrices.FieldByName('ORIG_STN').AsString.Trim;
dsbPrices.DataSet.FieldByName('JGLX').AsString:=qPrices.FieldByName('PRICE_AREA').AsString.Trim;
dsbPrices.DataSet.FieldByName('BXFL').AsString:=qPrices.FieldByName('INSU_RATE').AsString.Trim;
dsbPrices.DataSet.FieldByName('ZDBXF').AsString:=qPrices.FieldByName('ZDBXF').AsString.Trim;
dsbPrices.DataSet.FieldByName('CPSXID').AsString:=qPrices.FieldByName('TIMELIMIT_TYPE').AsString.Trim;
dsbPrices.DataSet.FieldByName('HWLXID').AsString:=qPrices.FieldByName('FREIGHT_TYPE_MIN').AsString.Trim;
dsbPrices.DataSet.FieldByName('YXRQQS').AsString:=qPrices.FieldByName('INURE_DATE').AsString.Trim;
dsbPrices.DataSet.FieldByName('YXRQZZ').AsString:=qPrices.FieldByName('ENDING_DATE').AsString.Trim;
dsbPrices.DataSet.FieldByName('ZLFW').AsString:=qPrices.FieldByName('ZLFWH').AsString.Trim;
dsbPrices.DataSet.FieldByName('ZDSF').AsString:=qPrices.FieldByName('SJ').AsString.Trim;
dsbPrices.DataSet.FieldByName('XZ').AsString:=qPrices.FieldByName('XZ').AsString.Trim;
dsbPrices.DataSet.FieldByName('XJ').AsString:=qPrices.FieldByName('XZJG').AsString.Trim;
dsbPrices.DataSet.FieldByName('SZ').AsString:=qPrices.FieldByName('SZ').AsString.Trim;
dsbPrices.DataSet.FieldByName('ZLXX').AsString:=qPrices.FieldByName('ZLXX').AsString.Trim;
dsbPrices.DataSet.FieldByName('ZLSX').AsString:=qPrices.FieldByName('ZLSX').AsString.Trim;
dsbPrices.DataSet.FieldByName('ZDQYID').AsString:=qPrices.FieldByName('DEST_STN').AsString.Trim+',';
strZHC:=strZHC+qPrices.FieldByName('GBJGZH').AsString.Trim+',';
qPrices.Next;
end;
JGZHC:=strZHC.Trim([',']).Trim.Split([',']);
qPrices.Close;
qPrices.Free;
版本号:3.0.6.3109
现象:strSqlDetail的查询结果比较多时(也就是循环次数比较多时),大约几千行,就出现内存溢出的报错,后经任务管理器监测,在循环过程中,内存使用量迅速增加,循环加载过程结束后内存会恢复到正常水平,但遇到几千次的循环,我2G内存都撑不住,更别说基层业务人员的电脑了。
说明:dsbPrices是一个自定义数据集。progress(i,qPrices.RecordCount);是一个加载进度条的方法。
请问有没有更好的为自定义数据集赋值的方法吗?或如何解决内存大量使用的问题? |
|