Acces foutmelding aanpassen

Status
Niet open voor verdere reacties.

Marabunta

Gebruiker
Lid geworden
25 okt 2008
Berichten
51
Beste iedereen,

Hopelijk kan iemand mij helpen.
Ik heb een database draaien voor een groep 8 disco.
Om te controleren of iedereen in groep zit maken wij aan het begin van het jaar voor iedereen pasjes met barcode's.

Soms wil het wel een gebeuren dat een pasje verkeerd wordt ingescand waardoor ik een error 2220 krijg.
Aan de hand van de barcode kunnen wij namelijk alle gegevens opvragen en op het beeldscherm laten zien ter controle.

Nu wil ik de standaard foutmelding eruit halen.
Want anders kan je in VBA komen, en dat wil ik voorkomen.

Ik heb zelf al een poging gedaan, maar dit heeft helaas niet geholpen.

Mijn code stopt bij de regel van "foto.picture"

Kan iemand mij hier verder bij helpen?
Hieronder nog de code die ik er nu in heb staan.

Code:
Private Sub Fotonummer_AfterUpdate()
DoCmd.SetWarnings False
DoCmd.Requery
Foto.Picture = "c:\Foto disco\" & fotonr
DoCmd.RunSQL "UPDATE Leerlingen SET Februari = True where Id = Fotonummer"
DoCmd.GoToControl "fotonummer"
Fotonummer = ""
DoCmd.SetWarnings True
 strSQL = "SELECT ABS(SUM(Februari)) AS Totaal FROM Leerlingen WHERE Februari= True"
    With CurrentDb.OpenRecordset(strSQL)
        If .RecordCount > 0 Then
            Me.Totaal = .Fields("Totaal")
        .Close

Error_Handler:
    MsgBox "Foutmelding:" & vbCrLf & vbCrLf & _
           "Error nummer: " & Err.Number & vbCrLf & _
           "Error bron: {PROCEDURE_NAME}/{MODULE_NAME}" & vbCrLf & _
           "Error Omschrijving: " & Err.Description, vbCritical, _
           "Foutmelding!"
            Resume Error_Handler_Exit

Error_Handler_Exit:
    On Error Resume Next

End If
End With

End Sub

Alvast bedankt!
 
Foto.Picture verwacht, als Foto een Image Control is, de naam van een afbeelding. Zo te zien gooi jij daar een nummer in, geen naam van een plaatje. Zelfs als de plaatjes als naam dat nummer hebben, dan nog moet daar een extensie als .jpg achter.
 
De code die gescand wordt kan zijn "BDSC00031" of iets in die reeks.
De code wordt opgezocht in een tabel en dan pas wordt de foto opgezocht.
Zijn allemaal jpg bestanden.

Zolang ik een code invul die bekend is in de tabel gaat alles goed.
Maar zodra er een onbekend code wordt gescand / ingevuld, bijvoorbeeld "123" dan krijg ik deze foutmelding, error 2220, en kan ik naar de foutopsporing.

Nu wil ik dus het venster van foutopsporing niet meer krijgen, maar alleen een melding met daarbij geluid.
Dit dacht ik opgelost te hebben met de "error handler", maar helaas helpt dat niet.
 
IOk snap helemaal niks van jouw code; die zou namelijk nooit mogen werken..... Dat-ie dat toch doet, is dus al een mirakel. Bij mijn weten zou je bij élke record een foutmelding moeten krijgen! Zeker als ik naar jouw voorbeeldje kijk:
De code die gescand wordt kan zijn "BDSC00031" of iets in die reeks.
Zoals ik al begon: Foto.picture verwacht een afbeelding, geen code. Dus dit
Code:
    Foto.Picture = "c:\Foto disco\" & fotonr

zou volgens mij alleen zo kunnen werken:
Code:
    Foto.Picture = "c:\Foto disco\" & fotonr & ".jpg"

Op basis van jouw voorbeeldtekst zou dit
Code:
    DoCmd.RunSQL "UPDATE Leerlingen SET Februari = True where Id = Fotonummer"

ook nooit mogen werken. Dat zou dan dit moeten zijn, zeker als je de code op de AfterUpdate draait en je het nummer dus van je formulier afhaalt:
Code:
    DoCmd.RunSQL "UPDATE Leerlingen SET Februari = TRUE where Id = """ & Fotonummer & """"

Dit
Code:
    DoCmd.GoToControl "fotonummer"
    Fotonummer = ""

Kan korter en slimmer:
Code:
    Me.Fotonummer = ""

Of je moet een specifieke reden hebben om Fotonummer te selecteren. Kan overigens beter met SetFocus, maar dat terzijde.

En persoonlijk krijg ik ook altijd de kriebels als ik veldnamen als [Februari] zie... Ik vermoed dan gelijk de aanwezigheid van velden als [Maart] en [Oktober] en nog zo wat. Niet echt genormaliseerd dus, die tabel. Maar om dat met enige zekerheid te kunnen zeggen, zou ik uiteraard de db moeten zien.

Overigens vind ik je foutafhandeling ook niet geweldig, en dat brengt ons dan bij je echte probleem. Wil je fouten goed afvangen, dan moet je de procedure naar een Error subprocedure leiden. Dat doe je nu wel, maar te laat voor de fout die je nu krijgt. (die dus behoorlijk logisch is in mijn ogen). Je kunt een procedure pas omleiden naar een fouttrap, als je de procedure zegt dat-ie daar heen moet als er een fout is. Dat doe jij niet. Hiermee zou je dat al wél doen:

Code:
Private Sub Fotonummer_AfterUpdate()
    On Error GoTo Foutje
    Me.Foto.Picture = "C:\Foto disco\" & fotonr & ".jpg"
    CurrentDb.Execute "UPDATE Leerlingen SET Februari = True where Id = " & Me.Fotonummer, dbFailOnError
    Me.Fotonummer = ""
    With CurrentDb.OpenRecordset("SELECT ABS(SUM(Februari)) AS Totaal FROM Leerlingen WHERE Februari= True")
        If .RecordCount > 0 Then
            Me.Totaal = !Totaal
            .Close
        End If
    End With
    Exit Sub
    
Foutje:
    MsgBox "Foutmelding:" & vbCrLf & vbCrLf & _
       "Error nummer: " & Err.Number & vbCrLf & _
       "Error bron: {PROCEDURE_NAME}/{MODULE_NAME}" & vbCrLf & _
       "Error Omschrijving: " & Err.Description, vbCritical, "Foutmelding!"
    Return
End Sub

Ik heb het vermoeden dat Fotonummer een keuzelijst is, dus dan zou het ID inderdaad een getal zijn, en de keuzelijst dat ook leveren. De tekstvariant staat dus wat hoger.
 
Ik heb even zitten spelen met de code
Code:
Foto.Picture = "c:\Foto disco\" & fotonr
En daarbij de aanpassingen
Code:
Foto.Picture = "c:\Foto disco\" & fotonr & ".jpg"

Hier kwam ik erachter waarom het raar in elkaar zit.
Wij gebruiken in onze tabel alle fotonamen met daarachter de extensie .jpg
Dus de naam van de foto heet al "foto1.jpg, foto2.jpg, etc"
Op die manier kan het ook werken.
Dit maakt voor mij duidelijk dat het ook anders kan en weer iets makkelijker.

Onderstaande code
Code:
    DoCmd.RunSQL "UPDATE Leerlingen SET Februari = True where Id = Fotonummer"
Wordt gebruikt om bij de desbetreffende maand een vinkje aan te zetten.
Zo kunnen wij zien we er allemaal is geweest en hoe vaak.

De code
Code:
DoCmd.GoToControl "fotonummer"
Fotonummer = ""
heb ik aangepast naar
Code:
Me.Fotonummer = ""
Werkt prima, dank je wel.

Betreft de foutmelding heb ik het ook aangepast en werkt nu ook.
Nu alleen nog een geluidje erbij, liefst iets kan ik zelf geluid kan toevoegen.

Ik krijg zelf de DB niet zo klein dat ik onder de 100 kb kom, dus hieronder een link naar mijn Google Drive.
https://drive.google.com/file/d/0Byx9Lo8PwUtsSW9Tem1KdmJ3MWc/view?usp=sharing
 
Als je de volledige bestandsnaam opslaat in het veld [fotonr] dan is het natuurlijk ook goed, dan hoef je de extensie er niet in de code bij te halen. Welke variant je gebruikt is een beetje afhankelijk van hoe je de fotonamen verkrijgt. Is dat doordat je het nummer genereert uit een persoonscode, dan zou de code niet eens opgeslagen hoeven te worden, dan weet je namelijk de naam al ( =PersoonID). Dan zet je met VBA de extensie er wel bij. Haal je de foto op met een FileDialog, dan krijg je waarschijnlijk de volledige fotonaam binnen, en dan heb je de extensie dus ook. Kortom: een 'winnende' techniek is er niet echt :).
Ik zal naar de db kijken als ik tijd heb vandaag.
 
Hallo OctaFish,

Had u nog tijd gehad om naar mijn voorbeeld te kijken?

Mvg,

Remco.
 
Goeie vraag :). Nee, het is me eerlijk gezegd een beetje ontschoten. Maar ik zal dat vandaag proberen goed te maken!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan