Vb6 将记录集导出到Excel
我正在尝试通过VB6.0应用程序将Adodb记录集导出到excell。我可以通过循环来实现。但记录集包含100列200000行。因此,完成象牙需要花费大量的时间。有时它会被吊死。 有没有快速的方法达到同样的效果?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
提前感谢有一些方法可以显著提高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)
执行得更好。这非常棒。我一直在使用循环技术,对此我很满意,但您提供的选项看起来更好。