Hallo zusammen,
ich habe eine Frage zu einem Formular das dazu dient neue Datensätze eines Materials anzulegen.
In meinem Formular befinden sich mehrere Textfelder die zur Eingabe der Einzelheiten des Materials dienen. Das erste Textfeld ist das Feld der Materialnummer und die ist einmalig. Ist es möglich, dass wenn ich im ersten Textfeld, dass Material eingebe, das die anderen Textfelder mit dem Rest des Datensatzes gefüllt werden? Und wenn ja wie stell ich das an?
Gruß
Dietmar
Hallo,
an deiner Beschreibung scheint etwas nicht zu stimmen.
Wenn die Materialnummer einmalig ist und mit dem Formular ein neuer Datensatz angelegt werden soll, woher willst du dann die Daten für die anderen Textfelder holen? Und wozu überhaupt? Wenn es sie schon geben sollte, müssen sie doch nicht noch einmal eingetragen werden.
Hi MaggieMay,
sollte ich beispielsweise ein neues Material anlegen und würde mich z.B. vertippen also eine MatNr. eingeben die es schon gibt, dann die restlichen Textfelder mit Daten füllen und dann den Speicherknopf drücken, erst dann würde die Meldung kommen Datensatz doppelt da ich keine dupplikate zulassen gewählt habe. Die zweite Funktion wäre, das ganze wie eine Suchmaske zu nutzen, also MatNr. eingeben und alles wir angezeigt. So meine Idee.
Ich möchte ein hohes Maß an Benutzerfreundlichkeit erlangen und früh Fehleingaben vermeiden.
Ich bin noch in den Anfängen Access zu erlernen und über jeglich Art an Hilfe dankbar, vieleicht denke ich auch zu kompliziert.
Danke!
Gruß
Dietmar
Hallo,
1) die Prüfung auf Vorhandensein eines Eingabe-Wertes kann geprüft werden z. B. im "Beim Verlassen" oder "Bei Fokusverlust" mit z. B. der Dcount()-Funktion . Eine (weitere) umfassende Prüfung aller Eingaben ist am Besten in der Ereignisprozedur zum Ereignis "Vor Aktualisierung" durchzuführen.
2) Um ein (Eingabe-)-Formular für Suchzwecke zu verwenden, sind zusätzliche ungebundene (!) Steuerelemente (Textfelder, Kombifelder, evtl. Listenfelder ) nötig, mit deren Hilfe (eigegebene Werte, Markierungen) eine Filterung der angezeigten Datensätze möglich wird.
Hallo Dietmar,
wenn du das Formular nicht nur zur Eingabe sondern auch zum Anzeigen nutzen willst, so kannst du ein ungebundenes Text- oder besser noch Kombifeld zur Auswahl der MatNr einsetzen.
Befindest du dich auf einem neuen Datensatz, so kannst du direkt nach Eingabe der MatNr prüfen, ob sie bereits vorhanden ist:Private Sub MatNr_AfterUpdate()
If Me.NewRecord Then
If DCount("*","tabelle","MatNr='" & Me.MatNr & "'") > 0 Then
MsgBox "Materialnummer '" & Me.MatNr & "' ist bereits vergeben!"
Me.MatNr.Undo
End If
End If
End Sub
Wenn MatNr eine Zahl ist, lässt du die Hochkommata weg.
Hallo,
ich würde das nicht nur bei einem neuen Record machen.. Viele kommen auf die Idee und ändern eine Nummer in eine andere vorhandene ;) 8)
Ich würde das Ändern der Nummern verbieten! 8)
Hallo,
ja eben, deshalb nicht nur bei Newrecord.. :P
Hallo,
danke für eure Antworten.
1. Den Code habe ich auf meine Namen so angepasst
Private Sub BM_Material_AfterUpdate()
If Me.NewRecord Then
If DCount("*", "tblBMMaterial", "BM_Material='" & Me.BM_Material & "'") > 0 Then
MsgBox "Materialnummer '" & Me.BM_Material & "' ist bereits vergeben!"
Me!BM_Material = Null
End If
End If
End Sub
der funktioniert auch! Nun wollte ich nach der MsgBox das Textfeld noch leeren mit
Me!BM_Material = Null
und das funktioniert leider nicht. Was muss ich tun?
2. Wie kann ich das erreichen?
ZitatIch würde das Ändern der Nummern verbieten!
Gruß
Dietmar
Hallo,
Zitatund das funktioniert leider nicht
wird der Befehl stillschweigend ignoriert oder was passiert?
ZitatWie kann ich das erreichen?
Bspw. indem du im Formualrereignis "Beim Anzeigen" abh. von Newrecord das Feld (ent)sperrst.
Hallo,
nach dem Eingeben der doppelten Mat kommt die Msg Box dann bestätige ich mit ok dann kommt der Deduggen in Me!BM_Material = Null das bewirken soll dass das Textfeld leer wird.
Benutze ich den Code von dir bekomme, ich keinnen Fehler aber der Cursor springt in das nächste Textfeld und ich kann weitere Daten zur doppelten MatNr. eingeben.
Kannst du mir den zweiten Punkt noch etwas genauer beschreiben?
Danke!
Gruß
Dietmar
Hi,
du kannst das Ändern einer vorhandenen MatNr verhindern, indem du im Formularereignis "Beim Anzeigen" das Textfeld abh. von Me.NewRecord (ent-)sperrst.
Hi,
ich bin zu blöd :(
Nur noch Mal für mich. Ich gehe in die Formulareigenschaft auf Ergebnis, dann "Beim Anzeigen", dann Ereignisprozedur und gebe folgenden Code ein
Private Sub Form_Current()
Me.NewRecord
End Sub
Dann bekomme ich einen Debuggen (Unzulässige Verwendung einer Eigenschaft)
Denke bitte dran, ich bin blutiger Anfänger ::) und sehe es mir nach das ich dir mit solch einfachen Fragen die Zeit raube. Sorry!
Danke für die Hilfe
Gruß
Dietmar
Hallo,
was willst Du mit dem Code denn sagen?
Du mußt Me.Newrecord auswerten..:
Private Sub Form_Current()
If Me.NewRecord Then
'tu das Eine
Else
'tu das Andere'
End If
End Sub