2016-07-25 288 views
1

我有一種情況,我需要運行從MS-Access 2010 VBA到SQL Server 2012的附加/插入查詢值的傳遞,我已經正常工作,但可能會在某些未來點需要處理超過1000條記錄,所以我需要確保我的代碼能夠適應這一點。我的想法是使用模來確定什麼時候我打到第1000條記錄來添加一個新的; insert ....,通過字符串,不知道它是否是最好的方法,但我努力與.AbsolutePosition一起工作。MS Access VBA使用AbsolutePosition

到目前爲止,我有:

Dim rs As DAO.Recordset 
    Dim strsql As String 
    Set rs = CurrentDb.OpenRecordset("MyTable") 
    strsql = "insert into [dbo].[SomeTable](field1, field2) values" 
    If Not (rs.EOF And rs.BOF) Then 
     rs.MoveFirst 
     Do Until rs.EOF = True 
      msgbox rs.AbsolutePosition 'error with whatever I do here 
    'Something like the below is what I actually want to get to 
    'If rs.AbsolutePosition Mod 999 = 0 Then strsql = Left(strsql, Len(strsql) - 1) & "; insert into [dbo].[SomeTable](field1, field2) values" 
      strsql = strsql & " (" & rs!field1 & "," & rs!field2 & "')," 
      rs.MoveNext 
     Loop 
     strsql = Left(strsql, Len(strsql) - 1) & ";" 
    Else 
     MsgBox "No Data" 
     Exit Sub 
    End If 

我不斷收到不支持這種類型的對象錯誤操作時,要麼試圖返回或執行使用rs.AbsolutePosition

回答

1

計算從documentation

AbsolutePosition屬性在只進型Recordset對象,或Recordset對象上不可用針對Microsoft Access數據庫引擎連接的ODBC數據庫,從傳遞查詢打開。

爲什麼不簡單地使用運行計數器?

Do Until rs.EOF = True 
    i = i + 1 
    If i Mod 1000 = 0 Then 
     ' ... 

編輯

/失敗。您的rs不是來自Pass-Through查詢,所以這不是問題。儘管如此,跑臺似乎是最簡單的選擇。

+0

當你編輯出現時,我正在輸入我的答案,他們基本上看起來一樣,後來設置爲通過我只是建立一個字符串。但是我已經把它複雜化了,並且會使用你的答案,不用擔心爲什麼過於複雜的版本不起作用。謝謝 –