A97: SQL, Probleme mit Where-Klausel

Hallo
Ich möchte die Bedingung einer Where-Klausel aus einem Steuerelement eines Formulars beziehen.
SQLAusdruck = „SELECT * FROM MeineTab WHERE [ID]= ???“
Kennt hier Jemand die richtige Schreibweise in der Where-Klausel?
Bei meinen Versuchen bekomme ich die Laufzeitmeldung 3061 gezeigt … es wurde zuwenig Parameter übergeben.
Was soll ich tun?
Danke in Voraus
Gruss Georg

Am besten setzt du die SQL dynamisch zusammen:

"SELECT * FROM MeineTab WHERE [ID]= " & Me!ID

Man kann den Formularbezug auch statisch einbauen

„SELECT * FROM MeineTab WHERE [ID]= Forms!MeinFormular!ID“

Ich rate davon allerdings ab:
http://www.spotlight.de/static-archive/2000/msa/msa-…

Reinhard

Hallo Reinhard!
Das ist so eine Sache, wenn man an einer Datenbank Veränderungen vornehmen muß, die über einen längeren Zeitraum zusammengefummelt wurde.
Leider muß ich mein Problem erläutern.
Es geht um einen Report.
Am Report sind zwei Tabellen beteiligt:
Die Stammtabelle, die durch ein Datum gefiltert wird und die eigentlichen Daten liefert (kein Problem) und eine Art Definitionstabelle, die die ControlSource für die jeweiligen Elemente im Report liefert.
Es gibt etwa 70 Felder in der Stammtabelle, von denen individuell nur etwa 10 im Report erscheinen sollen.
Datum und Report- Art (Ensemble der 10 Felder) soll nun der Benutzer selbst einstellen können.
Hier fällt mir keine andere Lösung ein als dies per Formular einzustellen.
Probleme breitet mir nur das Filtern der Definitionstabelle, hier bekomme ich also Fehlermeldungen.
In meiner Prozedur steht folgendes:
SQL_Ausdruck= „SELECT * FROM MeineTab WHERE [ID]= Forms!MeinFormular!ID“ Also die ID für da gewünschte Ensemble.
weiter geht’s mit:
Set TabDef = db.OpenRecordset(SQL_Ausdruck)
Und hier bleibt mir die Kiste stehen.
Nehme ich die Where-Klausel raus, läuft es durch.
Wo ist da der Fehler?
Ist etwa OpenRecordset falsch?
Nochmals Danke!!!
Gruß, Georg
Übrigens, natürlich hast Du recht, Dein Artikel trifft den Nagel auf den Kopf, habe ich alles schon erlebt!!!

Der Ausdruck:

SQL_Ausdruck= „SELECT * FROM MeineTab WHERE [ID]= Forms!MeinFormular!ID“

gibt nur Sinn, wenn sichergestellt ist, dass das Formular auch geladen ist und das Formularfeld nicht Null ist. Wenn du den Ausdruck ohnehin gleich verwendest (also nicht statisch zuweist), ist auf jeden Fall die Variante:

SQL= "SELECT \* FROM MeineTab"
If FrmIsLoaded("MeinFormular") then
 If Not Isnull(Forms!MeinFormular!ID) then
 SQL = SQL & " WHERE [ID]= " & Forms!MeinFormular!ID
 end if
end if 
 
'bzw., wenn es sich um das aktuelle Formular handelt:
If Not Isnull(Me!ID) then \_ 
 SQL = SQL & " WHERE [ID]= " & Me!ID 
 
' im Openrecordset solltest du den Parameter dbOpenDynaset verwenden
' (bzw. dbOpenSnapshot, wenn das Recordset nur gelesen wird)
' aber das ist nicht der derzeitige Fehler: 
Set RS = DB.Openrecordset(SQL, dbopendynaset) 

Ansonsten nimm doch mal die resultierende SQL über die Zwischenablage in die SQL-Entwurfsansicht des Abfrageeditors - der sagt dir dann schon, was fehlt!

Reinhard