Bejelentkezés Microsoft-fiókkal
Jelentkezzen be, vagy hozzon létre egy fiókot.
Üdvözöljük!
Válasszon másik fiókot.
Több fiókja van
Válassza ki a bejelentkezéshez használni kívánt fiókot.

Megjegyzés: Szeretnénk, ha minél gyorsabban hozzáférhetne a saját nyelvén íródott súgótartalmakhoz. Ez az oldal gépi fordítással lett lefordítva, ezért nyelvtani hibákat és pontatlanságokat tartalmazhat. A célunk az, hogy ezek a tartalmak felhasználóink hasznára váljanak. Kérjük, hogy a lap alján írja meg, hogy hasznos volt-e az Ön számára az itt található információ. Az eredeti angol nyelvű cikket itt találja.

Ha egy Access-űrlap hibára tulajdonsága eseményvezérelt eljárás, nem lehet beolvasni ezt az eljárást ODBC hibák leírását, és még nem található egy adott ODBC-hiba. ODBC hiba történik, ha csak a hiba eseményvezérelt eljárás átadott adatai általános hiba, például 3146, amely megfelel a hibaüzenet száma: nem sikerült ODBC-hívást.

Ok

ODBC-hibaüzenetek rendszerint két összetevője állnak. Az első összetevő hiba 3146, amelynek a Leírás:

Sikertelen az ODBC-hívás

A második összetevő, amelyből meghallgathatja az hibaszám és egy leírást, például a kiszolgáló-specifikus hibaadatokat tartalmazza:

[Microsoft] [ODBC SQL Server-illesztőprogram] [Az SQL Server] < kiszolgáló-specifikus hibaüzenet > (< hibaszám > #)

Ha a űrlap hibára tulajdonsága eseményvezérelt eljárás, is alá, ha a hiba az első összetevő számát, de nem található a számát a második összetevőt. A kiszolgáló-specifikus információk a második részben álló a ODBC-hiba jelenik meg a képernyőn a kód befejeződése után fut, ha nem az Eseménynapló adja meg a következő sort eljárás:

Válasz = acDataErrContinue

Felbontás

Megjegyzés: Microsoft példákat programozási az ábra csak kifejezett vagy implicit jótállás nélkül. Ez tartalmazza, de nem korlátozódik, az adott vagy az adott célra hallgatólagos garanciát. Ez a cikk tartalma feltételezi, hogy ismeri a bemutatott programnyelv és a eszközzel, és szeretné hibakeresése eljárások létrehozásához használt. A Microsoft támogatási szakemberei is segítik az egy adott eljárás funkciókat, de ezek a példák további funkcionalitás hozzáadása vagy eljárások igényeknek Egyenletszerkesztővel nem módosítják.

Microsoft Visual Basic for Applications eljárás, amely az űrlapon alapul RecordsetClone frissítése Data Access Objects (DAO) használó hozhat létre. Ez lehetővé teszi, hogy minden olyan hibaüzenet jelenhet meg található.

DAO hibák együttesét használó található, a második részben álló az ODBC-hiba: a kiszolgálóra vonatkozó információkat tartalmazza. ODBC hiba történik, ha az első összetevő tárolja a hibák gyűjtemény az első elemet, és a második összetevő a második elemet tárolja.

Az ebben a cikkben példában a frissítés előtt esemény helyett a hiba esemény adott ODBC-hibák található. Szeretne létrehozni egy funkció, amely elvégezhető adott ODBC-hibák, ha a frissítés előtt esemény az űrlap, kövesse az alábbi lépéseket:

  1. Hozzon létre egy üres asztali adatbázisból.

  2. Hivatkozás a Microsoft SQL Server-alapú AdventureWorks adatbázisban a dbo_Accounts táblában.

  3. Az űrlap varázslóval - oszlopos elrendezés a fiókok táblán alapuló új űrlapot szeretne létrehozni.

  4. Mentse az űrlapot frmAccounts.

  5. Hozzon létre egy új modult, és írja be a következő sort a deklarációs szakasz Ha sor még nem létezik:

    Option Explicit

  6. Írja be vagy illessze be az alábbi eljárás a 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. Mentse a modul egy egyedi nevet, és zárja be a kódablak.

  8. A frissítés előtt tulajdonság a frmAccounts űrlap megadása az alábbi eseményvezérelt eljárás:

    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. Hibakeresési menüben kattintson a fordítási < az adatbázis neve >

  10. Ha nincs hiba történik, mentse az űrlapot.

  11. Nyissa meg a frmAccounts képernyőt, és adja hozzá az új rekordot, vagy rekord szerkesztése.

    Amikor módosítja rekordra, a rekord menti a program másik rekordra áthelyezésekor. ODBC hiba történik, ha megjelenik-e a kiszolgáló-specifikus hiba alapuló egyéni üzenet és az általános "ODBC – hívás nem sikerült" üzenet elnyeletni.

További segítségre van szüksége?

További lehetőségeket szeretne?

Fedezze fel az előfizetés előnyeit, böngésszen az oktatóanyagok között, ismerje meg, hogyan teheti biztonságossá eszközét, és így tovább.

A közösségek segítségével kérdéseket tehet fel és válaszolhat meg, visszajelzést adhat, és részletes ismeretekkel rendelkező szakértőktől hallhat.

Hasznos volt ez az információ?

Mennyire elégedett a fordítás minőségével?
Mi volt hatással a felhasználói élményére?
Ha elküldi a visszajelzést, a Microsoft felhasználja azt a termékei és szolgáltatásai továbbfejlesztéséhez. Az informatikai rendszergazda képes lesz ezeket az adatokat összegyűjteni. Adatvédelmi nyilatkozat.

Köszönjük a visszajelzését!

×