Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

4 Textfelder erst in Tabelle (Datenbank) schreiben wenn alle 4 ausgefüllt sind

Begonnen von wuffwuff2003, August 15, 2013, 17:39:44

⏪ vorheriges - nächstes ⏩

wuffwuff2003

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

MzKlMu

Hallo,
müssen immer alle 4 Felder gefüllt sein?
Gruß Klaus

DF6GL

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.

Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

wuffwuff2003

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

bahasu

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]
Servus

MzKlMu

Hallo,
man kann es auch über eine Gültigkeitsregel mit einer Meldung regeln. Das ist relaltiv einfach. Sieh Bild.


[Anhang gelöscht durch Administrator]
Gruß Klaus

wuffwuff2003


wuffwuff2003

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

bahasu

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
Servus

wuffwuff2003

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

MzKlMu

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
Gruß Klaus

bahasu

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

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
Servus

wuffwuff2003

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.

bahasu

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
Servus

wuffwuff2003

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