Discussion:
Zugriff auf Formular in Abfrage
(zu alt für eine Antwort)
Christian Nennewitz
2010-06-01 12:06:57 UTC
Permalink
Hallo Newsgroup.

Ich habe mal eine ganz allgemeine Frage. Ist es eigentlich
möglich, in einer Abfrage auf ein Datenfeld oder Steuerelement
eines Formulars zuzugreifen.

Ich habe beispielsweise ein Formular Rechnungen in dem
u.a. eine Rechnungsnummer enthalten ist.

Jetzt möchte ich eine Abfrage machen, die die aktuell im
Formular eingestellte Rechnungsnummer als Kriterium
benutzt.

Ich habe versucht:

SELECT tblRechnungen.* FROM tblRechnungen
WHERE tblRechnungen.RechnungsNr = [forms]![f_rechnungen]![RechnungsNr];

oder ...[Form_F_Rechnungen.RechnungsNr]

Aber nichts scheint zu funktionieren.

Die einzige Möglichkeit die zu funktionieren scheint ist, wenn man eine
Public Funktion erstellt über die man dann auf das Formular zugreift.
Diese kann man dann als Kriterium in der Abfrage benutzen und es
funktioniert.

Aber komisch finde ich, daß der direkte Weg nicht funktioniert oder stimmt
da etwas mit meiner Syntax nicht?

Gruß,
Christian Nennewitz
Karl Donaubauer
2010-06-01 12:20:21 UTC
Permalink
Post by Christian Nennewitz
Ich habe mal eine ganz allgemeine Frage. Ist es eigentlich
möglich, in einer Abfrage auf ein Datenfeld oder Steuerelement
eines Formulars zuzugreifen.
Ich habe beispielsweise ein Formular Rechnungen in dem
u.a. eine Rechnungsnummer enthalten ist.
Jetzt möchte ich eine Abfrage machen, die die aktuell im
Formular eingestellte Rechnungsnummer als Kriterium
benutzt.
SELECT tblRechnungen.* FROM tblRechnungen
WHERE tblRechnungen.RechnungsNr =
[forms]![f_rechnungen]![RechnungsNr];
Syntaktisch ist das korrekt. Ob deine Objekte so heißen,
ob die Datentypen und Daten passen, die Daten im Formularfeld
bereits gespeichert sind etc. kannst nur du wissen bzw. prüfen.
Post by Christian Nennewitz
...
Aber nichts scheint zu funktionieren.
...
Wie drückt sich denn das Nicht-Funktionieren genau aus?
Kommt ein Fehler, keine Daten, falsche Daten...?

Teste auch mal, indem du den Bezug
Forms!f_rechnungen!RechnungsNr
als berechnetes Feld in der Abfrage verwendest, also:

SELECT Forms!f_rechnungen!RechnungsNr, tblRechnungen.*
FROM tblRechnungen

Steht dann der erhoffte Wert in der ersten Spalte der Abfrage?
--
Servus
Karl
****************
http://www.donkarl.com Access-FAQ
http://www.donkarl.com/?aek 13. Access-Entwickler-Konferenz
25./26.09.2010 in Nürnberg, 16./17.10.2010 in Hannover
Christian Nennewitz
2010-06-01 14:12:34 UTC
Permalink
Hallo Karl.
Post by Karl Donaubauer
Teste auch mal, indem du den Bezug
Forms!f_rechnungen!RechnungsNr
SELECT Forms!f_rechnungen!RechnungsNr, tblRechnungen.*
FROM tblRechnungen
Danke es hat jetzt funktioniert. Ich glaube ich habe da irgendwie
den Wald vor Bäumen nicht gesehen. Möglicherweise habe ich
auch die Feld- und Baumnamen durcheinandergebracht.

Danke für Deine Hinweise und vor allem für die Erkenntnis, das
es funktionieren müsste. Ich habe schon ernsthaft daran gezweifelt
das das in Abfragen überhaupt möglich ist.

Vielen Dank und viele Grüße,
Christian
Christian Nennewitz
2010-06-02 06:14:15 UTC
Permalink
Hallo nochmal.

Ich glaube ich habe mich da wohl ein bißchen zu früh gefreut.
Normalerweise funktioniert der Zugriff in einer Abfrage auf ein
Formularfeld mit Ausdrücken wie:

"[forms]![f_rechnungen]![adressnr]" schon. Das ist schon
eine nützliche Erkenntnis.

Was ist aber wenn ein Formular mehrere Felder "Adressnr"
hat, die aus unterschiedlichen, verknüpften Tabellen kommen?

Z.B wenn es ein Feld Adressnummer in der Tabelle Personen gibt
und eines in der Tabelle Adressen?

Im Debug-Fenster kann ich auf das Feld mit der Zeile:

? forms!f_rechnungen![tblAdressen.AdressNr]

zugreifen und erhalte auch den erwarteten Wert, z.B. "23".

Aber in einer Abfrage funktioniert das so nicht. Ich erhalte dann
die Fehlermeldung:
"Unzulässiges Einklammern des Namens
'forms!f_rechnungen![tbladressen.adressnr]'".

Ich habe es auch schon mit "[forms]![f_rechnungen]![tbladressen].[adressnr]"
versucht aber dann denkt Access, daß es sich bei diesem gesamtem Ausdruck
um einen Parameter handelt und fragt ihn ab.

Wie lautet denn hier die Syntax wenn man auf solche nicht-eindeutigen Felder
Bezug nehmen möchte?

Gruß,
Christian Nennewitz
Karl Donaubauer
2010-06-02 06:42:52 UTC
Permalink
Post by Christian Nennewitz
...
Was ist aber wenn ein Formular mehrere Felder "Adressnr"
hat, die aus unterschiedlichen, verknüpften Tabellen kommen?
Z.B wenn es ein Feld Adressnummer in der Tabelle Personen gibt
und eines in der Tabelle Adressen?
? forms!f_rechnungen![tblAdressen.AdressNr]
zugreifen und erhalte auch den erwarteten Wert, z.B. "23".
Aber in einer Abfrage funktioniert das so nicht. Ich erhalte dann
"Unzulässiges Einklammern des Namens
'forms!f_rechnungen![tbladressen.adressnr]'".
...
Wie lautet denn hier die Syntax wenn man auf solche
nicht-eindeutigen Felder Bezug nehmen möchte?
Das gescheiteste wären Aliase in der Herkunftsabfrage des
Formulares. Also statt zweimal "AdressNr" schreibst du dort z.B.
AdrAdressNr: tblAdressen.AdressNr
RgAdressNr: tblRechnungen.AdressNr

In SQL: tblAdressen.AdressNr AS AdrAdressNr

Mit diesen Aliasen kannst du dann sowohl im Formular als
auch in der folgenden Abfrage ohne Doppeldeutigkeiten
oder Syntaxprobleme arbeiten.

Falls du eine gute Ausrede dafür hast, dass du nicht mit
Aliasen arbeiten willst, kannst du in der zweiten Abfrage
zur Not auch so auf diese nicht eindeutigen Feldnamen zugreifen:

Eval("Forms!aaa![tblAdressen.AdressNr]")

Eval() sorgt für die Übersetzung dieser Access-internen Schreibweise
in der Abfrage.
--
Servus
Karl
****************
http://www.donkarl.com Access-FAQ
http://www.donkarl.com/?aek 13. Access-Entwickler-Konferenz
25./26.09.2010 in Nürnberg, 16./17.10.2010 in Hannover
Christian Nennewitz
2010-06-02 07:02:30 UTC
Permalink
Hallo Karl.
Post by Karl Donaubauer
Das gescheiteste wären Aliase in der Herkunftsabfrage des
Formulares. Also statt zweimal "AdressNr" schreibst du dort z.B.
AdrAdressNr: tblAdressen.AdressNr
RgAdressNr: tblRechnungen.AdressNr
In SQL: tblAdressen.AdressNr AS AdrAdressNr
Ja, das sehe ich ein. Das ist wohl wahr.
Post by Karl Donaubauer
Falls du eine gute Ausrede dafür hast, dass du nicht mit
Aliasen arbeiten willst, kannst du in der zweiten Abfrage
Naja, die einzige Ausrede wäre wohl, das ich zu faul wäre irgendwelche
Feldnamen zu ändern und Abhängigkeiten zu testen. :-)
Post by Karl Donaubauer
Eval("Forms!aaa![tblAdressen.AdressNr]")
Eval() sorgt für die Übersetzung dieser Access-internen Schreibweise
in der Abfrage.
Das ist ein super toller Trick! Und es funktioniert auch, ich habe es gerade
getestet. Vielen Dank für Deine immer wieder sehr nützlichen Tips. Die
sind wirklich von unschätzbarem Wert.

Gruß,
Christian Nennewitz

Lesen Sie weiter auf narkive:
Loading...