for i:=0 to vRcdData.RecordCount-1 do //vRcdData.RecordCount=11688
Begin
vsXmBh:=arrayresult[0,i];
vsYear:=arrayresult[2,i];
If vsXmBh<>vsOldXmBh Then
Begin
vsQJNXML:=vsQJNXML+'></R><R ';
vsQJNXML:=vsQJNXML+' ZHNM='''+arrayresult[0,i]+'''';
vsQJNXML:=vsQJNXML+' YEAR='''+arrayresult[2,i]+'''';
//vsQJNXML:=vsQJNXML+' YSDL'+vsXmuid2+'='''+vartostr(arrayresult[5,i])+'''';
vsOldXmBh:=vsXmBh;
vsOldYear:=vsYear;
End
Else
Begin
If (vsYear<psStartYear) AND (vsXmBh=vsOldXmBh) AND (vsYear<>vsOldYear) AND (psLastYear='Y') Then
Begin
vsQJNXML:=vsQJNXML+'></R><R ';
vsQJNXML:=vsQJNXML+' YEAR='''+arrayresult[2,i]+'''';
//vsQJNXML:=vsQJNXML+' YSDL'+vsXmuid2+'='''+vartostr(arrayresult[5,i])+'''';
vsOldYear:=vsYear;
End;
End;
vsXmuid2:=arrayresult[1,i];
vsysqj:=arrayresult[3,i]; if vsysqj<>'0' then
vsQJNXML:=vsQJNXML+' YSDL'+vsXmuid2+'='''+vartostr(arrayresult[5,i])+''''; for j:=0 to 1 do
Begin if arrayNR[4,j]='0' then
begin
If arrayresult[5,i]='1' Then
vsQJNXML:=vsQJNXML+' F'+vsysqj+vsXmuid2+arrayNR[5,j]+'='''+FormatFloat(vsDlFormat,arrayresult[Arrcols[j],i])+''''
ELSE
vsQJNXML:=vsQJNXML+' F'+vsysqj+vsXmuid2+arrayNR[5,j]+'='''+FormatFloat(vsJeFormat,arrayresult[Arrcols[j],i])+'''';
end
Else
begin
vsQJNXML:=vsQJNXML+' F'+vsysqj+vsXmuid2+arrayNR[5,j]+'='''+vartostr(arrayresult[Arrcols[j],i])+'''';
end; If psRealData='Y' Then
Begin
if arrayNR[4,j]='0' then
begin
If arrayresult[5,i]='1' Then
vsQJNXML:=vsQJNXML+' FSJ'+vsysqj+vsXmuid2+arrayNR[5,j]+'='''+FormatFloat(vsDlFormat,arrayresult[Arrcols[j],i])+''''
ELSE
vsQJNXML:=vsQJNXML+' FSJ'+vsysqj+vsXmuid2+arrayNR[5,j]+'='''+FormatFloat(vsJeFormat,arrayresult[Arrcols[j],i])+'''';
end
Else
vsQJNXML:=vsQJNXML+' FSJ'+vsysqj+vsXmuid2+arrayNR[5,j]+'='''+vartostr(arrayresult[Arrcols[j],i])+''' ';
End;
End;
End;这段代码运行居然要3分多钟, 我的机器是酷睿的,2G内存
啥问题呢, 怎么能优化一下
Begin
vsXmBh:=arrayresult[0,i];
vsYear:=arrayresult[2,i];
If vsXmBh<>vsOldXmBh Then
Begin
vsQJNXML:=vsQJNXML+'></R><R ';
vsQJNXML:=vsQJNXML+' ZHNM='''+arrayresult[0,i]+'''';
vsQJNXML:=vsQJNXML+' YEAR='''+arrayresult[2,i]+'''';
//vsQJNXML:=vsQJNXML+' YSDL'+vsXmuid2+'='''+vartostr(arrayresult[5,i])+'''';
vsOldXmBh:=vsXmBh;
vsOldYear:=vsYear;
End
Else
Begin
If (vsYear<psStartYear) AND (vsXmBh=vsOldXmBh) AND (vsYear<>vsOldYear) AND (psLastYear='Y') Then
Begin
vsQJNXML:=vsQJNXML+'></R><R ';
vsQJNXML:=vsQJNXML+' YEAR='''+arrayresult[2,i]+'''';
//vsQJNXML:=vsQJNXML+' YSDL'+vsXmuid2+'='''+vartostr(arrayresult[5,i])+'''';
vsOldYear:=vsYear;
End;
End;
vsXmuid2:=arrayresult[1,i];
vsysqj:=arrayresult[3,i]; if vsysqj<>'0' then
vsQJNXML:=vsQJNXML+' YSDL'+vsXmuid2+'='''+vartostr(arrayresult[5,i])+''''; for j:=0 to 1 do
Begin if arrayNR[4,j]='0' then
begin
If arrayresult[5,i]='1' Then
vsQJNXML:=vsQJNXML+' F'+vsysqj+vsXmuid2+arrayNR[5,j]+'='''+FormatFloat(vsDlFormat,arrayresult[Arrcols[j],i])+''''
ELSE
vsQJNXML:=vsQJNXML+' F'+vsysqj+vsXmuid2+arrayNR[5,j]+'='''+FormatFloat(vsJeFormat,arrayresult[Arrcols[j],i])+'''';
end
Else
begin
vsQJNXML:=vsQJNXML+' F'+vsysqj+vsXmuid2+arrayNR[5,j]+'='''+vartostr(arrayresult[Arrcols[j],i])+'''';
end; If psRealData='Y' Then
Begin
if arrayNR[4,j]='0' then
begin
If arrayresult[5,i]='1' Then
vsQJNXML:=vsQJNXML+' FSJ'+vsysqj+vsXmuid2+arrayNR[5,j]+'='''+FormatFloat(vsDlFormat,arrayresult[Arrcols[j],i])+''''
ELSE
vsQJNXML:=vsQJNXML+' FSJ'+vsysqj+vsXmuid2+arrayNR[5,j]+'='''+FormatFloat(vsJeFormat,arrayresult[Arrcols[j],i])+'''';
end
Else
vsQJNXML:=vsQJNXML+' FSJ'+vsysqj+vsXmuid2+arrayNR[5,j]+'='''+vartostr(arrayresult[Arrcols[j],i])+''' ';
End;
End;
End;这段代码运行居然要3分多钟, 我的机器是酷睿的,2G内存
啥问题呢, 怎么能优化一下
解决方案 »
- Delphi 三层要怎么弄,哪里有些资料。方法如何实现
- 关于敲击回车程序崩溃的问题
- 类的属性有什么用
- 关于用 ADO连的access数据库从单机用户能否改成网络用户 在线等...
- 急,关于DBGIRDEH中怎么用下拉列表啊?
- 求~~~~~~把DBGrid导入excel全过程~!!~!~!无bug的
- www.daliancomputer.com大量技术文章、二手市场、论坛,欢迎大连的朋友进入!
- 请指教怎样用table1.emptytable清空paradox表,我做的总是出问题(100分)?
- 像金山毒霸那种拉窗帘式的更换窗口的方式怎么样实现?
- 我是某全国发行的商业(行业管理)软件的作者。现在有一个问题(可能是有关BDE的,也有可能是有关于ACCESS的),搞得我....,谢谢。
- 求一条sql插入语句!怎样在Delphi中把不同类型的字段插入数据库???
- ACCESS批量插入数据,会重复,请问如何解决?
var
slQJNXML :TStringList; slQJNXML := TStringList.Create; //vsQJNXML:=vsQJNXML+'></R><R ';
修改为:
sl.Add('></R><R ');
后面类推。 最后用
vsQJNXML := slQJNXML.Text; 即可。这种方法有个缺点,就是每次add的字符串之间有 回车。
如果不想要回车的话,可以: TMyStringList = class (TStringList)
protected
function GetTextStr: string; override;
end;function TMyStringList.GetTextStr: string;
var
I, L, Size, Count: Integer;
P: PChar;
S, LB: string;
begin
Count := GetCount;
Size := 0;
LB := ''; ///sLineBreak;
for I := 0 to Count - 1 do Inc(Size, Length(Get(I)) + Length(LB));
SetString(Result, nil, Size);
P := Pointer(Result);
for I := 0 to Count - 1 do
begin
S := Get(I);
L := Length(S);
if L <> 0 then
begin
System.Move(Pointer(S)^, P^, L);
Inc(P, L);
end;
L := Length(LB);
if L <> 0 then
begin
System.Move(Pointer(LB)^, P^, L);
Inc(P, L);
end;
end;
end;然后用
slQJNXML :TMyStringList;即可。
这段程序的执行几乎不需要花费时间, 真的非常感谢