Excel以低性能连接到Access

我的代码要非常频繁地查询访问,我使用“for”为每一行,并检查单元格的值,如果在访问表中存在。 但我觉得performance很糟糕。 现在我正在使用adodb.connection来连接访问。 对不起,我不能把代码,因为它不在我的手中。 任何人都可以帮助我如何从excel vba非常频繁地查询表和快速的performance?

编辑:

For rowNum = 2 To 1000000 'check if title exists,if yes, get ppid, if not, insert one, get ppid, and make relation in r-table ppID = isTitleExistReturnID(ppTitle) If ppID = "0" Then ppID = addPpReturnID(ppTitle, ppDate, ppJournal) paperAddedCount = paperAddedCount + 1 isPpAdded = True Else isPpAdded = False End If Next rowNum Function isTitleExistReturnID(title As String) As String Dim r As New ADODB.Recordset sqlstr = "select * from paper where title = '" & title & " '" 'MsgBox sqlstr dbConnection.Open r.Open sqlstr, dbConnection, adOpenKeyset, adLockOptimistic, adCmdText If r.RecordCount < 1 Then dbConnection.Close isTitleExistReturnID = "0" Else aidi = r.Fields(0).Value dbConnection.Close isTitleExistReturnID = aidi End If End Function Function addPpReturnID(title As String, pubDate As String, journaL As String) As String Dim r As New ADODB.Recordset sqlstr = "select * from paper where (1=0)" 'MsgBox sqlstr dbConnection.Open r.Open sqlstr, dbConnection, adOpenKeyset, adLockOptimistic, adCmdText r.AddNew r.Fields(1) = title r.Fields(2) = pubDate r.Fields(3) = journaL r.Update maxid = CStr(r.Fields(0).Value) dbConnection.Close addPpReturnID = maxid End Function 

以上是我的代码的一部分:

  1. 检查项目是否在访问表中
  2. 如果是,则返回其ID
  3. 如果否,则添加该项目并返回ID

做10万次以上,性能非常低

任何意见将如此赞赏,在此先感谢。

任何RBAR(排列靠行的方式)都有可能成为性能上的挑战—这就是为什么它被称为痛苦的原因。

而你的绝对是RBAR,因为你为百万( For rowNum = 2 To 1000000 )电子表格行中的每一行分别做了一些东西。 复杂的问题是,你打开和closuresADODB对象(连接和logging集)至less有一个,但有时两次,每个行。

尝试find一个基于集合的方法。 例如,如果你可以从Access驱动这个操作…

  1. 创build一个到电子表格的链接。
  2. 创build一个“不匹配的”查询(有一个查询向导来指导您)select访问目标表中不存在其ppTitle电子表格行。
  3. 创build一个“追加”查询将这些不匹配的行添加到Access表。

我不知道这个大纲是否适合你的情况,或者是否足够接近以至于能适应你的情况。 但更重要的是要find一个基于集合的方法,而不是RBAR。