我試圖通過VB 6.0應用程序導出Adodb Recordset以excell。我可以通過For Loop做到這一點。但是這個記錄集包含了200行的100列。所以,完成這個象牙花費很多時間,有時會被吊死。 有沒有一種快速的方法來實現相同? 提前致謝將記錄集導出到Excel
回答
有一些方法可以顯着提高ADODB.Recordset對象的性能。一個我用加快速度最好的技巧就是在你的循環,以創建明確field對象:
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代碼的性能 - ADO Performance Best Practices。這篇文章現在已經很老了,但我認爲這一切在多年後的第一次再次閱讀後仍然適用。
幾點建議:
Excel對象模型具有CopyFromRecordset
方法。
的記錄對象具有GetRows
方法返回一個陣列,其可以「轉置」到Excel Range
對象的Value
屬性(「轉置」 =列的行,反之亦然 - Excel有一個Transpose
工作表函數,可以是通過其對象模型調用)。
請注意,在Excel 2007之前,工作表被限制爲65,536行,您可能會發現上述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;
這真是太棒了。我一直使用循環技術,並且對此非常滿意,但是您提供的選項看起來更好。 – 2011-03-18 15:16:37
- 1. 將Datagridview記錄導出到Excel
- 2. 將記錄導出到CSV
- 3. 將IQueryable集合導出到Excel
- 4. 將TFS 2010歷史記錄導出到Excel或文本文件
- 5. laravel Excel導出所有記錄失敗
- 6. 在Excel中導出多條記錄ExtJS
- 7. 從Access表導出新記錄集到指定的Excel工作表
- 8. 將XElement導出到Excel
- 9. 將Excel導出到SQL - InvalidOperationException
- 10. Struts2將JSP導出到Excel
- 11. 將數據導出到Excel
- 12. 將SAS導出到Excel中
- 13. 將excel導出到csv
- 14. 將數組導出到Excel
- 15. 將數據導出到excel
- 16. 將數據導出到Excel
- 17. 將SQL Server導出到Excel
- 18. 將Excel導出到C#
- 19. 從excel導入記錄到oracle
- 20. 添加記錄到Excel中的訪問 - 記錄集是隻讀
- 21. 將Datagridview導出到Excel中的Excel#
- 22. 將數據導出到Excel中的excel
- 23. 將找到的每個記錄集導出到單個文件中?
- 24. 訪問報告中的記錄計數確實導出到Excel
- 25. 策略 - Gridview到Excel導出完整記錄
- 26. 從Excel工作表導出值到訪問記錄
- 27. 從數據集導出數據到excel
- 28. ADO記錄集到DAO記錄集(VB.net)
- 29. 將現有的Excel記錄集複製到Access表
- 30. 將Excel中的DAO記錄集複製到Access表中
爲什麼你認爲你的循環,這涉及製作的'csvOutput' 200K次「深拷貝」,將執行比簡單地調用Recordset對象的'GetString'方法例如'csvOutput = rs.GetString(,,「,」,vbCrLf)'表示只有一個賦值給'csvOutput'而不是200K。 – onedaywhen 2011-03-18 14:37:27