Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Textfelder automatisch füllen

Begonnen von Dietmar, Juli 30, 2014, 10:59:19

⏪ vorheriges - nächstes ⏩

Dietmar

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

MaggieMay

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.
Freundliche Grüße
MaggieMay

Dietmar

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

DF6GL

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.

MaggieMay

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.
Freundliche Grüße
MaggieMay

DF6GL

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)

MaggieMay

Ich würde das Ändern der Nummern verbieten!   8)
Freundliche Grüße
MaggieMay


Dietmar

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

Gruß
Dietmar

MaggieMay

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.
Freundliche Grüße
MaggieMay

Dietmar

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

MaggieMay

Hi,

du kannst das Ändern einer vorhandenen MatNr verhindern, indem du im Formularereignis "Beim Anzeigen" das Textfeld abh. von Me.NewRecord (ent-)sperrst.
Freundliche Grüße
MaggieMay

Dietmar

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

Gruß
Dietmar

DF6GL

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