Januar 24, 2021, 04:18:17

Neuigkeiten:

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


Welcher Event läuft ab bei Satz neu hinzufügen?

Begonnen von Walterio, Dezember 14, 2020, 11:16:22

⏪ vorheriges - nächstes ⏩

Walterio

Hoi!
In einem Formular (F1) mit Unterformular (uf2) und Unterunterformular (uf3 in uf2) soll durch *-Click im Unterformular uf2 ein neuer Satz in der zugrunde liegenden Tabelle erstellt werden.
Ein Feld im Unterformular uf3 muss (mit einem Argument aus OpenArgs) zuerst gefüllt werden.
Bei welchem Ereignis muss der entsprechende vba-Code stehen?
Vielen Dank im Voraus für die Hilfe.
Walterio

MzKlMu

Hallo,
der Code muss in das Formularereignis "Beim Anzeigen". Innerhalb des Code muss dann geprüft werden, ob das ein neuer Datensatz ist.

If Me.NewRecord = True Then
    ' hier dann der entsprechende Code
End If
Gruß
Klaus

Walterio

Danke. Habe leider Access auf englisch. Welcher Event ist "Beim Anzeigen"?

MzKlMu

Hallo,
das ist "On Current" oder ähnlich, meine ich. Ich habe nur die deutsche Version.
Gruß
Klaus

Walterio


Walterio

Hallo Forum
Muss meine Anfrage umformulieren; dazu die Situation. Es bestehen:
- ein (Haupt-)Formular fSuche, in dem ein Filterkriterium eingegeben werden kann; filtert die Sätze einer Tabelle tDaten
- ein Unterformular ufVerwalten, der alle Daten eines Satzes der Tabelle anzeigt (nur Formularansicht). Enthält ein Registersteuerelement, der auf einer Seite ein Unterformular ufMitarbeiter enthält
- und dieses Unterformular enthält ein weiteres Registersteuerelement (nur so kann ein Register ein weiteres Register enthalten).

Das Problem: Beim Aufruf werden die Lade-Ereignisse zuerst im UF ufMitarbeiter, dann ufVerwaltung und schliesslich im Hauptformular durchgeführt. Das heisst, beim UF ufMitarbeiter habe ich kein Zugang zu den beim Aufruf vom HF angegebenen Argumente (OpenArgs); und eines davon - Probe - muss in ein Feld vom ufMitarbeiter geschrieben werden...

Mit "Me!ufVerwaltung.Form!ufMitarbeiter.Form!Probe.Enabled = False" kann ich Eigenschaften ändern.
Aber mit "Me!ufVerwaltung.Form!ufMitarbeiter.Form!Probe.Value = Argument" kann ich den Inhalt nicht ändern!

Hofe ich habe nicht zu kompliziert das Problem beschrieben. Ich sollte vom Hauptformular aus ein Feld im UnterunterFormular ändern können.

Danke schon mal.
Walterio

Beaker s.a.

Hallo Walter,
Da UFo nun mal standardmässig vor dem HFo geladen werden,
ist es das Beste alles, was vom HFo abhängig ist aus dem
UFo zu entfernen und diese Eigenschaften erst "Beim Laden"
(On Load) des HFo zu setzen.

gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.

Walterio

Danke für deine Antwort, Ekkehard, aber genau dass versuche ich ja zu machen: im HFo ("fSuche") den Wert eines Textfeldes,"Probe",aus dem UUFo ("ufMitarbeiter") zu setzen. Und das geht nicht!

Anders ausgedrückt (zum besseren Verständnis):
"Probe" im UUFo soll unter bestimmte Bedingungen einen bestimmten Wert erhalten. Mit

Me.fSuche.Form.Me.ufVerwalten.Form.ufMitarbeiter.Form.Probe = "Neuer Wert"

erhalte ich die Fehlermeldung 2465 "MS kann das ... angesprochene Feld UUFo-Name nicht finden".
Ich kann das Feld "Probe" im UUFo nicht ansprechen...

Beaker s.a.

Hallo Walter,
So geht das auch nicht. Schau mal hier, wie man ein UFo vom HFo
aus anspricht.
In deinem Fall mit UFo im UFo ist der Bezug folgender
Me.ufVerwalten.Form.ufMitarbeiter.Form.Probewobei
Me = HFo
ufVerwalten = UFo-Control 1. Ebene
.Form = das eingebettete Form (dessen Name erscheint hier nicht, steht in der Eigenschaft "Herkunftsobjekt" des UFo-Controls)
ufMitarbeiter = UFo-Control 2. Ebene
.Form = das eingebettete Form (siehe UFo 1. Ebene)
Probe = Textfeld-Control im untersten UFo

gruss ekkehard

P.S.: Das musst du verinnerlichen, ist Basic und brauchst du immer wieder.
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.

Walterio

Danke für die Antwort, aber...
Hier der Code im HFo fSuche:
With Me.ufVerwaltung.Form.ufMitarbeiter.Form.Probe
                .Enabled = False
                .Locked = True
                .Visible = 0
                .Value = ProbeWert
            End With
der bei der Zeile "value..."  "Laufzeitfehler '2448' Sie können diesem Objekt keinen Wert zuweisen." liefert.

Ich habe auch im Direktbereich die Eigenschaften Enabled und Locked (in der Annahme es liegt daran) anders gestellt (was ohne Mucksen ging), doch wenn ich dann im Direktbereich "Me.ufVerwaltung.Form.ufMitarbeiter.Form.Probe = ProbeWert" ausführe, erhalte ich den "Laufzeitfehler '440'" mit der gleichen Meldung.
???

DF6GL

Hallo,

1) die Formulare enthalten nicht aktualisierbare Abfragen, bzw. falsch eingestellte Recordsets.

2) Die angegebenen Namen stimmen nicht mit der Realität überein.

Zudem ist äußerst fragwürdig, warum ein Wert aus dem HFO in einen DS (und da in welchen?)  im UUFO übergeben, bzw. geändert werden soll...?


Lad die DB mal hier hoch, repariert/komprimiert und gezippt.


Walterio

Dezember 21, 2020, 13:54:57 #11 Letzte Bearbeitung: Dezember 21, 2020, 14:18:05 von Walterio
Hallo Franz, Danke für deine Antwort.

Zum 3. Punkt: Es geht um die Verwaltung einer Tabelle, welche auch mit einem Parameter (die "Probe") von einem anderen Formular aufgerufen werden kann. In diesem Fall wird ein Filter angewendet, so dass nur Sätze für diese Probe bearbeitet werden können. Und eben auch neue Datensätze (per Befehlsschaltfläche oder wenn der Filter leer ist) generiert werden, exklusiv für diese Probe (darum das Sperren vom Probenfeld).

Tabellen, Formulare und Aufruf-Makro in angehängter DB.Sie dürfen in diesem Board keine Dateianhänge sehen.

DF6GL

Hallo,

die richtige (Kurzschreibweise-)Syntax lautet:

ZitatMe!KVP_Verwaltung!ufKVP_Mitarbeiter!Probe = <<irgendeinWert>>
wenn der Code im HFO (KVP_Suche) in einer Ereignisprozedur ausgeführt wird.


Du solltest auf die richtige Schreibweise der Steuerelemente-Namen achten.


Zudem:

M. E. ist die DB noch lange nicht soweit, als dass man schon Formulare und Ablaufsteuerung aufbauen könnte.


1) Verzichte auf Sonderzeichen in Objekt-Namen (hier Tabellennamen)
2) Normalisiere die Tabellen und setze sie in Beziehung zueinander.(siehe u. st. Links 1, 1a und 1b). Betreibe zuvor eine Datenanalyse, inwieweit die Daten überhaupt zusammengehören.
3) Benenne Tabellenfelder eindeutig über alle Tabelle gesehen hinweg und nutze (überall) sinngemäße und aussagekräftige Bezeichnungen.
4) Das HFO an sich ist komplett überflüssig und damit eine mehrfache Schachtelung von Formularen unnötig.
5) Das "UUFO" ist sinnlos, weil die Datensatzherkunft die gleiche Tabelle wie das "UFO" besitzt. Auf der Registerseite können gleich die Felder selber platziert werden.
6) Schreibe in ALLE Modulköpfe im VBA Editor "Option Explicit" unter "Option Database". und kompiliere den Code anschließend. Alle auftretenden Fehler müssen eliminiert werden.
7) Vermeide Makros. Allenfalls sind Autoexec und Autokeys brauchbar.




MzKlMu

Hallo,
ich auch noch, zur Unterstützung von Franz.  ;D
Die DB bedarf der Überarbeitung, die ist so nicht brauchbar.
Das beginnt schon bei den Wertelisten (statt Wertelisten sind Tabellen anzulegen) für die Kombinationfelder und endet nicht bei der Optionsgruppe, die so auch falsch ist. Eine Optiongruppe speichert die Zahl, da wird nicht per VBA die Zahl in Text umgewandelt, das macht man viel einfacher per Abfrage.

Es sollten unbedingt auch Beziehungen über Schlüsselfelder angelegt werden, da werden dann auch noch viele Ungereimtheiten auffallen.

Wenn die DB mit korrekter Struktur angelegt ist, dürften 80% des VBA Codes ersatzlos entfallen.
Gruß
Klaus

Walterio

Dezember 28, 2020, 12:36:01 #14 Letzte Bearbeitung: Dezember 28, 2020, 12:41:11 von Walterio
Hallo Klaus, hallo Franz

Danke für eure guten Ratschläge.
Habe beschlossen, das Unterformular zu töten und die im UUF untergebrachten Register ins UF zu stellen.
Werde noch mit dem Nachvollziehen eurer Hinweise eine Weile zu tun haben...

Danke für eure Mühe. Es ist ein tolles Forum!
Gruss
Walterio

P.S. Wo sind den die Knöpfe "sag Danke" und "Thema gelöst"?