Neuigkeiten:

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

Mobiles Hauptmenü

Requery / Registerkarten und Feldreihenfolge

Begonnen von Jochen1, Mai 02, 2016, 19:43:05

⏪ vorheriges - nächstes ⏩

Jochen1

Hallo,

ich habe gleich zwei neue Fragen und benötige Eure Hilfe:

a) Requery einer Abfrage

Ich habe ein frmDatenerfassung, das auf der tblDaten beruht. Das frmDatenerfassung wird für die Neuerfassung eines Datensatzes als "neuer Datensatz" geöffnet. In einer der Registerkarten dieses frmDatenerfassung sind Daten in entsprechende Felder der tblDaten einzutragen. Diese Daten werden in der qryBerechnung verwendet. Die Ergebnisse aus den Berechnungen der qryBerechnung werden im frmDatenerfassung (für die bereits vorhandenen Datensätze der tblDaten) über die Funktion DomWert dargestellt.

Nun möchte ich in diesem neuen Datensatz diese Berechnungen aber aktualisiert über DomWert darstellen, nachdem die Daten des neuen Datensatzes in ein Feld ("FELD") eingegeben worden sind und man mit dem Cursor in das nächste Feld weiterspringt.

Das frmDatenerfassung muss mit diesem neuen Datensatz für weitere Eingaben geöffnet bleiben.

Ich habe mit Requery experimentiert:
ZitatPrivate Sub FELD_Exit (Cancel as Integer)
    RecordSource = "qryBerechnung"
    Me. Requery
End Sub

Momentan wird wg. "Me.Requery" das frmDatenerfassung neu geöffnet, aber mit allen Datensätzen der tblDaten. 

Eigentlich muss ja nur die qryBerechnung aktualisiert werden. Hat jemand einen Tip, wie ich das umformulieren muss ? Der Befehl "qryBerechnung.Requery" führt leider zu einer Fehlermeldung ("Objekt erforderlich").

ZitatPrivate Sub FELD_Exit (Cancel as Integer)
    RecordSource = "qryBerechnung"
    qryBerechnung.Requery
End Sub

Wie muss ich das umformulieren ?

b) Reihenfolge der Felder

In dem frmDatenerfassung gibt es Felder "Grunddaten" oberhalb von Registerkarten des frm, und andere Felder, die in Registerkarten zu befüllen sind. Wie kann ich in der Bestimmung der "Reihenfolge" der Felder innerhalb des frm von einem Feld der Grunddaten in Feld einer bestimmten Registerkarte "springen" (und zurück) ?

Vielen Dank für die Hilfe bei meinen Fragen, ich hoffe, sie sind verständlich.

Danke und Grüße,
Jochen

_______________
Access 2010

MzKlMu

#1
Hallo,
ich möchte bezweifeln, dass hier DomWert sinnvoll ist. Wenn das Formular "frmDatenerfassung" an die Abfrage "qryBerechnung" gebunden wird, statt an die Tabelle direkt, sollte sich das Formular vollkommen automatisch nach verlassen des Datensatzes aktualisieren. Code braucht es dazu keinen, keinen Buchstaben.
Zumal Du ja dem Formular die Abfrage zuzuweisen versuchst. Was dann natürlich auch überflüssig ist.

Die Reihenfolge der Felder kannst Du in den Eigenschaften einstellen. Die Registerseiten spielen dabei keine Rolle.

Übrigens, wenn man in einer Datenbank Domwert benötigt, ist das Vorhaben meist anzuzweifeln. In einer korrekt aufgebauten DB ist zur Darstellung von Daten aus Tabelle/Abfragen kein Domwert von Nöten.
Gruß Klaus

Jochen1

Hallo Klaus,

danke für die Antwort.

Das frm ist bereits an die tbl gebunden. Ich hatte nach den Hinweisen von Euch wegen der Nichtänderungsmöglichkeit der Felder die Umstellung weg von der Bindung an eine (gruppierte) qry hin zur tbl vorgenommen. Dies wirft eben dieses neue Problem auf. Ich muss diese Berechnungen durchführen und im frmDatenerfassung anzeigen, und der Datensatz soll nicht verlassen werden.

Da diese Berechnungen auch an anderer Stelle weiterverwendet werden, führe ich sie in einer Abfrage (zusammen mit allen anderen Berechnungen) aus und nehme sie nicht im Formular vor, um die Werte nicht doppelt berechnen zu lassen (und Fehleranfälligkeit zu reduzieren). Das mit dem DomWert stellt für mich eben den "eleganten" Workaround (nach Bindung des Formulars an die tbl) dar. Ansonsten ist auch alles mit tbl und qry aufgebaut.

Vielleicht hast Du ja doch noch einen Tip für die Kommandozeile für mich, wäre prima.

Möglicherweise geht es auch mit einem berechneten Feld in der Tabelle (seit Access 2010), aber das habe ich noch nicht ausprobiert -und dann müsste ich den Teil quasi neu machen.

Danke für den Hinweis mit der Reihenfolge -das funktioniert aber leider nicht, der Curser springt nicht in das Feld der Registerkarte, trotz aufeinanderfolgender Numerierung in den Eigenschaften.

Grüße,
Jochen
_______________
Access 2010

MzKlMu

Hallo,
ich halte das Vorgehen nach wie vor für falsch. Es stellt sich die Frage, ob hier überhaupt eine gruppierte Abfrage notwendig ist. Hauptformular mit Unterformular wäre hier wahrscheinlich besser geeignet.
Ich bin der Überzeugung, dass Du das komplette Konzept überdenken musst.
Kannst Du mal ein Bild des Beziehungsfensters posten ?

Sind auf den Registerkarten Unterformulare ?
Gruß Klaus

Jochen1

Hallo,

das Ganze ist Bestandteil eines mittlerweile komplexeren Wesens. Die gruppierte Abfrage steht in einem anderen Zusammenhang. Ich habe sie -nach Eurer Empfehlung- ersetzt durch Unterformulare, in einer anderen Registerkarte des frmDatenerfassung. Das funktioniert mittlerweile.

Die hier in Frage stehende qryBerechnung ist eine andere als die gruppierte qry. Ich möchte es eigentlich einfach lassen und nicht noch ein Unterformular einfügen, zumal ich dort keine anderen Daten eingeben würde als im frmDatenerfassung. Das erhöht die Komplexität noch weiter und ist in diesem Fall m.E. nicht besser geeignet.

Es muss doch möglich sein, aus einem Formular heraus eine Abfrage zu aktualisieren (ohne dass ich nun die ganze Struktur umbaue), auch wenn es vielleicht aus Deiner Sicht nicht ganz optimal ist ?

Auf der in Frage stehenden Registerkarte wegen der Reihenfolge befindet sich kein Unterformular.
_______________
Access 2010

MzKlMu

#5
Hallo,
Du schreibst die Abfrage für die Berechnung beruht auf der Tabelle Daten.
Dann musst Du doch dieser Abfrage nur die Felder die auf dem Formular notwendig sind hinzufügen und diese Abfrage als Datenquelle verwenden. Mehr braucht es nicht. Da muss nicht umstrukturiert werden. Und die Aktualisierung erfolgt automatisch.

Ich denke, Du willst hier Sachen programmieren, die man nicht braucht.

Warum zeigst Du nicht mal ein Bild des Beziehungsfensters ?

Was die Reihenfolge betrifft, so wird diese wie gesagt einfach als Zahl (0-X) in die Eigenschaften eingetragen. Wenn das nicht nach Deinen Wünschen klappt, so machst Du einen Fehler. Die Registerseiten spielen dabei keine Rolle.
Gruß Klaus

Beaker s.a.

Moin,
ZitatWas die Reihenfolge betrifft, so wird diese wie gesagt einfach als Zahl (0-X) in die Eigenschaften eingetragen. Wenn das nicht nach Deinen Wünschen klappt, so machst Du einen Fehler. Die Registerseiten spielen dabei keine Rolle.
Irgendwie schon, die haben nämlich alle eine eigene Nummerierung von
0-x. Der Focus geht vom letzten Control des Detailbereiches (x) zum
ersten Control (0) auf der ersten Registerkarte (0).
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

MaggieMay

Hi,

nur zur Ergänzung:
Zitat von: Beaker s.a. am Mai 03, 2016, 13:47:57Der Focus geht vom letzten Control des Detailbereiches (x) zum
ersten Control (0) auf der ersten Registerkarte (0).
...und vom letzten Control auf der Registerkarte zum ersten Control auf der nächsten Registerkarte.
Freundliche Grüße
MaggieMay

Jochen1

Hallo,

@Klaus:

ich verstehe schon, was Du meinst und ich versuche ja die Ratschläge umzusetzen. Vielleicht habe ich mich missverständlich ausgedrückt.

Es ist so, dass in dem frmDatenerfassung (mit der tblDaten) mit dem neuen Datensatz die Aktualisierung der in diesem frm eingegebenen Daten in der qryBerechnung auch berechnet werden. Sie werden auch in das frmDatenerfassung zurückgespielt, aber erst, wenn ich die Registerkarte verlasse und wieder zu dieser zurückwechsele. Hier liegt wwahrscheinlich das Problem, denn es aktualisert nicht.

Ich möchte jedoch diesen manuellen Wechselvorgang vermeiden und nach dem Befüllen des letzten Feldes automatisch eine Aktualisierung der Abfrage anstossen, damit die berechneten Daten in dieser Registerkarte (mit DomWert) in diesem neuen Datensatz angezeigt werden. Ich brauche also eine Art "refresh" der Abfrage im Hintergrund....

Das Beziehungsfenster zu posten bringt jetzt m.E. keine neue Erkenntnis, den die Beziehungen sind doch übersichtlich:

tblDaten > frmDatenerfassung (neuer Datensatz)
tblDaten > qryBerechnung (>frmDatenerfassung in diesen neuen Datensatz mit DomWert("Feld";"qryBerechnung").

Mir fehlt doch eigentlich nur die Programmzeile, um die qryBerechnung aus der Registerkarte des frmDatenerfassung heraus zu aktualisieren. Wie muss ich denn das Objekt definieren ?


@MaggieMay:
Danke für diesen Tip, ich werde das Formular dahingehend überprüfen und die Registerkarte an die letzte Zahl des Detailbereichs anschliessen.

Dein Beitrag von 14:16 hat gerade meine Vermutung überflüssig gemacht, danke, Du konntest meine Gedanken lesen, während ich das geschrieben habe  :D
Es ist vermutlich dann auch so, dass nach dem Focus des letzten Control auf der ersten Registerkarte (0) in der Reihenfolge dann zum ersten Control (0) der nächsten Registerkarte (1) gewechselt wird ?

Vielen Dank und Grüße,
Jochen
_______________
Access 2010

Jochen1

@MaggieMay:

So, ich habe es ausprobiert. Es funktioniert leider nicht. Der Cursor springt nach dem letzten Control des Detailbereichs zwar auf die Registerkarte, aber nur auf deren Titel und unterlegt ihn. Beim nächsten Click dann zurück auf den Control (0) des Detailbereichs. Das Eigenschaftenblatt der Registerkarte erlaubt auch keine Einstellungen hinsichtlich Reihenfolge.

Gruss,
Jochen



_______________
Access 2010

MzKlMu

Hallo,
Du hast es nicht verstanden.
Du hast doch eine Abfrage "qryBerechnung" die wiederum auf Werten der Tabelle "tblDaten" beruht. In diese Abfrage (mit der Berechnung) fügst Du alle Felder der Tabelle "tblDaten" ein, Du auf dem Formular benötigst. Und diese Abfrage nimmst Du als Datenquelle für das Formular. Mehr braucht es nicht. Auch DomWert wird dann völlig überflüssig.

ZitattblDaten > frmDatenerfassung (neuer Datensatz)
tblDaten > qryBerechnung (>frmDatenerfassung in diesen neuen Datensatz mit DomWert("Feld";"qryBerechnung").
Sorry, aber das sind doch keine Beziehungen. Beziehungen bestehen zwischen Tabellen und nur zwischen Tabellen. Hast Du nur diese eine Tabelle ?

Ich behaupte nach wie vor, dass Du Dir das viel zu kompliziert machst. Das ist ganz einfach ohne VBA.

Kannst Du mal eine kleine Beispieldb erstellen (mit einigen Beispieldatensätzen) und diese hier hochladen.
Ich benötige aber eine MDB (Access2003 Version), ich habe nichts anderes.
Gruß Klaus

Jochen1

Hallo Klaus,

danke für Deine Geduld. Das Grundprinzip verstehe ich schon, ich lerne auch dazu.

Ich hatte früher das frm an eine Abfrage gebunden. Das funktionierte aber nicht mehr, weil ich eine gruppierte Abfrage benötigt habe, aber dann Änderungen an den Datensätzen nicht mehr möglich sind. Daher habe ich das frm an die (eine)tbl gebunden, entsprechend Deines vorherigen Ratschlags, mit den entsprechenden Folgethemen. Weitere Tabellen sind über Unterformulare eingebunden, aber für die Problemstellung nicht relevant.

Die tblDaten enthält Felder, deren Werte erst durch die -gruppierte- qryBerechnung ermittelt und befüllt werden; ansonsten besitzen sie einen Standardwert von 0. Daher müssen erst Berechnungen durchgeführt werden. Dies geschieht in der qryBerechnung. Und nun muss ich eben diese Berechnungen in das frm bekommen.

Daher bin ich über den Weg der DomWert einer Abfrage gegangen. Das mag umständlich sein, ja, aber ich habe nun die (einfache) Lösung für mein Problem:

Das letzte Feld im frm vor Auslösung der Berechnung enthält nun ein Makro in den Eigenschaften/Ereignisse "bei Fokusverlust" mit dem Inhalt "AktualisierenDatensatz". Das dauert zwar gefühlt ein paar Sekunden, aber die Berechnung wird ausgeführt und die Werte werden angezeigt. Jetzt klappt es reibungslos.

Ich werde mich aber einmal mit den berechneten Feldern in einer Tabelle auseinandersetzen -vielleicht kann ich meine DB vereinfachen. Evtl. muss ich auch meine qryBerechnung zerteilen, aber ich habe immer alles gerne in einer "Masterberechnung".

Jetzt muss ich noch das mit der Feldreihenfolge und dem Übergang in die Registerkarte lösen.

Danke und Grüße,
Jochen

_______________
Access 2010

MzKlMu

Hallo,
ZitatIch werde mich aber einmal mit den berechneten Feldern in einer Tabelle auseinandersetzen
lasse es sein. Berechnete Felder in Tabellen sind nicht zu empfehlen. Das kannst Du auf die gleiche Art in Abfragen übersichtlicher machen.
Gruß Klaus

Jochen1

Hallo,

danke für den Hinweis; also spare ich mir die Arbeit.

Vielen Dank für die Unterstützung und die Geduld !

Jochen
_______________
Access 2010

Beaker s.a.

Hallo Jochen,
ZitatDer Cursor springt nach dem letzten Control des Detailbereichs zwar auf die Registerkarte, aber nur auf deren Titel und unterlegt ihn. Beim nächsten Click dann zurück auf den Control (0) des Detailbereichs.
Dann haben alle Controls auf der Registerkarte in der Eigenschaft
"In Reihenfolge" ein Nein. Hast Du das mal überprüft?
ZitatDas Eigenschaftenblatt der Registerkarte erlaubt auch keine Einstellungen hinsichtlich Reihenfolge.
Diese Eigenschaft hat nur das Register-Control und die Controls auf den
Karten. Die Karten haben nur die Eigenschaft "Seitenindex", die die
Anzeige-Reihenfolge bestimmt.
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)