怪!导入Excel到一定数量后就要死机(30分)

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

gymmy

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大虾,我最近碰到一个很怪的问题,我有一个39列2100多条记录的表从后台用ole方法导
入到Excel中,如果全部选中39列的话,每次导的时候到1771条就不动了,但如果我选20-30列
时就可以全部导完没有问题,真是奇怪死了,现在我每次出报表都要分两半分别来导,最后再
在Excel里合并,痛苦啊!是不是我的内存太小128M可用实际物理内存为11%.我是用D6+ADO+sql server7
下面是我的代码,请各位帮忙找找原因.解决我的这块心病,多谢了,
try
XLApp:=CreateOleObject('Excel.Application');
except
Application.MessageBox('Excel没有安装!','提示信息',MB_OK+MB_ICONASTERISK+MB_DEFBUTTON1+MB_APPLMODAL);
exit;
end;
XLApp.visible:=True;
XLApp.Caption:='AFC DATA';
XLApp.Workbooks.add;
XLAPP.WorkSheets[1].Activate;
j:=0;
for i:=0 to Listbox2.Items.Count-1 do
begin
XLApp.cells.Item[1,j+1]:=Listbox2.Items;
j:=j+1;
end;
end;
row:=2;
while Not(ADOQuery2.eof) do
begin
column:=1;
for i:=0 to Listbox2.Items.Count-1 do
begin
j:=Listbox1.Items.IndexOf(listbox2.Items);
XLApp.cells.Item[row,column]:=ADOQuery2.Fields[j].Asstring;
column:=column+1;
end;
ADOQuery2.next;
row:=row+1;
我是用两个Listbox把选中的字段从Listbox1移到Listbox2,ADOQuery2 为select * from table1
Try...end之间的代码是设置excel表的表头字段
 
请问up
error在哪里?
 
我也遇过不知是什么原因,数据量大时就容易死机。
 
to 1975117
终于碰到知音了,怀疑是内存问题。请各位高手们看看吧,不要写了个error就走了,弄
得我干躁急,太不负责任了!
 
天呀,相信MS吧,有直接导入法,windows有3种数据交换机制,不用一条条地导入,
可以一个表一个表地导入,但具体方法我不会,查查help吧
 
兄弟,一个一个的导入,速度之慢,可导致死机,记着,先把要导入的数据存入一个可变数组中,然后将该数组一次导入到EXCEL中,试试吧.
 
给你一段文字试试:

var
Datas : Variant ;
begin
Datas := varArrayCreate([1,iRow,1,iColumn],varVariant); //ÕâÀï´´½¨iRow*iColumnµÄ¶¯Ì¬Êý×é
for i := 0 to Query1.RecordCount - 1 do
begin
Datas[i + 1, 1] := Query1.Fields[1].Value ;
Datas[i + 1, 2] := Query1.Fields[3].Value ;
Datas[i + 1, 3] := Query1.Fields[2].Value ;
Query1.Next ;
end;

//ÏòExcel±íÖÐÌîдÊý¾Ý
with wkSheet do
begin
Range[Cells.Item[5,2], Cells.Item[5 + iRow - 1, 4]].Value := Datas ;
end;
end;
 
你的内存数量不足。加内存吧。
 
to KingTiger168:
谢谢你的帮助,但你的注释//后面我看到的都是乱码,请再写一遍好吗?多谢了。
 
write to a text file first, then open this file by excel.
Excel.Workbooks.OpenText(FileName := lvs_Output_FileName, Comma := False, FieldInfo := TempArray);
Excel.ActiveWorkbook.SaveAs(FileName := lvs_Report_FileName, FileFormat := xlNormal);
 
后退
顶部