Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Zugriff auf Formular in Abfrage

244 views
Skip to first unread message

Christian Nennewitz

unread,
Jun 1, 2010, 8:06:57 AM6/1/10
to
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

unread,
Jun 1, 2010, 8:20:21 AM6/1/10
to
Christian Nennewitz wrote:
> 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];

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.

> ...


> 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

unread,
Jun 1, 2010, 10:12:34 AM6/1/10
to
Hallo Karl.

> 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

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

unread,
Jun 2, 2010, 2:14:15 AM6/2/10
to
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

unread,
Jun 2, 2010, 2:42:52 AM6/2/10
to
Christian Nennewitz wrote:
> ...

> 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]'".
> ...

> 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

unread,
Jun 2, 2010, 3:02:30 AM6/2/10
to
Hallo Karl.

> 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.

> 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:

Naja, die einzige Ausrede w�re wohl, das ich zu faul w�re irgendwelche
Feldnamen zu �ndern und Abh�ngigkeiten zu testen. :-)

> 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


0 new messages