Avatar billede nca Juniormester
08. august 2002 - 11:04 Der er 6 kommentarer og
1 løsning

Få fat i feltnavn, der er årsag til fejlmelding

Jeg har i min database et par felter der er sat til "required". Når en ny post forlades og feltet er tomt generes en fejlmeddelelse hvor bl.a. <tabel>.<feltnavn> er med . Denne fejlmeddelse erstatter jeg med min egen, men jeg kan ikke finde den tekststreng der hører til fejlmeddelelsen.
Når jeg benytter nedenstående kode er feltnavnet tomt, men i den efterfølgende systemmedelelse står feltnavnet.
Hvordan får jeg fat i det?

Min kode:

Function ErrorString(ByVal lngError As Long) As String
   
    Const conAppError = "Application-defined or " & _
            "object-defined error"

    On Error Resume Next
    Err.Raise lngError

    If Err.Description = conAppError Then
        ErrorString = AccessError(lngError)
    ElseIf Err.Description = vbNullString Then
        MsgBox "No error string associated with this number."
    Else
        ErrorString = Err.Description
    End If

End Function


Private Sub Form_Error(DataErr As Integer, Response As Integer)
    Const conDuplicateKey = 3022 '3022 er duplicate indeks
    Const conEmptyField = 3314 '3014 er et tomt felt
    Dim strMsg As String
   
    If DataErr = conEmptyField Then
        Response = acDataErrDisplay
        strMsg = ErrorString(DataErr)
        MsgBox strMsg
    End If
   
   
    If DataErr = conDuplicateKey Then
        Response = acDataErrContinue
        strMsg = "Kunden eksisterer allerede"
        MsgBox strMsg
    End If
End Sub
Avatar billede mugs Novice
08. august 2002 - 11:15 #1
Hvis et felt ikke må være Null (tomt), plejer jeg at lægge fæg kode i feltets BeforeUpdate i formularen. Du skal have feltets Obligatorisk i tabellen til Nej, ellers vil systemmeddelelserne have fortrinsret fremfor dine egne. Jeg benytter denne kode:

If IsNull(Me.felt1) Then
MsgBox "Feltet kan ikke være tomt"
Me.Undo
End If
Avatar billede nca Juniormester
11. august 2002 - 13:12 #2
Din kode virker desværre ikke altid. Hvis man fx. ignorer fejlmeddelelsen, vil posten blive gemt i næste omgang, da feltet så ikke er ændret.
Jeg har også problemer med fejlhåndteringen, da fejlene generes forskellige steder alt efter om den er en ny post eller en post man retter i.
Jeg savner en stabil fejlprocedure der opfanger tomme felter uanset om man springer et felt over ved oprettelsen af en ny post eller man sletter indholdet i et eksisterende felt.
Allerhelst vil give brugeren 2 muligheder:
1) Vend tilbage tilbage til posten for at redigere med focus på det fejlberørte felt.
2) Fortryde ændringerne.
Avatar billede mugs Novice
11. august 2002 - 15:20 #3
nca > Nej naturligvis virker den ikke nøjagtig som beskrevet. Den skal strikkes sammen med de Then -handlinger du nu ønsker.

F.eks:
- en MsgBox kun med vbOKOnly
- Vend tilbage til feltet: Me.Felt1.SetFocus
- Fortryde ændringer har du i Me.Undo, eller brug DoCmd.CancelEvent

Skal du have forskellige koder afhængig af, om det er en ny post eller ej, kan du benytte If Me.NewRecord Then....
Avatar billede hossein Nybegynder
11. august 2002 - 19:23 #4
Det du vil ha´, er navnet på felten eller de felter som er "Duplicate". Det er lidt besværligt :) fordi access opdager den først da brugeren har trykket på "Gem" knappen.
Nogle af meddelelser kan deactiveres med :
docmd.setwarnings False
Avatar billede mugs Novice
11. august 2002 - 19:26 #5
HUSK: Hvis I har sat docmd.setwarnings False, at sætte dem til igen efter udførelsen af koden, idet de ellers vil være frakoblet i hele applikationen.
Avatar billede hossein Nybegynder
11. august 2002 - 19:53 #6
Ellers kan du bare lave en "Find dubbleter" query, så tager du fat på felt navnene, det må lade sig gøre på den måde, måske.
Avatar billede hossein Nybegynder
11. august 2002 - 20:55 #7
et andet er at lave en makro som anvender DLookUp funktionen. Sådan i beforeupdate() ->  "Hvis kontrolen hedder brugereID" Brugere.Valid macro
så man finder ud af det lig efter indtastingen om den er duplikeret eller ej.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester