MS Access: Wie umgehen/unterdrücken ein Fehler?

Bin ich der Ausführung einer Abfrage wie dieser

select field from table;

In dieser Abfrage, dort ist eine Schleife laufen auf vielen Tischen. So, wenn das Feld nicht vorhanden ist, in eine Tabelle bekomme ich einen

Laufzeitfehler 3061

Wie kann ich durch diesen Fehler übergeben, wie Sie auf diese Fehler fließen sollten, gehen Sie zu einem anderen Punkt?

Dies ist der code, ich habe vor kurzem, nachdem Sie durch dieses forum.

Option Explicit

Private Sub UpdateNulls()
 Dim rs2 As DAO.Recordset
  Dim tdf As DAO.TableDef
  Dim db As Database
  Dim varii As Variant, strField As String
  Dim strsql As String, strsql2 As String, strsql3 As String
  Dim astrFields As Variant
  Dim intIx As Integer
  Dim field As Variant
  Dim astrvalidcodes As Variant
  Dim found As Boolean
  Dim v As Variant


  Open "C:\Documents and Settings\Desktop\testfile.txt" For Input As #1
  varii = ""
  Do While Not EOF(1)
    Line Input #1, strField
    varii = varii & "," & strField
  Loop
  Close #1
  astrFields = Split(varii, ",")  'Element 0 empty




        For intIx = 1 To UBound(astrFields)


        'Function ListFieldDescriptions()
                            Dim cn As New ADODB.Connection, cn2 As New ADODB.Connection
                            Dim rs As ADODB.Recordset, rs3 As ADODB.Recordset
                            Dim connString As String
                            Dim SelectFieldName

                            Set cn = CurrentProject.Connection

                            SelectFieldName = astrFields(intIx)

                            Set rs = cn.OpenSchema(adSchemaColumns, Array(Empty, Empty, Empty, SelectFieldName))

                           'Show the tables that have been selected '
                            While Not rs.EOF

                           'Exclude MS system tables '
                            If Left(rs!Table_Name, 4) <> "MSys" Then
                            strsql = "Select t.* From [" & rs!Table_Name & "] t Inner Join 01UMWELT On t.fall = [01UMWELT].fall Where [01UMWELT].Status = 4"
                            End If

                            Set rs3 = CurrentDb.OpenRecordset(strsql)

            'End Function

            strsql2 = "SELECT label.validcode FROM variablen s INNER JOIN label ON s.id=label.variablenid WHERE varname='" & astrFields(intIx) & "'"

            Set db = OpenDatabase("C:\Documents and Settings\Desktop\Codebook.mdb")
            Set rs2 = db.OpenRecordset(strsql2)

                With rs2
                .MoveLast
                .MoveFirst
                 astrvalidcodes = rs2.GetRows(.RecordCount)
                .Close '
                End With


                    With rs3
                    .MoveFirst
                    While Not rs3.EOF
                        found = False
                        For Each v In astrvalidcodes
                        If v = .Fields(0) Then
                        found = True
                        Debug.Print .Fields(0)
                        Debug.Print .Fields(1)


              Exit For
                    End If
                    Next
                If Not found Then
                msgbox "xxxxxxxxxxxxxxxx"

                End If
                End If
                .MoveNext


                Wend
                End With

           On Error GoTo 0        'End of special handling

    Wend



Next intIx


  End Sub

Ich bin immer ein

Typen Unverträglich Laufzeitfehler

in Set rs3 = CurrentDb.OpenRecordset(strsql)

Ich denke, ich bin die Vermischung ado und dao aber ich bin mir nicht sicher, wo es ist.

  • First off: Beenden Sie die Verwendung von GoTo. Sofort. Ist es schlecht. Ich meine wirklich böse, wie in "Pandora' s Box". Der einzige Ort, an Springen ist gültig in VB-code ist in "On Error Goto" - Anweisungen.
  • Zweitens: Ändern Sie die "On Error Resume Next" - Stil, es ist viel eher angebracht hier. Haben Sie überprüft, dass 3061 ist die tatsächliche Anzahl der Fehler? Mit dem debugger Schritt für Schritt durch den code.
  • ich widerwillig codiert springen, aber ich habe entfernt ich habe versucht zu Debuggen, aber immer noch gleiche Fehler 3061
  • Ich werde meine Antwort ändern etwas, das sollte funktionieren.
  • Ich kann nicht sehen, eine single "On Error Resume Next" in Ihrem code. Das ist, warum es nicht funktioniert. Andere, die - nichts für ungut, aber Ihr code ist ein Chaos. Möchten Sie vielleicht, um es zu säubern ersten. Ich denke, Sie fehlt auch ein bisschen das Lesen in Bezug auf VB im Allgemeinen und Access VBA-spezifisch.
  • Von clean-bis ich meine fix den Einzug, entfernen Sie code, der nicht ausgeführt wird, brechen code in kleineren Einheiten und nicht alles in eine große Funktion, entfernen Sie überschüssige Leerzeilen... Dinge wie, dass.
  • rs3 braucht ein DAO-recordset, Sie haben Dim rs3 As ADODB.Recordset
  • Dank viel Remou und Tomalak ich glaube, ich hab es geschafft, dass etwas funktioniert.
  • error-trapping-Anweisungen: ein code von mir, in dem ich ein paar Fehler trapping-Anweisungen ausgeführt wurde fein vor ein paar Tagen, aber jetzt plötzlich ist es nicht abfangen, den Fehler und die Fehlermeldung herausspringen. Ich hatte keine änderungen an den code. Vermutungen wat falsch sein könnte
  • On Error Resume Next ist gefährlich, weil es nicht immer "go out of scope", wenn Sie denken, es sollte. Wenn Sie einen bestimmten Fehler, die Sie erwarten zu geschehen, und Sie möchten, es zu ignorieren, dann schreiben Sie einen error-handler, der ignoriert es. Nicht nur ignorieren Sie alle Fehler auszumerzen, die Sie erwarten.

InformationsquelleAutor tksy | 2008-11-10
Schreibe einen Kommentar