Reputation: 308
I have a situation where I need to run a pass through append/insert query of values from MS-Access 2010 VBA to SQL Server 2012, which I have working fine, but that may at some future point need to work with over 1000 records, so I need to make sure my code will accommodate that. My idea was to use modulo to determine when I hit the 1000th record to add a new ; insert ....
, to the pass through string, not sure if it's the best approach anyway but I'm struggling to work with .AbsolutePosition
.
So far I have:
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
I keep getting an error operation is not supported for this type of object when either trying to return or perform a calculation using rs.AbsolutePosition
Upvotes: 1
Views: 2029
Reputation: 27644
From the documentation:
The AbsolutePosition property isn't available on forward–only–type Recordset objects, or on Recordset objects opened from pass-through queries against Microsoft Access database engine-connected ODBC databases.
Why not simply use a running counter?
Do Until rs.EOF = True
i = i + 1
If i Mod 1000 = 0 Then
' ...
Edit
/Fail. Your rs
isn't from a Pass-Through query, so that's not the issue. Nevertheless, the running counter seems like the easiest option.
Upvotes: 1