Discussion:
Datenherkunft eines Formulars erst beim Öffnen festlegen
(zu alt für eine Antwort)
Andreas Schimpf
2005-02-24 13:36:46 UTC
Permalink
Hallo Leute,
ich habe ein Formular, in wo über Eingabefelder einige Parameter eingegeben
werden. Im Prinzip handelt es sich um eine Abfrage. Nun möchte ich, dass per
Button diese Daten an ein Formular oder einen Bericht übergeben werden und
dieser die Abfrage mit diesen Parametern ausführt.
Das Problem: Die Wherecondition in DoCmd.OpenForm kriege ich irgendwie nicht
hin, da in der Abfrage ein INNER JOIN, also eine Verknüpfung zu einer
anderen Tabelle enthalten ist. Wie geht so etwas?
Oder einfacher:
Besteht eine Möglichkeit, dem Formular den kompletten funktionieren
SQL-String als Datenquelle zu übergeben und dann zu öffnen?

Beste Grüße
Andreas
Lutz Uhlmann
2005-02-24 13:51:51 UTC
Permalink
Hallo Andreas ...

Du kannst mit
Me.RecordSource = "SELECT ...."
Me.Requery
die Datenherkunft in deinem Formular ändern..

MhG Lutz
Olaf Rabbachin
2005-02-24 18:25:57 UTC
Permalink
Hi,
Post by Lutz Uhlmann
Du kannst mit
Me.RecordSource = "SELECT ...."
Me.Requery
die Datenherkunft in deinem Formular ändern..
das Requery ist in diesem Fall vollkommen überflüssig, da über das Setzen
der RecordSource (das gilt analog auch z.B. für eine Listbox, für die die
RowSource-property gesetzt wird) die Daten gezogen werden. Du holst sie
somit zweimal ab.

Bis dann,
Olaf [MVP]
--
Bitte keine emails auf NG-postings.

My .02: www.Resources.IntuiDev.com
Lutz Uhlmann
2005-02-25 07:06:15 UTC
Permalink
Post by Olaf Rabbachin
Hi,
das Requery ist in diesem Fall vollkommen überflüssig, da über das Setzen
der RecordSource (das gilt analog auch z.B. für eine Listbox, für die die
RowSource-property gesetzt wird) die Daten gezogen werden. Du holst sie
somit zweimal ab.
Siehst du ... wieder was gelernt !!! Hab mich nie so intensiv damit
beschäftigt, da ich in der Mehrheit C++ code.
Ich sag mal artig danke und werd das bei Gelegenheit in meinen Projekten mal
anpassen ...

MhG Lutz

Andreas Schimpf
2005-02-24 19:49:06 UTC
Permalink
Also die Verwendung von Me.RecordSource hatte ich auch schon erwogen.
Aber:
Anweisung in Form 1:
stSQL= "SELECT .... FROM ... INNER JOIN ... WHERE Feld1=" & steuerelement &
";"

Wie kann ich aus Form 2 auf die Variable stSQL des Form 1 zugreifen?
Mit Forms![Form 1]!stSQL geht es nicht, weil Access ein Feld erwartet.
Schreibe ich den String in ein Feld, kriege ich wieder einen Fehler. (Access
kann das Feld nicht finden)
Post by Lutz Uhlmann
Hallo Andreas ...
Du kannst mit
Me.RecordSource = "SELECT ...."
Me.Requery
die Datenherkunft in deinem Formular ändern..
MhG Lutz
Olaf Rabbachin
2005-02-24 22:51:52 UTC
Permalink
Hi,
Post by Andreas Schimpf
Also die Verwendung von Me.RecordSource hatte ich auch schon erwogen.
stSQL= "SELECT .... FROM ... INNER JOIN ... WHERE Feld1=" & steuerelement &
";"
Wie kann ich aus Form 2 auf die Variable stSQL des Form 1 zugreifen?
Mit Forms![Form 1]!stSQL geht es nicht, weil Access ein Feld erwartet.
Schreibe ich den String in ein Feld, kriege ich wieder einen Fehler. (Access
kann das Feld nicht finden)
entweder du spendierst dem Formular eine property ...

Option ...

private mstrSQL as string

public property get mySQL as string
mySQL = mstrSQL
end property
' Form-Code ...

... die du dann von aussen abfragen kannst, oder du schreibst den
SQL-string einfach in eine (unsichtbare) Textbox und fragst ihn von dort
ab. Aber - wenn du den SQL-string für die RecordSource deines Formulars
verwendest, kannst du dies doch ebenso auslesen.

Bis dann,
Olaf [MVP]
--
Bitte keine emails auf NG-postings.

My .02: www.Resources.IntuiDev.com
Gottfried Lesigang
2005-02-24 22:43:35 UTC
Permalink
Hallo Andreas!
Post by Andreas Schimpf
ich habe ein Formular, in wo über Eingabefelder einige Parameter eingegeben
werden. Im Prinzip handelt es sich um eine Abfrage. Nun möchte ich, dass per
Button diese Daten an ein Formular oder einen Bericht übergeben werden und
dieser die Abfrage mit diesen Parametern ausführt.
Das Problem: Die Wherecondition in DoCmd.OpenForm kriege ich irgendwie nicht
hin, da in der Abfrage ein INNER JOIN, also eine Verknüpfung zu einer
anderen Tabelle enthalten ist. Wie geht so etwas?
Mehrere Wege:

1) Bei "DoCmd.OpenForm" kannst du in den weiteren Parametern als "Filter"
einen kompletten SQL-String mitgeben, das soll allerdings buggy sein.

2) Unter "Where" kannst du den "Where-Teil" deiner Abfrage mitgeben (ohne
das Wort "Where")

3) Unter "OpenArgs" kannst du beliebige String-Infos übergeben, die du dann
in Form_Open mit Me.OpenArgs auswerten kannst. Also auch deinen SQL-String,
den du dort einfach Me.Recordsource zuweist.

4) Du kannst mit

CurrentDb.QueryDefs("NameDerZugrundeliegendenAbfrage").SQL="BlaBla"

den SQL-Text der dem Formular zugrundeliegenden Abfrage direkt setzen und
dann das Formular öffnen

5) Du kannst eine parametrisierte Abfrage verweden.

Such dir was aus!

HTH
Gottfried
Loading...