2016-07-25 20 views
1

Ich habe eine Situation, in der ich eine Pass-through Append/einfügen Abfrage von Werten aus MS-Access 2010 VBA zu SQL Server 2012, die ich gut funktionieren muss, aber das kann in Zukunft Punkt muss mit mehr als 1000 Datensätze arbeiten, so muss ich sicherstellen, dass mein Code das unterbringen wird. Meine Idee war, Modulo zu verwenden, um zu bestimmen, wann ich den 1000. Rekord treffe, um einen neuen ; insert .... hinzuzufügen, nicht sicher, ob es der beste Ansatz ist, aber ich habe Probleme mit .AbsolutePosition zu arbeiten.MS Access VBA arbeitet mit AbsolutePosition

Bisher habe ich:

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 

Ich erhalte eine Fehleroperation nicht für diese Art von Objekt unterstützt, wenn entweder versuchen, eine Berechnung mit rs.AbsolutePosition

Antwort

1

Vom documentation zurückzukehren oder durchführen:

Die AbsolutePosition-Eigenschaft ist nicht verfügbar für Vorwärts-Typ-Recordset-Objekte, oder für Recordset-Objekte geöffnet von Pass-Through-Abfragen gegen ODBC-Datenbanken mit Microsoft Access-Datenbank-Engine verbunden.

Warum nicht einfach einen laufenden Zähler verwenden?

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

bearbeiten

/Fail. Ihr rs ist nicht von einer Pass-Through-Abfrage, das ist also nicht das Problem. Trotzdem scheint der Laufzähler die einfachste Option zu sein.

+0

Ich tippte meine Antwort, als Ihr Schnitt erschien und sie sahen im Grunde gleich aus, werden später als Pass definiert, ich baue nur eine Saite. Aber ich übertreibe es trotzdem und werde deine Antwort verwenden, werde mich nicht darum kümmern, warum die überkomplizierte Version nicht funktioniert. Vielen Dank –