Access-o-Mania

Access-Forum (Deutsch/German) => Bericht => Thema gestartet von: Abacus am Juli 20, 2016, 23:47:35

Titel: Feld automatisch ausfüllen
Beitrag von: Abacus am Juli 20, 2016, 23:47:35
Ich habe eine Tabelle mit einer Ordnungsliste. Zu jeder Ordnungszahl gehört ein Beschrieb des Inhaltes, z.B. "211" = "Baumeister". Nun kann es bei jedem Projekt kleinere Abweichungen von diesem Standard geben. Ich möchte also, dass das Feld mit dem Namen automatisch mit einem Standardwert aus der Ordnungsliste ausgefüllt wird, sobald ich das Feld mit der Ordnungszahl verlasse. Ich schreibe also in meinem Projekt "211" klicke auf den Tabulator und möchte, dass im nächsten Feld automatisch "Baumeister" steht, ohne Referenz, da ja projektspezifisch.
Makro, VBA, Nachschlagen? Leider auch mit Google nicht fündig geworden.
Titel: Re: Feld automatisch ausfüllen
Beitrag von: Beaker s.a. am Juli 21, 2016, 12:29:13
Hallo Abacus,
ZitatMakro, VBA, Nachschlagen?
Makro -> besser nicht
VBA -> IMO nicht nötig
Nachschlagen -> Ja, aber nur auf einem Formular mit einem Kombifeld.
gruss ekkehard
Titel: Re: Feld automatisch ausfüllen
Beitrag von: MzKlMu am Juli 21, 2016, 14:18:40
Hallo,
da das Feld nach der Auswahl noch überschreibbar sein muss, kommt hier nur VBA (oder Makro) in Frage. Makros will keiner, daher bleibt nur VBA.
Dazu holt mal mit DLookup den Wert aus der Tabelle.

Me.FeldFürBeschrieb = DLookup("Beschrieb","Ordnungsliste","Ordnungszahl =" & Me.Ordnungszahl)

Der Code muss als Ereignisprozur in das Ereignis "Nach Aktualisierung" von Me.Ordnungszahl (=Formularfeld mit der OZahl).
Titel: Re: Feld automatisch ausfüllen
Beitrag von: Beaker s.a. am Juli 21, 2016, 15:09:15
Hallo Klaus,
Hast ja Recht; - wieder zu unaufmerksam gelesen.

Aber, mir stellt sich die Frage, was denn dann in der Projekte-Tabelle gespeichert
wird.

Die Ordnungszahl? Dann macht das Überschreiben keinen Sinn.
Die Ordnungszahl und der Beschrieb? Verletzt IMO die Normalisierungsregeln.
Nur der Beschrieb? Dann würde ich das Feld für die O-Zahl als Kombi anlegen,
(ID, Beschrieb; 1cm;0cm) und mir den Beschrieb aus .Column(1) holen.
Da brauch ich kein DLookup; - ohne VBA geht's allerdings auch nicht  ;)

gruss ekkehard
Titel: Re: Feld automatisch ausfüllen
Beitrag von: MzKlMu am Juli 21, 2016, 15:19:55
Hallo,
Zitatund mir den Beschrieb aus .Column(1) holen.
nein, das geht nicht, denn dann ist das Feld an das Kombi gebunden (über Column) und nicht überschreibbar. Und genau das ist ja gewünscht.
Da der Beschrieb ja für jeden Datensatz zwar vorbelegt aber trotzdem individuell änderbar sein muss, sollte in die Projekttabelle ein Feld für den Beschrieb, sonst keines. Verstößt auch nicht gegen die Normalisierungsregeln.
Titel: Re: Feld automatisch ausfüllen
Beitrag von: MaggieMay am Juli 21, 2016, 16:15:18
Hi,

es ist doch kein Problem, wenn man das Kombifeld auf "Nur Listeinträge = Nein" einstellt.
Der Text muss natürlich gespeichert werden - so oder so.
Titel: Re: Feld automatisch ausfüllen
Beitrag von: MzKlMu am Juli 21, 2016, 16:18:45
Hallo,
so geht's natürlich auch.  :D
Titel: Re: Feld automatisch ausfüllen
Beitrag von: Abacus am Juli 21, 2016, 21:50:22
Vielen Dank an MzKlMu. Ich muss bei VBA noch etwas üben, aber ich denke, dass es so klappen muss. Ich darf nur nicht daran denken, wie einfach so etwas mit FileMaker zu bewerkstelligen ist. Tut manchmal schon etwas weh dieses Access :-)
Titel: Re: Feld automatisch ausfüllen
Beitrag von: Beaker s.a. am Juli 21, 2016, 21:55:09
Hallo Klaus,
Worin besteht denn der Unterschied zwischen
Me.FeldFürBeschrieb = DLookup("Beschrieb","Ordnungsliste","Ordnungszahl =" & Me.Ordnungszahl)
und
Me!FeldFürBeschrieb = Me!cboOZahl.Column(1)

gruss ekkehard
Titel: Re: Feld automatisch ausfüllen
Beitrag von: MzKlMu am Juli 21, 2016, 22:36:28
Hallo,
@ekkehard
so ist natürlich kein Unterschied, ich dachte Du wolltest das als Formel im Feld hinterlegen.
=cboOZahl.Column(1)
Klassisches Missverständnis.
Titel: Re: Feld automatisch ausfüllen
Beitrag von: Beaker s.a. am Juli 21, 2016, 23:04:33
Hallo Klaus,
Zitatich dachte Du wolltest das als Formel im Feld hinterlegen.
Dann hätte ich dieses nicht erwähnt
Zitatohne VBA geht's allerdings auch nicht

ZitatKlassisches Missverständnis.
Passt schon.
Ausdrücke im Steuerelemente-Inhalt verwende ich normalerweise gar nicht.
gruss ekkehard
Titel: Re: Feld automatisch ausfüllen
Beitrag von: Abacus am Juli 21, 2016, 23:21:57
Bin vielleicht doch zu doof für VBA. Ich kriege die Fehlermeldung: "Unzulässige Verwendung des Schlüsselworts Me". Markiert wird dabei das zweite Me. Hier noch mein Code:
Option Compare Database

Sub BKPS()
    Me.rec_bkp_Name = DLookup("bkps_Name", "tbl_BKPS", "bkps_Nr =" & Me.rec_bkp_Nr)
End Sub
Titel: Re: Feld automatisch ausfüllen
Beitrag von: MzKlMu am Juli 21, 2016, 23:42:49
Hallo,
der Code muss in eine Ereignisprozedur wie ich in #2 schon geschrieben habe, nicht als selbständiger Code in ein eigenes Modul.
Private Sub rec_bkp_Nr_AfterUpdate()
  Me.rec_bkp_Name = DLookup("bkps_Name", "tbl_BKPS", "bkps_Nr =" & Me.rec_bkp_Nr)
End Sub


Titel: Re: Feld automatisch ausfüllen
Beitrag von: MaggieMay am Juli 22, 2016, 10:30:03
Hi,

und was das betrifft:
Zitat von: Abacus am Juli 21, 2016, 23:21:57Option Compare Database

Aktiviere die VBA-Option "Variablendeklaration erforderlich" und füge die Zeile "Option Explicit" in alle bereits bestehenden Module ein, das schützt vor unangenehmen Überraschungen bei der Programmierung. ;-)
Titel: Re: Feld automatisch ausfüllen
Beitrag von: Abacus am Juli 22, 2016, 14:54:31
Lieber Klaus

Ich und VBA funktioniert offensichtlich noch nicht so recht. Habe Formular erstellt und dabei folgenden Code als Ereignisprozedur eingegeben:
Option Compare Database

Private Sub bkp_Nr_AfterUpdate()
    Me.bkp_Name = DLookup("bkps_Name", "tbl_BKPS", "bkps_Nr =" & Me.bkp_Nr)
End Sub

Sobald ich in bkp_Nr ein Zahl eingegeben habe, soll Access/VBA in der Tabelle tbl_BKPS bei Übereinstimmung von bkp_Nr und bkps_Nr den Namen bkps_Name nachschlagen und in der offenen Tabelle unter bkp_Name schreiben.

Ist der Hinweis von Maggie relevant oder nice to have? Habe ich nämlich nicht umgesetzt.
Titel: Re: Feld automatisch ausfüllen
Beitrag von: MaggieMay am Juli 22, 2016, 15:02:39
Mein Hinweis bedeutet schon etwas mehr als "nice to have". Setze das um und kompiliere den Code, das verhilft u.U. zu neuen Erkenntnissen.

Und was den Code betrifft, so schreibst du den Namen in ein Formular-Steuerelement und nicht in eine "offene Tabelle".
Das Steuerelement sollte ungebunden sein, der Name muss nicht mehrfach gespeichert werden.
Titel: Re: Feld automatisch ausfüllen
Beitrag von: MzKlMu am Juli 22, 2016, 16:05:21
Hallo,
ZitatDas Steuerelement sollte ungebunden sein, der Name muss nicht mehrfach gespeichert werden.
nein, nicht ungebunden. Und der Name sollte auch in die Tabelle geschrieben werden, denn die Auswahl ist ja nur eine Vorgabe die individuell je Datensatz bei Bedarf änderbar sein soll.
Titel: Re: Feld automatisch ausfüllen
Beitrag von: MaggieMay am Juli 22, 2016, 16:47:38
Sorry, das hatte ich doch glatt inzwischen schon wieder vergessen.  :-[
Titel: Re: Feld automatisch ausfüllen
Beitrag von: Beaker s.a. am Juli 22, 2016, 17:45:29
Hallo abacus,
ZitatIst der Hinweis von Maggie relevant oder nice to have?
Ich halte das schon für relevant. Das ist wirklich ein Feature, das dir bei
der Entwicklung kräftig unter die Arme greift, siehe Maggies Antwort.
Du kannst das automatisch in jedes neue (Klassen)Modul eintragen
lassen indem du folgende Einstellung vornimmst:
Im VBA-Editor: Menu "Extras" -> "Optionen" -> Häkchen setzen bei
"Variablendeklaration erforderlich".

hth
gruss ekkehard