Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: Jochen1 am Mai 02, 2016, 19:43:05

Titel: Requery / Registerkarten und Feldreihenfolge
Beitrag von: Jochen1 am Mai 02, 2016, 19:43:05
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

Titel: Re: Requery / Registerkarten und Feldreihenfolge
Beitrag von: MzKlMu am Mai 02, 2016, 19:53:41
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.
Titel: Re: Requery / Registerkarten und Feldreihenfolge
Beitrag von: Jochen1 am Mai 03, 2016, 08:35:30
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
Titel: Re: Requery / Registerkarten und Feldreihenfolge
Beitrag von: MzKlMu am Mai 03, 2016, 08:47:05
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 ?
Titel: Re: Requery / Registerkarten und Feldreihenfolge
Beitrag von: Jochen1 am Mai 03, 2016, 09:03:50
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.
Titel: Re: Requery / Registerkarten und Feldreihenfolge
Beitrag von: MzKlMu am Mai 03, 2016, 09:20:26
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.
Titel: Re: Requery / Registerkarten und Feldreihenfolge
Beitrag von: Beaker s.a. am Mai 03, 2016, 13:47:57
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
Titel: Re: Requery / Registerkarten und Feldreihenfolge
Beitrag von: MaggieMay am Mai 03, 2016, 14:16:22
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.
Titel: Re: Requery / Registerkarten und Feldreihenfolge
Beitrag von: Jochen1 am Mai 03, 2016, 14:28:18
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
Titel: Re: Requery / Registerkarten und Feldreihenfolge
Beitrag von: Jochen1 am Mai 03, 2016, 14:46:57
@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



Titel: Re: Requery / Registerkarten und Feldreihenfolge
Beitrag von: MzKlMu am Mai 03, 2016, 16:05:33
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.
Titel: Re: Requery / Registerkarten und Feldreihenfolge
Beitrag von: Jochen1 am Mai 03, 2016, 17:11:59
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

Titel: Re: Requery / Registerkarten und Feldreihenfolge
Beitrag von: MzKlMu am Mai 03, 2016, 17:34:32
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.
Titel: Re: Requery / Registerkarten und Feldreihenfolge
Beitrag von: Jochen1 am Mai 03, 2016, 19:08:49
Hallo,

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

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

Jochen
Titel: Re: Requery / Registerkarten und Feldreihenfolge
Beitrag von: Beaker s.a. am Mai 03, 2016, 20:14:56
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
Titel: Re: Requery / Registerkarten und Feldreihenfolge
Beitrag von: MaggieMay am Mai 03, 2016, 22:19:52
Hallo,

was das Reihenfolgenproblem betrifft:
Gibt es Unterformulare auf den Registerkarten?
Dann verhält sich das natürlich wieder anders.
Titel: Re: Requery / Registerkarten und Feldreihenfolge
Beitrag von: Jochen1 am Mai 04, 2016, 08:45:54
Hallo Ekkehard,

die erste Registerkarte (Seitenindex 0) besitzt Controls mit der Reihenfolgeeigenschaft "Ja", und andere mit "nein". Es werden aber auch nicht die mit "Ja" angesteuert. Hat u.U. die Eigenschaft "automatisch weiter" etwas damit zu tun (steht auf "nein") ?

@MaggieMay:
Es gibt weitere Registerkarten, eine mit Unterformularen (Seitenindex 3). Allerdings dachte ich, dass die Seitenfolge der Registerkarten in der Reihenfolge von Control zu Control abgearbeitet wird, und a müssen wir erst einmal hinwandern...

Grüße,
Jochen
Titel: Re: Requery / Registerkarten und Feldreihenfolge
Beitrag von: Beaker s.a. am Mai 04, 2016, 17:49:26
Hallo Jochen,
ZitatEs werden aber auch nicht die mit "Ja" angesteuert. Hat u.U. die Eigenschaft "automatisch weiter" etwas damit zu tun (steht auf "nein") ?
Finde ich gerade nicht, meine Register-Controls/-karten haben die nicht.
Hast Du es denn mal mit "Ja" ausprobiert?
Wenn's gar nicht geht, mach's per Code. AfterUpdate des letzten Feldes
Me!NameDesFeldesWoDerCursorHinsoll.Setfocus

gruss ekkehard
Titel: Re: Requery / Registerkarten und Feldreihenfolge
Beitrag von: MaggieMay am Mai 04, 2016, 18:26:33
Hi,

"Automatisch weiter" ist eine Textfeldeigenschaft und die kommt zum Zuge wenn man Eingabemasken definiert hat. Dann springt der Cursor automatisch auf das nächste Feld, wenn die maximale Anzahl Zeichen eingegeben wurde.

ZitatAfterUpdate des letzten Feldes
Exit wäre wohl günstiger, es muss ja nicht immer etwas geändert oder eingegeben werden.
Titel: Re: Requery / Registerkarten und Feldreihenfolge
Beitrag von: Jochen1 am Mai 05, 2016, 11:46:41
Hallo,

sorry für die späte Reaktion und Danke für die Tips.

Das Ereignis "beim Verlassen"

ZitatMe!NameDesFeldesWoDerCursorHinsoll.Setfocus

führt zur Meldung "Das Objekt 'Me!NameDesFeldesWoDerCursorHinsoll' wurde nicht gefunden".

Ich glaube, man muss die Registerkarte ansteuern, ich weiss jedoch nicht wie..:
ZitatMe!NameDerRegisterkarte!NameDesFeldesWoDerCursorHinsoll.Setfocus

klappt aber auch nicht....

Also, es ist kein Beinbruch, wenn es nicht geht, es wäre aber schon komfortabler.
Viele Grüße,
Jochen
Titel: Re: Requery / Registerkarten und Feldreihenfolge
Beitrag von: DF6GL am Mai 05, 2016, 12:01:17
Hallo,

eigentlich sollte ersichtlich sein, dass

NameDesFeldesWoDerCursorHinsoll

durch den Namen des Feldes, wo der Cursor hinsoll, zu ersetzen ist.....   ::)
Titel: Re: Requery / Registerkarten und Feldreihenfolge
Beitrag von: Jochen1 am Mai 05, 2016, 12:12:12
Hallo,

das habe ich selbstverständlich gemacht. Ich wollte bei meiner Antwort lediglich in der verwendeten Terminologie bleiben.

Es funktioniert aber nicht.
Titel: Re: Requery / Registerkarten und Feldreihenfolge
Beitrag von: DF6GL am Mai 05, 2016, 13:10:34
Hallo,

naja, woher soll man das wissen?


Die Fehlermeldung jedenfalls ist authentisch und Access erkennt den verwendeten Steuerelementnamen nicht, was heißt, dass er entweder vertippt ist oder eben gar nicht so heißt, bzw. sich z. B. in einem Unterformular befindet und nicht in dem Formular, in dem der Code aktuell abläuft (---> Me)



Beschreib mal genau, wo sich das ominöse Steuerelement überhaupt befindet , das Register-Steuerelement kannst Du dabei zunächst mal weglassen. 
Titel: Re: Requery / Registerkarten und Feldreihenfolge
Beitrag von: Jochen1 am Mai 05, 2016, 19:52:09
Hallo Franz,

schon klar, auch offenkundige Fehlerquellen müssen ausgeschlossen werden  8).

Das anzusteuernde Feld ist das Textfeld0 (auf der Registerkarte1) im frmDatenerfassung, das auf tblA basiert. Vorher befindet sich der Cursor in  Textfeld15 im Detailbereich des frmDatenerfassung.

Die Textfelder befinden sich in Reihenfolge, Textfeld15 in Reihenfolge15 im Detailbereich des frmDatenerfassung (nach Textfeld15 kommen keine weiteren Felder im Detailbereich, deren Reihenfolgeeigenschaft auf "ja" steht).

Textfeld0 in Reihenfolge "ja" auf Registerkarte1. Wenn ich in Textfeld0 mit dem Cursor bin, geht es zutreffend in der Reihenfolge mit dem nächsten Textfeld auf der gleichen Registerkarte weiter.

Bei der Fehlermeldung ist es aber so, dass bei dem Versuch, die Registerkarte nach Me! und vor dem Steuerelement einzubauen, die Fehlermeldung auch kommt, und Access denkt, die Registerkarte ist das nicht gefundene Steuerelement.

Jeweils der Sprung zu einem Steuerelement auf der Registerkarte und zurück in den Detailbereich des frm funktionieren nicht.

Ich weiss nicht, ob (und wie) ich die Registerkarte bei dem Befehl SetFocus ansprechen muss. Hier fehlt mir leider das Wissen und ich habe es auch nicht in meinen Nachschlagewerken gefunden.

In der Regel kopiere ich die Namen der Steuerelemente, wenn ich sie in eine Formel einbaue, um von Dir vermutete Schreibfehler auszuschliessen, so auch hier.

Vielen Dank und Grüße,
Jochen

P.S: Kann mich erst morgen Nachmittag wieder melden.


Titel: Re: Requery / Registerkarten und Feldreihenfolge
Beitrag von: Beaker s.a. am Mai 05, 2016, 20:34:45
Hallo Jochen,
Die Registerkarte spielt in der Objekthierarchie zwischen HFo und dessen
Controls keine Rolle.
Bleibt nur Franz' Hinweis bezüglich Schreibweise, oder Maggies bezüglich
Unterformular. Wenn das Feld, wo der Cursor hin soll sich auf einem UFo
befindet muss das in der Hierarchie berücksichtigt werden.
gruss ekkehard


P.S. Bin jetzt 8 im Urlaub, und weiss noch nicht wie's da mit Onlinezugang
klappt.
Titel: Re: Requery / Registerkarten und Feldreihenfolge
Beitrag von: Jochen1 am Mai 06, 2016, 14:23:18
Hallo,

danke für die Rückmeldung. Das Steuerelement ist definitiv nicht in einem UFo, und an der Schreibweise kann es auch nicht liegen, werde ich aber nochmal prüfen.

Wie geschrieben, das ist jetzt kein schlimmes Problem, Hauptsache, der Rest funktioniert (nicht zuletzt dank Eurer Unterstützung).

Schönen Urlaub an Ekkehard !

Jochen