Neuigkeiten:

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

Mobiles Hauptmenü

DoCmd.OpenForm bzw. OpenArgs seltsames Verhalten

Begonnen von Micharius, April 23, 2020, 16:08:45

⏪ vorheriges - nächstes ⏩

Micharius

Hallo zusammen

In einer bestehenden DB funktioniert der Aufruf eines Formulars mit neuem Datensatz und Übergabe eines Parameters wunderbar:

Quellformular, bleim Klicken eines Btn:
DoCmd.OpenForm "frmDossier", , , , acFormAdd, , Forms!frmUeberblick!lstOpportunities.Column(0)


Zielformular:
Private Sub Form_Load()    'Formularereignis "Beim Laden"
If Not IsNull(Me.OpenArgs) Then Me!txtDosTLOppoIDRef = Me.OpenArgs
End Sub


Das klappt in DB1 wunderbar: Das Formular öffnet sich, durch den übergebenen Parameter (es wir ein neues Dossier für den ausgewählten Kunden eröffnet) sind auch alle Felder bereits ausgefüllt.

Bei einer anderen DB mache ich im Prinzip genau das gleiche:

Quellformular beim Klicken eines Btn:
DoCmd.OpenForm "frmTestform", , , , acFormAdd, , txtTLOppoID

Zielformular
Private Sub Form_Load()
If Not IsNull(Me.OpenArgs) Then Me!txtOppoTLOppoIDRef = Me.OpenArgs
End Sub


Und hier passiert dann folgendes: Das Formular öffnet sich, der korrekte Wert aus dem übergebenen Parameter ist auch schon eingetragen. Alle anderen Textfelder des Formulars bleiben jedoch vorerst leer. Erst wenn ich den Datensatz speichere und wieder öffne, werden alle Daten korrekt angezeigt.

An was könnte das liegen?

Wenn ihr mir weiterhelfen könntet, wäre das super!

Herzlichst,

Micharius

DF6GL

Hallo


was ist denn "txtTLOppoID" ?

welcher Wert steht darin?

was ist "txtOppoTLOppoIDRef" im Testform?

und wie lautet dessen Datensatzherkunft, falls es ein Kombi-/Listenfeld ist.

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

Micharius

Hallo

txtTLOppoID: Textfeld in Unterformular mit Wert aus Tabelle (long). Kann auch diesen in VBA ansprechen, das Resultat ist dasselbe.

txtOppoTLOppoIDRef: Textfeld im Zielformular, entspricht ebenfalls einem Feld Typ Long aus einer Tabelle.

Angehängt ein Screenshot aus dem Beziehungsfenster. Es wird also ein neues Formular geöffnet. Damit macht man Einträge in die tblOpportunity. Durch den OpenArts Parameter wird der FS zur tblOpportunities erstellt.

Aber im Formular zeigt es mir, beim ersten Aufruf des Formulars mit einem neuen Datensatz, weder die Felder aus tblOpportunity, tblTLOpportunities oder tblTLCustomers an. Speichern und wiederaufrufen - dann sind sie da...

Gruss

Micharius

DF6GL

Hallo,

kann nicht folgen...

ZitatDoCmd.OpenForm "frmTestform", , , , acFormAdd, , txtTLOppoID

Hier ist "txtTLOppoID" (Me!txtTLOppoID)  ein Steuerelement (Form-Textfeld) aus dem Formular, in dem dieser Code abläuft.

Vermutlich fehlt ein "Requery" der Formular-Datensätze, wenn die Anzeige der restlichen Daten erst nach dem Speichern/Aufrufen geschieht.
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

ebs17

acFormAdd
=> Eingabeformular, ausschließlich zum Anlegen eines neuen Datensatzes. NEU heißt LEER.
Wenn da etwas angezeigt wird, können das zum einen eingestellte Standardwerte sein. Zum anderen natürlich jene Inhalte, die man durch eigene Aktionen schreibt. Ein Autowertfeld wird dann auch auf geschriebene Inhalte reagieren.
Weiteres ist nicht denkbar. Wenn das trotzdem vorkommt: Datenbank oder besser gleich ganzen Rechner erschießen.
Mit freundlichem Glück Auf!

Eberhard

Micharius

Nun habe ich auch etwas weitergeforscht und herausgefunden, es liegt nicht an VBA...auch wenn ich das Formular händisch öffne und einen neuen Datensatz passiere, geschieht das folgende:

Beim Formular A in Datenbank I wähle ich über ein Kombofeld den entsprechenden Wert einer Tabelle aus, und setze somit den Fremdschlüssel mit Bezug auf diese Tabelle, nennen wir sie tblKunden. Unmittelbar nach diesem Auswählen zeigt mir das Formular in weiteren Textfeldern Werten aus der tblKunden an. Der Datensatz wurde aber noch nicht gespeichert, ich kann jederzeit mit Escape wieder raus pringen.

Beim Formular B in einer anderen DB wähle ich ebenfalls über ein Kombofeld einen Zielwert für einen Fremschlüssel aus, und stelle damit die Verbindung zum Datensatz her. Die Textfelder im Formular bleiben dann jedoch leer, sie werden nicht automatisch befüllt wie bei Formular A. Erst nach dem Speichern und wiederaufrufen der Daten sind sie sichtbar.

Das treibt mich nun fast in den Wahnsinn

ZitatDatenbank oder besser gleich ganzen Rechner erschießen.

Bin kurz davor!


DF6GL

Hallo,

das "Befüllen" geschieht ja nicht automatisch und muss programmiert werden.

Vermutlich werden beim Formular A  die Felder in der After-Update-Prozedur des Kombis durch Zuweisung mit den Werten aus den entspr. Spalten der Kombifeldliste gefüllt.

Diese Prozedur fehlt beim Formular B
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

Micharius

Hallo

Zitatdas "Befüllen" geschieht ja nicht automatisch und muss programmiert werden.

Vielleicht ein Missverständnis - angehängt eine TestDB. Ich meine das so: Wenn du das Formular frmAuftragerfassung öffnest, und einen Kunden auswählst, werden dir doch automatisch die weiteren Textfelder wie Ortschaft und Plz ausgefüllt. Das habe ich gemeint.

Des Rätsel Lösung habe ich nun übrigens gefunden: Das Feld auf den FS der anderen Tablle hatte einen Index darauf und die Option "Eindeutig" aktiviert. Offenbar kann so während der Erstellung eines Datensatzes nicht schon auf Werte zugegriffen werden, welche mit der Ref verbunden sind.

DF6GL

Hallo,

das Missverständnis liegt darin, dass als Datenherkunft eine verjointe Abfrage verwendet wird, was im allgemeinen unüblich ist und eine gewisse latente Fehlerquelle darstellt, bzw. Fehlverhalten erzeugt.





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

Micharius

Zitateine gewisse latente Fehlerquelle darstellt, bzw. Fehlverhalten erzeugt.
Wie man jetzt gesehen hat  :-\

Was wäre dann ein besseres bzw. üblicheres Verhalten, um das sauber hinzukriegen?

DF6GL

Hallo,

klassisch:

Pro Tabelle ein Formular.  Bei 1-n-Konstruktion ein Hfo (Einzelform) mit einem UFO (Endlosform), über die Schlüsselfelder verknüpft.

Stichwort dazu allgemein: Aktualisierbarkeit von verknüpften Abfragen.
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