当前位置:主页>销售管理软件> 列表

这个问题可以解决吗?

记账软件版1楼: 各位师兄师姐好,最近遇到这样一个问题:

我做了一个函数,其功能是把查询到的数据输出为excel文件,但是由于数据过多,所以每次都要等几分钟,甚至更长时间。

我有这样一个想法,能否在输出为excel文件的这个过程中,我还能做其系统的其它动作,比如说输入,查询等,当excel文件输完之后,通知一下操作人员就可以了。

不知道这个想法是否可行呢,请各位师兄师姐帮帮忙,如果可以的话,给个具体的例子给我,谢谢了

2楼: 你把导出的过程写到一个线程里。开个线程在后台慢慢的导。 如在线进销存

3楼: 用一个单独的进程是否可行
或在循环里面加上application.ProcessMessages看看

4楼: 不如单独写一个导出的程序吧
加参数 调用

5楼: 你可以写加入一个TEMER控件 过一段时间触发一次 这样就不总这样了 嘻嘻 和我前几个月的问题一样 不过我没有成功

6楼: 谢谢了,我还没有用过线程,可以给我一个具体的例子吗?

记账软件版7楼: 大家看看,这是我的输出excel函数,请问应该怎么样修改?

function Tfrmaging.ToExcel():boolean;
var
y :integer;
tsList :TStringList;
s :string;
aSheet,MSExcel,range :Variant;
begin
if trim(cbsign.Text) = ''Y'' then
begin
result:=true;
SADExcel.Filter:=''Microsoft Excel 文件|*.xls'';
SADExcel.DefaultExt:=''XLS'';
SADExcel.FileName := dm.g_ExlName;
SADExcel.InitialDir := dm.g_ExlPath;

if SADExcel.Execute then
begin
MSExcel:=CreateOLEObject(''Excel.Application'');
MSExcel.WorkBooks.Add;
MSExcel.Visible:=False;
aSheet:=MSexcel.Worksheets.Item[1];

tsList:=TStringList.Create;
try
try
with tabaging do
begin
Open;
First;
While Not Eof do
begin
s:='''';
for y:=0 to FieldCount-1 do
begin
s:=s+Fields[y].AsString+#9;
Application.ProcessMessages;
end;
tsList.Add(s);
next;
end;
Close;
end;
Clipboard.AsText:=tsList.Text;
except
result:=false;
end;
finally
tsList.Free;
end;
aSheet.Paste;

//插入标题
MSExcel.Cells[1,1].Value:= ''Da_DateTime'';
MSExcel.Cells[1,2].Value:= ''Da_ByUser'';
MSExcel.Cells[1,3].Value:= ''Da_Sequence'';
MSExcel.Cells[1,4].Value:= ''Da_Customer_Code'';
MSExcel.Cells[1,5].Value:= ''Da_Customer_Name'';


MSExcel.Cells[1,6].Value:= ''Da_Section'';
MSExcel.Cells[1,7].Value:= ''Da_Region'';
MSExcel.Cells[1,8].Value:= ''Da_Office'';
MSExcel.Cells[1,9].Value:= ''Da_Division'';
MSExcel.Cells[1,10].Value:= ''Da_Salesman'';

MSExcel.ActiveSheet.Rows[1].Font.Color := clBlue;
MSExcel.ActiveSheet.Rows[1].Font.Bold := True;
MSExcel.ActiveSheet.Rows[1].Font.UnderLine := True;

MSExcel.Worksheets[1].Columns.AutoFit;
MSExcel.Workbooks[1].WorkSheets[1].Name:= ''Aging'';
MSExcel.ActiveWorkBook.SaveAs(SADExcel.FileName);
MSExcel.Quit;
MessageBox(Application.Handle,''导出完毕'','''',MB_ICONINFORMATION or MB_OK);
end;
end;
end;

8楼: 没有哪位师兄帮帮我吗?

9楼: 各位大哥:

我这样创建线程,为什么出错?

procedure TForm1.Button1Click(Sender: TObject);


var
FHandle:integer;
FThreadID:DWORD;
begin
FHandle := BeginThread(nil, 0, @MyProc, nil, CREATE_SUSPENDED, FThreadID);
if FHandle= 0 then
begin
showmessage(''failed'');
exit;
end;
else
ResumeThread(FHandle);
end;

Error:Variable required.

10楼: 多人接受答案了。