Vb6 将记录集导出到Excel

Vb6 将记录集导出到Excel,vb6,export-to-excel,adodb,recordset,Vb6,Export To Excel,Adodb,Recordset,我正在尝试通过VB6.0应用程序将Adodb记录集导出到excell。我可以通过循环来实现。但记录集包含100列200000行。因此,完成象牙需要花费大量的时间。有时它会被吊死。 有没有快速的方法达到同样的效果? 提前感谢有一些方法可以显著提高ADODB.Recordset对象的性能。我用来加快速度的最佳技巧之一是在循环中创建显式对象: Dim rs As New ADODB.Recordset Dim fldLastName As ADODB.Field, fldFirstName As AD

我正在尝试通过VB6.0应用程序将Adodb记录集导出到excell。我可以通过循环来实现。但记录集包含100列200000行。因此,完成象牙需要花费大量的时间。有时它会被吊死。 有没有快速的方法达到同样的效果?
提前感谢

有一些方法可以显著提高ADODB.Recordset对象的性能。我用来加快速度的最佳技巧之一是在循环中创建显式对象:

Dim rs As New ADODB.Recordset
Dim fldLastName As ADODB.Field, fldFirstName As ADODB.Field

rs.Open "SELECT au_lname, au_fname FROM authors", "DSN=pubs", , , adCmdText

Set fldLastName = rs.Fields("au_lname")
Set fldFirstName = rs.Fields("au_fname")

Do Until rs.EOF
    csvOutput = csvOutput & fldLastName & "," & fldFirstName & vbCrLf
    rs.MoveNext
Loop
rs.Close
这确实可以加快速度,因为在引用Recordset.Field.Value项时可以避免后期绑定。试一试,你会发现性能有了巨大的提高。我曾经使用过像您描述的那样的大型记录集,使用这种技术,性能是可以忍受的

顺便说一句,这里有一篇关于MSDN的好文章,其中有一些其他提示可能有助于提高ADODB代码的性能。这篇文章现在已经很老了,但多年来第一次再读一遍后,我认为它仍然适用。

一些建议:

Excel对象模型有一个
CopyFromRecordset
方法

记录集对象有一个
GetRows
方法来返回一个数组,您可以将该数组“转置”到Excel
范围
对象的
属性(“转置”=列到行,反之亦然--Excel有一个
转置
工作表函数,可以通过其对象模型调用)

请注意,在Excel2007之前,工作表仅限于65536行,您可能会发现上述Excel方法也同样有限

Recordset对象有一个
GetString
方法,可以将所有行一次写入一个字符串(无需循环)

您可以完全绕过记录集,使用Access SQL(ACE、Jet等)将数据直接写入Excel,例如:

SELECT *
  INTO [Excel 8.0;DATABASE=C:\MyNewWorkbook.xls].MyNewTable 
  FROM [ODBC;Driver={SQL Server};Server=MyServer;Database=MyDB;UID=Admin;PWD=***].MyDBTable;

为什么你认为你的循环,包括对
csvOutput
200K次进行“深度复制”,会比简单地调用记录集对象的
GetString
方法(例如
csvOutput=rs.GetString(,,,,,,,,,,,,,,vbCrLf)
执行得更好。这非常棒。我一直在使用循环技术,对此我很满意,但您提供的选项看起来更好。