尋求dbf 導出 到 excel 解決方法 (too much data) online waiting(150分)

  • 主题发起人 主题发起人 dragonlee007
  • 开始时间 开始时间
D

dragonlee007

Unregistered / Unconfirmed
GUEST, unregistred user!
尋求dbf 導出 到 excel 解決方法; 控件也好
數據達到10000 條紀錄 保存成excel文件也好
速度快點

 
到这个网站瞧瞧,他们有一个直接写excel文件的控件,
应该比OLE要快。
http://www.axolot.com/components/index.htm
 
如果导出的结构和表的结构完全相同,用ado直接连到excel文件上就相当于对两个表操作
了,很方便!
 
1、设置ADO连接到DBF文件。
构造ado connection string,提供者选择 Microsoft Jet 4.0 OLEDB Provider
"所有"那里编辑 Extended Properties,
dbf文件的话设置为dBase 5.0
db文件的话设置为Paradox 7.X
(dbf就是dbase或Vfox数据库,db就是paradox数据库)
“连接”那里的“数据库名称”输入的是目录名,不能包含文件名,
比如你的文件是 c:/temp/aaa.dbf ,那么输入c:/temp
同时CursorLocation 设置为: clUseServer

2、用Adoquery执行SQL语句。
select * into awfi in "c:/temp/awfi.xls" "excel 8.0;" from awfi
把c:/temp/awfi.dbf文件转存到c:/temp/awfi.xls文件中,如awfi.xls不存在,会自动创建。
根据不同的要求,修改相应的SQL语句。
 
给分吧,可这样实现!
procedure Tfm_bf.BitBtn1Click(Sender: TObject);
var row, i: integer;
begin
if SaveDialog1.Execute then
begin
ExcelApplication1.Connect;
ExcelApplication1.Workbooks.Add(Null, 0);
ExcelWorkBook1.ConnectTo(ExcelApplication1.Workbooks[1]);
ExcelWorkSheet1.ConnectTo(ExcelWorkBook1.Sheets[1] as _WorkSheet);

{以下是在EXCEL中添加列名}
ExcelWOrkSheet1.Cells.Item[1, 1] := '帐号';
ExcelWOrkSheet1.Cells.Item[1, 2] := '姓名';
ExcelWOrkSheet1.Cells.Item[1, 3] := '工资';
{获取DBF中的数据}
query1.Close;
Query1.SQL.Clear;
query1.SQL.Add('select * from gz ');
Query1.Prepare;
query1.open;


row := 2;

while not Query1.Eof do
begin
for i := 0 to Query1.Fields.Count - 1 do
begin
ExcelWOrkSheet1.Cells.Item[row, i + 1] := Query1.Fields.AsString;
end;
row := row + 1;
Query1.Next;
end;



ExcelWorkBook1.SaveCopyAs(SaveDialog1.FileName);
ExcelWOrkBook1.Close(false);

ExcelApplication1.Disconnect;
ExcelApplication1.Quit;
Screen.Cursor := crDefault;
Application.MessageBox('保存完毕!', '消息', 0);
end;
 
是要程序还是直接解决方法?程序上面已经给出来了。如果是直接的,那用FOXPRO打开
DBF文件,选择文件->导出->Excel就OK了,不过每次只能导出20000条记录左右。
 
首先;感謝個位[8D]大俠[8D]支持

我是對兩個dbf文件,通過key field 關聯.然後,將master table 顯示在dbgrid 中.
然後將master table 到處到 excel 中 紀錄超過10000條
解決方法要速度快.
我想把分數再提100,
 
to [8D]fwcy[8D] :
好像用你的方法很靈的,導出數據很快,謝謝你,[8D]大俠[8D]
分數給你多些吧.
各位[8D]仁兄[8D];
請多關注小弟,如有問題,大家幫幫忙,再次多謝.

dragonlee007
 
接受答案了.[8D]
 
后退
顶部