Bestimmte ODBC­Fehler in der Eigenschaft bei Fehler eines Formulars (KB 206175) kann nicht überfüllt werden.

Hinweis: Wir möchten Ihnen die aktuellsten Hilfeinhalte so schnell wie möglich in Ihrer eigenen Sprache bereitstellen. Diese Seite wurde automatisiert übersetzt und kann Grammatikfehler oder Ungenauigkeiten enthalten. Unser Ziel ist es, Ihnen hilfreiche Inhalte bereitzustellen. Teilen Sie uns bitte über den Link am unteren Rand dieser Seite mit, ob die Informationen für Sie hilfreich sind. Hier finden Sie den englischen Artikel als Referenz.

Wenn Sie die Eigenschaft bei Fehler eines Access-Formulars eine Ereignisprozedur festlegen, die Beschreibung eines Fehlers ODBC in diesem Verfahren können nicht abgerufen werden, und Sie können einen bestimmten ODBC-Fehler auch können nicht beheben. Wenn ein ODBC-Fehler auftritt, ist die einzige Information, die auf die zurück-Ereignisprozedur weitergegeben wird die Anzahl der ein allgemeiner Fehler, wie z. B. 3146, der die Fehlermeldung entspricht: Fehler beim ODBC-Anruf.

Ursache

ODBC-Fehlermeldungen bestehen in der Regel aus zwei Komponenten. Die erste Komponente ist Fehler 3146, deren Beschreibung an:

Fehler beim ODBC-Anruf

Die Server-spezifische Fehlerinformationen ist in die zweite Komponente enthalten, von dem Sie eine Fehlernummer und eine Beschreibung wie abrufen können:

[Microsoft] [ODBC-SQL Server-Treiber] [SQL Server] < Server-spezifische Fehlermeldung > (#< Fehlernummer >)

Wenn Sie die Eigenschaft bei Fehler eines Formulars eine Ereignisprozedur festlegen, können Sie die Anzahl der die erste Komponente des Fehlers beheben, aber Sie können nicht die Anzahl der zweiten Komponente beheben. Die Server-spezifische Informationen in den zweiten Teil der ODBC-Fehler wird auf dem Bildschirm nach der Code, ausgeführt wurde es sei denn, Sie die folgende Zeile in den einschließen Verfahren:

Antwort = AcDataErrContinue

Auflösung

Hinweis: Microsoft stellt Beispiele für die Programmierung Abbildung nur ohne Garantie oder ausdrückliche. Dies umfasst, aber es ist nicht auf die gesetzlichen Garantien der GEWÄHRLEISTUNGEN für einen bestimmten Zweck beschränkt. In diesem Artikel wird vorausgesetzt, dass Sie mit den Tools, die zum Erstellen und Debuggen Prozeduren verwendet werden und die Programmiersprache, die Beispielen verwendeten vertraut sind. Microsoft-Supportmitarbeiter können Erläuterung der Funktionalität bestimmter Prozeduren helfen, jedoch werden nicht in diesen Beispielen, um eine erweiterte Funktionalität oder Prozeduren entwickeln Ihre besonderen Bedürfnisse zugeschnitten ändern.

Sie können eine Microsoft Visual Basic für Applikationen-Prozedur erstellen, die (Data Access Objects, DAO) verwendet, um eine RecordsetClone zu aktualisieren, die auf das Formular basiert. So können Sie keine Fehlermeldung angezeigt, die Sie erhalten, überfüllt.

DAO enthält eine Auflistung von Fehlern, die Sie verwenden können, die Server-spezifische Informationen in den zweiten Teil der ODBC-Fehler der erzeugt. Wenn ein ODBC-Fehler auftritt, wird die erste Komponente in das erste Element der Sammlung Fehler gespeichert und die zweite Komponente in das zweite Element gespeichert ist.

Das Beispiel in diesem Artikel wird Diese Eigenschaft anstelle des Ereignisses Fehler bestimmte ODBC-Fehler, der erzeugt verwendet. Um eine Funktion erstellen, die bestimmte ODBC-Fehler führt wird, beim das Ereignis Before Update des eines Formulars auftritt, gehen Sie folgendermaßen vor:

  1. Erstellen Sie eine leere Desktopdatenbank.

  2. Link zu der Dbo_Accounts-Tabelle in der Datenbank AdventureWorks in Microsoft SQL Server.

  3. Verwenden des Formular-Assistenten - Spaltenlayout zum Erstellen eines neuen Formulars basierend auf der Kontentabelle.

  4. Speichern Sie das Formular als FrmAccounts ein.

  5. Erstellen Sie ein neues Modul, und geben Sie dann die folgende Zeile in den Deklarationsbereich ein, wenn die Zeile noch nicht angezeigt wird:

    Option Explicit

  6. Geben Sie oder fügen Sie das folgende Verfahren in das Modul:

    Public Function SaveRecODBC(SRO_form As Form) As Boolean
    ' ***************************************************************
    ' Function: SaveRecODBC
    ' Purpose: Updates a form based on a linked ODBC table
    ' and traps any ODBC errors.
    ' Arguments: SRO_Form, which refers to the form.
    ' Returns: True if successful or False if an error occurs.
    ' ***************************************************************
    On Error GoTo SaveRecODBCErr
    Dim fld As Field, ctl As Control
    Dim errStored As Error
    Dim rc As DAO.Recordset
    
    ' Check to see if the record has changed.
    If SRO_form.Dirty Then
        Set rc = SRO_form.Recordset.Clone
        If SRO_form.NewRecord Then
            rc.AddNew
            For Each ctl In SRO_form.Controls
                ' Check to see if it is the type of control
                ' that has a ControlSource.
                If ctl.ControlType = acTextBox Or _
                    ctl.ControlType = acComboBox Or _
                    ctl.ControlType = acListBox Or _
                    ctl.ControlType = acCheckBox Then
                    ' Verify that a value exists in the ControlSource.
                    If ctl.Properties("ControlSource") <> "" Then
                        ' Loop through the fields collection in the
                        ' RecordsetClone. If you find a field name
                        ' that matches the ControlSource, update the
                        ' field. If not, skip the field. This is
                        ' necessary to account for calculated controls.
                        For Each fld In rc.Fields
                            ' Find the field and verify
                            ' that it is not Null.
                            ' If it is Null, don't add it.
                            If fld.Name = ctl.Properties("ControlSource") _
                            And Not IsNull(ctl) Then
                                fld.Value = ctl
                                ' Exit the For loop
                                ' if you have a match.
                                Exit For
                            End If
                        Next fld
                    End If ' End If ctl.Properties("ControlSource")
                End If ' End If ctl.controltype
            Next ctl
            rc.Update
        Else
            ' This is not a new record.
            ' Set the bookmark to synchronize the record in the
            ' RecordsetClone with the record in the form.
            rc.Bookmark = SRO_form.Bookmark
            rc.Edit
            For Each ctl In SRO_form.Controls
                ' Check to see if it is the type of control
                ' that has a ControlSource.
                If ctl.ControlType = acTextBox Or _
                    ctl.ControlType = acComboBox Or _
                    ctl.ControlType = acListBox Or _
                    ctl.ControlType = acCheckBox Then
                    ' Verify that a value exists in the
                    ' ControlSource.
                    If ctl.Properties("ControlSource") <> "" Then
                        ' Loop through the fields collection in the
                        ' RecordsetClone. If you find a field name
                        ' that matches the ControlSource, update the
                        ' field. If not, skip the field. This is
                        ' necessary to account for calcualted controls.
                        For Each fld In rc.Fields
                            ' Find the field and make sure that the
                            ' value has changed. If it has not
                            ' changed, do not perform the update.
                            If fld.Name = ctl.Properties("ControlSource") _
                                And fld.Value <> ctl And _
                                Not IsNull(fld.Value <> ctl) Then
                                fld.Value = ctl
                                ' Exit the For loop if you have a match.
                                Exit For
                            End If
                        Next fld
                    End If ' End If ctl.Properties("ControlSource")
                End If ' End If ctl.controltype
            Next ctl
            rc.Update
        End If ' End If SRO_form.NewRecord
    End If ' End If SRO_form.Dirty
    ' If function has executed successfully to this point then
    ' set its value to True and exit.
    SaveRecODBC = True
    
    Exit_SaveRecODBCErr:
        Exit Function
    
    SaveRecODBCErr:
    ' The function failed because of an ODBC error.
    ' Below are a list of some of the known error numbers.
    ' If you are not receiving an error in this list,
    ' add that error to the Select Case statement.
    For Each errStored In DBEngine.Errors
        Select Case errStored.Number
            Case 3146 ' No action -- standard ODBC--Call failed error.
            Case 2627 ' Error caused by duplicate value in primary key.
                MsgBox "You tried to enter a duplicate value in the Primary Key."
            Case 3621 ' No action -- standard ODBC command aborted error.
            Case 547 ' Foreign key constraint error.
                MsgBox "You violated a foreign key constraint."
            Case Else ' An error not accounted for in the Select Case ' statement.
                On Error GoTo 0
                Resume
        End Select
    Next errStored
    SaveRecODBC = False
    Resume Exit_SaveRecODBCErr
    
    End Function
    
  7. Speichern Sie das Modul mit einem eindeutigen Namen ein, und schließen Sie das Modulfenster.

  8. Legen Sie die BeforeUpdate-Eigenschaft des Formulars FrmAccounts auf die folgende Ereignisprozedur fest:

    Private Sub Form_BeforeUpdate(Cancel As Integer)
    ' If you can save the changes to the record undo the changes on the form.
    If SaveRecODBC(Me) Then Me.Undo
    ' If this is a new record go to the last record on the form.
    If Me.NewRecord Then
        RunCommand acCmdRecordsGoToLast
    Else
        ' If you can't update the record, cancel the BeforeUpdate event.
        Cancel = -1
    End If
    End Sub
    
  9. Klicken Sie im Menü Debuggen auf < Name der Datenbank > kompilieren

  10. Wenn keine Fehler auftreten, speichern Sie das Formular aus.

  11. Öffnen Sie das Formular FrmAccounts, und klicken Sie dann einen neuen Datensatz hinzufügen oder Bearbeiten eines Datensatzes.

    Wenn Sie einen Datensatz ändern, wird der Eintrag gespeichert, wenn Sie zu einem anderen Datensatz wechseln. Ein ODBC-Fehler auftritt, die benutzerdefinierte Meldung angezeigt, die auf den Server-spezifische Fehler basiert und die generische "ODBC: Fehler beim Aufrufen" Nachricht abgefangen wird.

Ihre Office-Fähigkeiten erweitern
Schulung erkunden
Neue Funktionen als Erster erhalten
An Office Insider teilnehmen

War diese Information hilfreich?

Vielen Dank für Ihr Feedback!

Vielen Dank für Ihr Feedback. Es klingt, als ob es hilfreich sein könnte, Sie mit einem unserer Office-Supportmitarbeiter zu verbinden.

×