Hallo,
Ich hab mal eine praktische Frage. Ich habe z.B. was das Personal betrifft 4 Felder: Name / Nachname / Mitgliedsnummer / Schichtplan
Diese 4 Felder sind im Formular und können ausgefüllt werden. Bei Access ist es aber nun so wenn ich da richtig bin, wenn ich die Schaltfläche Neuer Datensatz in meinem Formular anklicke setzt er alle Felder auf Null, und gebe ich nun einen Wert in ein Feld, und springe zum nächsten, dann ist dieser eine Wert bereits in die Tabelle gewandert. Kann man hier nicht festlegen dass Access erst die Daten in die Tabelle übernimmt wenn alle 4 Felder ausgefüllt sind, und man diese dann verlässt, oder vielleicht sogar per Knopfdruck in die Tabelle speichert? Ich hatte mal ein ähnliches Problem was ich mit folgendem Code gelöst habe. Aber hier geht es vielmehr drum den Datensatz erst anzulegen wenn die 4 Felder alle einen Inhalt haben also "NICHT NULL" sind. Ansonsten wird der Datensatz verworfen oder nicht gespeichert. Schön wäre dann noch die Meldung "Bitte alle Felder ausfüllen" Aber das ist ja machbar.
Private Sub Verdienst_Exit(Cancel As Integer)
If Not Status = "6" Then
DoCmd.Save
Else
GoTo Zeile1
Zeile1:
If Not IsNull(Datum_Fertigstellung) And Not IsNull(Endsumme) And Not IsNull(Verdienst) Then
DoCmd.Save
DoCmd.RefreshRecord
Else
Status.SetFocus
Status = 1
MsgBox "Datum Fertigstellen, Endsumme, Verdienst ausfüllen"
End If
End If
DoCmd.RefreshRecord
End Sub
Hallo,
müssen immer alle 4 Felder gefüllt sein?
Hallo,
solche Plausibilitätsprüfungen sollten/können beim Form_BeforeUpdate-Ereignis erledigt werden.
Sub Form_BeforeUpdate(Cancel as Integer)
If Isnull (Me!Vorname) Then
Msgbox "Vorname fehlt"
Cancel=true
End If
If Isnull (Me!Nachname) Then
Msgbox "Vorname fehlt"
Cancel=true
End If
.
.
.
End Sub
Alternative ist das Setzen eines eindeutigen Indexes in der Tabelle über alle beteiligten Tabellenfelder. Das erzeugt allerdings eine etwas "späte" Fehlermeldung (Speicherung wurde schon vom Form "versucht"), die aber beim Form_Error-Ereignis abgefangen werden kann.
Hi,
Ja es MÜSSEN im ALLE 4 Felder ausgefüllt sein.
Ja ich hatte anfangs auch versucht im Entwurf der Tabelle unter der Eigenschaft die Option EINGABE ERFORDERLICH mit JA zu beantworten, aber das bringt nicht so den Erfolg den ich haben wollte. Versuche jetzt mal den VBA Code
Danke
Hi,
hier ein Versuch, der eine Meldung im Formular anzeigt, dass etwas unvollständig ist (läßt sich sicher auch noch erweitern um genauere Angaben).
Der Datensatz kann nicht unvollständig gespeichert werden oder verlassen werden.
Wenn unvollständige Daten aus der Zeit vor dieser Überprüfung vorhanden sind und angezeigt werden, ist kein Datensatzwechsel möglich, solange die Daten nciht vervollständigt werden.
Harald
[Anhang gelöscht durch Administrator]
Hallo,
man kann es auch über eine Gültigkeitsregel mit einer Meldung regeln. Das ist relaltiv einfach. Sieh Bild.
[Anhang gelöscht durch Administrator]
Vielen Vielen Dank
Ich gehe jetzt mal alles durch :)
Lg
Hallo
Ich habe mal für mein Formular folgenden Code geschrieben zu Testzwecken, aber beim Öffnen des Formular kommt es zum Fehler, und die Zeile unter Private Sub Pruefen() wird markiert als Fehler
Es handelt sich um die Zeile: Datensatz = Me.ID
Was ist falsch am Code ? Finde den Fehler nicht :/
Danke
Option Compare Database
Option Explicit
Public Datensatz As Long
Public Etwas_fehlt As Boolean
Private Sub Pruefen()
Datensatz = Me.ID
Etwas_fehlt = Fehlt_etwas
End Sub
Private Function Fehlt_etwas() As Boolean
Fehlt_etwas = (Nz(Me.Nom, "") = "" Or Nz(Me.Prénom, "") = "" Or Nz(Me.Matricule, "") = "" Or Nz(Me.ServiceAttache, "") = "")
If Fehlt_etwas Then
MsgBox "Bitte Felder: Nom, Prénom, Matricule, Service d'Attache ausfüllen", vbInformation
End If
End Function
Private Sub Form_AfterUpdate()
Pruefen
End Sub
Private Sub Form_BeforeUpdate(Cancel As Integer)
Fehlt_etwas
Cancel = Fehlt_etwas
End Sub
Private Sub Form_Current()
If Etwas_fehlt Then
Me.RecordsetClone.FindFirst "ID=" & Datensatz
Me.Bookmark = Me.RecordsetClone.Bookmark
Else
If Me.NewRecord Then
Etwas_fehlt = False
Else
Pruefen
End If
End If
End Sub
Private Sub Form_Open(Cancel As Integer)
DoCmd.GoToRecord , , acNewRec
Pruefen
End Sub
Private Sub Löschen_Click()
Dim Passwort As String
Passwort = InputBox("Bitte Passwort eingeben")
If Passwort = "tms" Then
RunCommand acCmdDeleteRecord
DoCmd.RefreshRecord
Else
MsgBox ("Passwort inkorrekt")
End If
End Sub
Private Sub Neu_Click()
DoCmd.RefreshRecord
Nom.SetFocus
End Sub
Private Sub NomComplet_AfterUpdate()
Me.Recordset.FindFirst "[ID]=" & Nz(Screen.ActiveControl, 0)
Me.ServiceManoeuvre.Visible = Me.ServiceAttache = 18
End Sub
Private Sub ServiceAttache_AfterUpdate()
Me.ServiceManoeuvre.Visible = Me.ServiceAttache = 18
End Sub
Private Sub Speichern_Click()
DoCmd.RefreshRecord
End Sub
Hi,
es wäre hilfreich zu erfahren, was das für ein Fehler ist.
Insofern kann ich nur eine Vermutung äußern: Kann es sein, dass in deiner Tabelle bzw. Abfrage das Feld "id" fehlt?
Harald
Hi habs nochmal laufen lassen,
Es folgt die fehlermeldung: Laufzeitfehler 94 . Unzulässige Verwendung von Null
Wenn ich den Datensatz anders benenne, bekomme ich eine Fehlermeldung der datensatz könne nicht gefunden werden
Hallo,
es ist nicht die feine Art das Forum zu wechseln.
Lies mal die Regeln >:(. Das Beispiel im andern Forum hilft Dir.
http://www.office-loesung.de/ftopic615031_0_0_asc.php (http://www.office-loesung.de/ftopic615031_0_0_asc.php)
Hi
Zitat von: MzKlMu am August 20, 2013, 13:46:09
es ist nicht die feine Art das Forum zu wechseln.
http://www.office-loesung.de/ftopic615031_0_0_asc.php (http://www.office-loesung.de/ftopic615031_0_0_asc.php)
Ich finde es schlecht, wenn Code von mir ohne Rücksprache woanders als eigenes Produkt verwendet wird (Zitat aus dem anderen Forum: "Ich habe mal für mein Formular folgenden Code geschrieben").
Und dann auch noch falsch! Der obige Code MUSS einen Fehler liefern!
Damit ziehe ich mich aus dieser und weiteren Diskussionen zurück: Der Inhalt meiner Fussnote ist ernst gemeint.
Harald
Hallo, Entschuldigung erstmals dafür dass ich das so kopiert habe, ich dachte das würde alles so unter einer Hand ablaufen, da ich nicht ins Forum kam auf der Arbeit dachte ich es das andere zu verschieben. Sorry 1000x daß das so ungern gesehen wird wusste ich nicht, wird nicht wieder vor kommen. Auch das mit dem Code, tut mir leid, dachte aber das wäre eine große Community. Ich bleibe dann selbstverständlich hier im Forum! Und gebe nix nach draußen. Wie gesagt kann mich nur bei denen jetzt entschuldigen denen ich in meiner Unwissenheit jetzt zu nahe getreten bin.
Hi,
der Knackpunkt ist:
Private Sub Form_Open(Cancel As Integer)
DoCmd.GoToRecord , , acNewRec
Pruefen
End Sub
Du gehst auf einen neuen Datensatz und willst in Prüfen dessen ID abfragen. Die gibt aber noch nicht.
Also entweder eine Krücke mit nz verwenden
oder
Prüfen an dieser Stelle versuchsweise weglassen.
Harald
Ja das stimmt, an sich müsste er einen neuen Datensatz anlegen damit man sofort etwas schreiben kann. Das Prüfen müsste erst erfolgen wenn man einen Button drückt, der den Datensatz in die Tabelle schreibt. Die Datensätze bzw neue Datensätze müssten dann besser nicht sofort in die Tabelle geschrieben werden sondern erst auf Knopfdruck. Wie halt unter Windows ein SPEICHERN Button. Dann müsste ich das Problem denke ich gelöst kriegen
Danke
Hallo,
schaue Dir mal in dem anderen Forum das Beispiel an, da geht gar nichts wenn die Pflichtfelder nicht gefüllt sind, da kann man noch nicht mal die DB über "Beenden" schließen.