Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: Wieder Online ---> provisorisches Office Forum <-
Datensatz nicht speichern
zurück: Direkten Zugriff auf Tabellen sperren weiter: Problem mit ListView Unbeantwortete Beiträge anzeigen
Neues Thema eröffnen   Neue Antwort erstellen     Status: Antwort Facebook-Likes Diese Seite Freunden empfehlen
Zu Browser-Favoriten hinzufügen
Autor Nachricht
4pandora4
Im Profil kannst Du frei den Rang ändern


Verfasst am:
15. Dez 2009, 14:01
Rufname:
Wohnort: Köln

Datensatz nicht speichern - Datensatz nicht speichern

Nach oben
       Version: Office 2007

Hallo,

habe ein kleines Problem, zu dem ich leider nichts gefunden habe.
Und zwar möchte ich einen Datensatz nicht speichern, wenn die eingescannte Packstücknummer bereits in der zugrunde liegenden Tabelle tbl_main vorhanden ist. Dann soll der Datensatz nicht gespeichert werden und zu einem neuen Datensatz gesprungen werden.
Generell soll zu einem neuen Datensatz gesprungen werden, sobald eine Packstücknummer gescannt wird.

Hier ist mein Code:
Code:
Private Sub Packstücknummer_Forms_AfterUpdate()
On Error GoTo Makro_Err
    If DCount("*", "tbl_main", _
              "[Packstücknummer]='" & Me!Packstücknummer_Forms & "'") > 0 Then
        MsgBox "Diese Seriennummer existiert bereits!"
        Cancel = True
    End If
    DoCmd.GoToRecord , "", acNewRec
Makro_Exit:
    Exit Sub
Makro_Err:
    MsgBox "Es ist ein Fehler aufgetreten!"
    Resume Makro_Exit
End Sub
Leider funktioniert das Cancel = True anscheinend nicht, denn das sollte ja bedeuten, dass die Packstücknummer in diesem Fall nicht gespeichert wird?

Ich hoffe es kann mir jemand helfen!
Danke!!!
DBKlempner
Datenbank-Klempner ;)


Verfasst am:
15. Dez 2009, 15:00
Rufname:


Re: Datensatz nicht speichern - Re: Datensatz nicht speichern

Nach oben
       Version: Office 2007

Kunststück, denn das AfterUpdate Ereignis kennt den Cancel-parameter nicht.
Wenn "AfterUpdate" eintritt, ist der DS bereits gespeichert.

Versuchs mal mit "BeforeUpdate"

Volker

_________________
Linux is like a wigwam: no gates, no windows and an apache inside
-----
Ich beantworte keine ACCESS-Fragen per PN!
4pandora4
Im Profil kannst Du frei den Rang ändern


Verfasst am:
15. Dez 2009, 16:55
Rufname:
Wohnort: Köln

AW: Datensatz nicht speichern - AW: Datensatz nicht speichern

Nach oben
       Version: Office 2007

Hallo Volker,

vielen Dank für die rasche Antwort!
Kann man den Code in mehrere Ereignisse schreiben?
Uch habe das nun so gemacht:
Code:
Private Sub Packstücknummer_Forms_AfterUpdate()
On Error GoTo Makro_Err
    DoCmd.GoToRecord , "", acNewRec
Makro_Exit:
    Exit Sub
Makro_Err:
    MsgBox "Es ist ein Fehler aufgetreten!"
    Resume Makro_Exit
End Sub

Private Sub Packstücknummer_Forms_BeforeUpdate(Cancel As Integer)
    If DCount("*", "tbl_main", _
              "[Packstücknummer]='" & Me!Packstücknummer_Forms & "'") > 0 Then
        MsgBox "Diese Seriennummer existiert bereits!"
        Cancel = True
    End If
End Sub
Es scheint zu funktionieren, allerdings bleibt die Packstücknummer noch im Feld stehen. Könnte man noch irgendwie integrieren, dass quasi automatisch das Feld wieder geleert wird? Quasi wie wenn man die ESC-Taste drückt?

Danke und viele Grüße,
Nicole
DBKlempner
Datenbank-Klempner ;)


Verfasst am:
15. Dez 2009, 17:29
Rufname:

Re: AW: Datensatz nicht speichern - Re: AW: Datensatz nicht speichern

Nach oben
       Version: Office 2007

Das geht, aber im AfterUpdate nutzt dir dein code nicht viel ;)
Code:
Private Sub Packstücknummer_Forms_BeforeUpdate(Cancel As Integer)
    If DCount("*", "tbl_main", _
              "[Packstücknummer]='" & Me!Packstücknummer_Forms & "'") > 0 Then
        MsgBox "Diese Seriennummer existiert bereits!"
        Me!Packstücknummer_Forms = Null '<== #############
        Cancel = True
    End If
End Sub
Die markierte Zeile zufügen ;)

Noch ein Tipp:
Feld- und Steuerelementnamen sollten *keine* sonderzeichen wie z.B. dt. Umlaute enthalten.

Volker

_________________
Linux is like a wigwam: no gates, no windows and an apache inside
-----
Ich beantworte keine ACCESS-Fragen per PN!
4pandora4
Im Profil kannst Du frei den Rang ändern


Verfasst am:
15. Dez 2009, 18:13
Rufname:
Wohnort: Köln


AW: Datensatz nicht speichern - AW: Datensatz nicht speichern

Nach oben
       Version: Office 2007

Leider bekomme ich nun die folgende Fehlermeldung:
Zitat:
Laufzeitfehler 2115:
Das Makro oder die Funktion, das bzw. die für dieses Feld einer der Eigenschaften VorAktualisierung oder Gültigkeitsregel zugeordnet ist, hindert Microsoft Access daran, die Daten in em Feld zu speichern.
Woran liegt das? Ich habe noch keine Gültigkeitsregel hinterlegt, würde aber gerne noch festlegen, dass das Feld 18 Stellen haben muss.

Danke und viele Grüße,
Nicole
MiLie
kein Office- VBA- Programmierer


Verfasst am:
15. Dez 2009, 19:06
Rufname: Micha
Wohnort: Chemnitz

AW: Datensatz nicht speichern - AW: Datensatz nicht speichern

Nach oben
       Version: Office 2007

Hallo,

teste mal das Before_Udate ereignis des Formulars und nicht des Textfeldes, Textfeld nicht aktalisieren aber gleichzeitig löschen geht nicht.
Me.Undo könnte auch funktionieren

_________________
Viele Grüße

Micha

Schreibfehler die Ihr findet, könnt Ihr behalten
4pandora4
Im Profil kannst Du frei den Rang ändern


Verfasst am:
16. Dez 2009, 10:33
Rufname:
Wohnort: Köln

AW: Datensatz nicht speichern - AW: Datensatz nicht speichern

Nach oben
       Version: Office 2007

Hallo Micha,

vielen Dank für die Info. Das mit dem einfügen beim Formular laden hat funktioniert:
Code:
Private Sub Form_BeforeUpdate(Cancel As Integer)
    If DCount("*", "tbl_main", _
              "[Packstücknummer]='" & Me!Packstücknummer_Forms & "'") > 0 Then
        MsgBox "Diese Seriennummer existiert bereits!"
        Me!Packstücknummer_Forms = Null
        Cancel = True
    End If
End Sub
Im Textfeld selbst habe ich nun noch folgenden Code bei "Nach Aktualisierung":
Code:
Private Sub Packstücknummer_Forms_AfterUpdate()
On Error GoTo Makro_Err
    DoCmd.GoToRecord , "", acNewRec
Makro_Exit:
    Exit Sub
Makro_Err:
    MsgBox "Es ist ein Fehler aufgetreten!"
    Resume Makro_Exit
End Sub
Wenn nun eine Packstücknummer zum zweiten Mal gescannt wird, dann kommt korrekt die Meldung, dass diese Nummer schon existiert und das Feld wird gelöscht. Allerdings kommt auch die Meldung aus dem zweiten Code "Es ist ein Fehler aufgetreten!" und danach springt er in einen neuen Datensatz und der alte Datensatz ist mit Datum und Uhrzeit leer gespeichert. Kann man das noch irgendwie beheben?!
Und ich habe es auch noch nicht hinbekommen, wie ich die Länge des Feldes festlegen kann und wo ich es einfügen muss. Ich habe das so probiert, aber das scheint nicht zu funktionieren:
Code:
    If Len(Me.[Packstücknummer]) <> 18 Then
        MsgBox "Falsche Packstücknummer"
Danke und viele Grüße,
Nicole
MiLie
kein Office- VBA- Programmierer


Verfasst am:
16. Dez 2009, 21:45
Rufname: Micha
Wohnort: Chemnitz

AW: Datensatz nicht speichern - AW: Datensatz nicht speichern

Nach oben
       Version: Office 2007

Hallo,

zu Teil 1
gleicher Grund auch dieser Code gehört ins After Update des Formulars und nicht des Textfeldes, somit geht er nur in einen neuen Datensatz wenn erfolgreich gespeichert wurde Wink

zu Teil 2

diesen Code kannst du ins After Update des Textfeldes nehmen, dabei kann du ihn noch erweitern
Code:
Private Sub Packstücknummer_Forms_AfterUpdate()
    If Len([Packstücknummer]) <> 18 Then
        MsgBox "Falsche Packstücknummer"
        Me.Packstücknummer_Forms.SetFocus
    End If
End Sub

_________________
Viele Grüße

Micha

Schreibfehler die Ihr findet, könnt Ihr behalten
4pandora4
Im Profil kannst Du frei den Rang ändern


Verfasst am:
17. Dez 2009, 10:50
Rufname:
Wohnort: Köln

AW: Datensatz nicht speichern - AW: Datensatz nicht speichern

Nach oben
       Version: Office 2007

Ja, jetzt funktioniert es schon fast perfekt. Ich habe es ins BeforeUpdate Ereignis im Formular eingefügt:
Code:
Private Sub Form_BeforeUpdate(Cancel As Integer)
On Error GoTo Makro_Err
    If DCount("*", "tbl_main", _
              "[Packstücknummer]='" & Me!Packstücknummer_Forms & "'") > 0 Then
        MsgBox "Diese Seriennummer existiert bereits!"
        Me!Packstücknummer_Forms = Null
        Cancel = True
      Else
        If Len(Me!Packstücknummer_Forms) <> 18 Then
            MsgBox "Dies ist keine Packstück-Nummer! Bitte ESC drücken und" _
                 & " neu scannen."
            Me.Packstücknummer_Forms.SetFocus
            DoCmd.GoToRecord , "", acNewRec
Makro_Exit:
            Exit Sub
Makro_Err:
            MsgBox "Es ist ein Fehler aufgetreten!"
            Resume Makro_Exit
        End If
    End If
End Sub
{Code umformatiert by Willi Wipp}
Wenn eine doppelte Packstück-Nummer eingescannt wird, funktioniert es prima. Wenn allerdings eine falsche Nummer, die keine 18 Stellen hat, eingescannt wird, dann kommt zum einen die vorgesehene Fehlermeldung, zum anderen noch die "Makro_Err" Nachricht. Woran liegt das? Was müsste man ändern, damit nur die vorgesehene Meldung kommt!

Vielen Dank schon mal!!!

Nicole
MiLie
kein Office- VBA- Programmierer


Verfasst am:
17. Dez 2009, 11:16
Rufname: Micha
Wohnort: Chemnitz

AW: Datensatz nicht speichern - AW: Datensatz nicht speichern

Nach oben
       Version: Office 2007

Hallo,

benutze doch bitte die Code-Tag im Forumeditor, das ist übersichtlicher ( auf Code klicken, dann den Code schreiben/Kopieren und dann wieder auf Code klicken, oder Code Markieren und auf Code klicken.

du musst die End IF vor deiner Fehlerroutine schreiben und die Sub verlassen, etwas Formatierung erhöht auch die Übersichtlichkeit
Code:
Private Sub Form_BeforeUpdate(Cancel As Integer)
On Error GoTo Makro_Err
    If DCount("*", "tbl_main", _
              "[Packstücknummer]='" & Me!Packstücknummer_Forms & "'") > 0 Then
        MsgBox "Diese Seriennummer existiert bereits!"
        Me!Packstücknummer_Forms = Null
        Cancel = True
      Else
        If Len(Me!Packstücknummer_Forms) <> 18 Then
            MsgBox "Dies ist keine Packstück-Nummer! Bitte ESC drücken und" _
                 & " neu scannen."
            Me.Packstücknummer_Forms.SetFocus
            DoCmd.GoToRecord , "", acNewRec
        End If
    End If
Makro_Exit:
    Exit Sub
Makro_Err:
    MsgBox "Es ist ein Fehler aufgetreten!"
    Resume Makro_Exit
End Sub
Edit: als Anmerkung noch. Wenn Du weitere Felder in deinen Form hast und änderst diese, wirst du auf deinen Fehler treffen, dass es die Packstücknummer schon gibt, da DCount() die "eigene" Packstücknummer mit findet und bewertet. Du müsstest, um das zu umgehen, die eigene ID in der Bedingung von DCount() ausschließen Wink
_________________
Viele Grüße

Micha

Schreibfehler die Ihr findet, könnt Ihr behalten
4pandora4
Im Profil kannst Du frei den Rang ändern


Verfasst am:
17. Dez 2009, 17:52
Rufname:
Wohnort: Köln

AW: Datensatz nicht speichern - AW: Datensatz nicht speichern

Nach oben
       Version: Office 2007

Hallo Micha,

vielen, vielen Dank für Deine Hilfe!!! Jetzt funktioniert alles super!!! Razz

Ich habe den Code nun wie folgt eingefügt:
Code:
Private Sub Form_BeforeUpdate(Cancel As Integer)
On Error GoTo Makro_Err
    If DCount("*", "tbl_main", _
              "[Packstücknummer]='" & Me!Packstücknummer_Forms & "'") > 0 Then
        MsgBox "Diese Seriennummer existiert bereits!"
        Me!Packstücknummer_Forms = Null
        Cancel = True
      Else
        If Len(Me!Packstücknummer_Forms) <> 18 Then
            MsgBox "Dies ist keine Packstück-Nummer!"
            Me!Packstücknummer_Forms = Null
            Cancel = True
        End If
    End If
Makro_Exit:
    Exit Sub
Makro_Err:
    MsgBox "Es ist ein Fehler aufgetreten!"
    Resume Makro_Exit
End Sub

Viele Grüße,
Nicole
MiLie
kein Office- VBA- Programmierer


Verfasst am:
17. Dez 2009, 18:20
Rufname: Micha
Wohnort: Chemnitz

AW: Datensatz nicht speichern - AW: Datensatz nicht speichern

Nach oben
       Version: Office 2007

Hallo,

hast du mein Edit oben beachtet?

_________________
Viele Grüße

Micha

Schreibfehler die Ihr findet, könnt Ihr behalten
4pandora4
Im Profil kannst Du frei den Rang ändern


Verfasst am:
18. Dez 2009, 14:57
Rufname:
Wohnort: Köln

AW: Datensatz nicht speichern - AW: Datensatz nicht speichern

Nach oben
       Version: Office 2007

Mmh, also ehrlich gesagt habe ich das nicht verstanden.... Smile
Muss ich noch eine Programmzeile hinzufügen?!

Viele Grüße,
Nicole
MiLie
kein Office- VBA- Programmierer


Verfasst am:
18. Dez 2009, 21:43
Rufname: Micha
Wohnort: Chemnitz


AW: Datensatz nicht speichern - AW: Datensatz nicht speichern

Nach oben
       Version: Office 2007

Hallo,
Code:
Private Sub Form_BeforeUpdate(Cancel As Integer)
On Error GoTo Makro_Err
    If DCount("*", "tbl_main" _
            , "[Packstücknummer]='" & Me!Packstücknummer_Forms & "'" _
        & "AND [deinIDFeld] <> " & Me.deinIDFeld) > 0 Then
        MsgBox "Diese Seriennummer existiert bereits!"
        Me!Packstücknummer_Forms = Null
        Cancel = True
    Else
        If Len(Me!Packstücknummer_Forms) <> 18 Then
            MsgBox "Dies ist keine Packstück-Nummer!"
            Me!Packstücknummer_Forms = Null
            Cancel = True
        End If
    End If
Makro_Exit:
    Exit Sub
Makro_Err:
    MsgBox "Es ist ein Fehler aufgetreten!"
    Resume Makro_Exit
End Sub

_________________
Viele Grüße

Micha

Schreibfehler die Ihr findet, könnt Ihr behalten
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind
GMT + 1 Stunde

Diese Seite Freunden empfehlen

Seite 1 von 1
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen

Verwandte Themen
Forum / Themen   Antworten   Autor   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Access Tabellen & Abfragen: Reduzierung mehrerer Datensätze auf einen Datensatz 2 Pulldown 819 03. Jun 2005, 09:32
Pulldown Reduzierung mehrerer Datensätze auf einen Datensatz
Keine neuen Beiträge Access Tabellen & Abfragen: Datensatz automatisch kopieren??? 0 Edelschnitt 701 11. Mai 2005, 19:41
Edelschnitt Datensatz automatisch kopieren???
Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten. Access Tabellen & Abfragen: Formular Daten in einer Tabelle speichern? 1 Gast 1017 24. März 2005, 16:24
Willi Wipp Formular Daten in einer Tabelle speichern?
Keine neuen Beiträge Access Tabellen & Abfragen: Hintergrundfarbe in Datensatz 1 Rheinbote 900 24. Feb 2005, 20:18
stpimi Hintergrundfarbe in Datensatz
Keine neuen Beiträge Access Tabellen & Abfragen: Bilder in Tabelle speichern?? 4 doc77 1096 02. Feb 2005, 18:38
doc77 Bilder in Tabelle speichern??
Keine neuen Beiträge Access Tabellen & Abfragen: Aus 1 Datensatz mit 10 Infos mache 10 Datensätze à 1 Info 2 Steve 914 14. Jan 2005, 00:43
Steve Aus 1 Datensatz mit 10 Infos mache 10 Datensätze à 1 Info
Keine neuen Beiträge Access Tabellen & Abfragen: automatisch in txt-Datei speichern 3 Natascha 668 11. Jan 2005, 10:28
Natascha automatisch in txt-Datei speichern
Keine neuen Beiträge Access Tabellen & Abfragen: Datum und Uhrzeit automatisch speichern 3 peinberger 1119 30. Dez 2004, 10:33
mapet Datum und Uhrzeit automatisch speichern
Keine neuen Beiträge Access Tabellen & Abfragen: Bei der Aktualisierung eines Tabellenwertes neuen Datensatz 6 zheng 810 07. Dez 2004, 22:35
zheng Bei der Aktualisierung eines Tabellenwertes neuen Datensatz
Keine neuen Beiträge Access Tabellen & Abfragen: eingefügte Bilder wieder als datei speichern ?! 2 icke 1210 22. Okt 2004, 07:19
Gast eingefügte Bilder wieder als datei speichern ?!
Keine neuen Beiträge Access Tabellen & Abfragen: Aktionsabfrage in Formular -immer nur einen Datensatz ändern 6 blauvogel 1092 08. Okt 2004, 11:43
Skogafoss Aktionsabfrage in Formular -immer nur einen Datensatz ändern
Keine neuen Beiträge Access Tabellen & Abfragen: Datensatz nach Datum suchen?? 1 Hansen 1390 04. Okt 2004, 12:16
stpimi Datensatz nach Datum suchen??
 

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: Access Tabellen