Discussion:
VBA-Parameterabfrage mit Platzhalter bei Zahlenfeld
(zu alt für eine Antwort)
Alexander Frueh
2007-05-15 13:38:03 UTC
Permalink
Hallo NG,

in meiner DB habe ich eine Parameterabfrage mit zwei Parametern des Typs Long.
Diese Abfrage spreche ich per VBA über QueryDef an und übergebe die
Parameter. Soweit ist mir das auch klar.
Allerdings kann es mal vorkommen, dass nur ein Parameter vorgegeben ist, und
der andere frei ist. Dies möchte ich aber nicht mit einer separaten Abfrage
auffangen, sondern dem "leeren" Parameter einen Platzhalter "*" übergeben.
Da die Parameter allerdings als Zahl erwartet werden, nimmt die Abfrage den
* nicht als WildCard, sondern gibt eine Fehlermeldung aus.
Was muss ich denn als Parameter in diesem Fall übergeben?
Danke für eure Hilfe.

Gruß Alex
Henry Habermacher
2007-05-15 13:53:15 UTC
Permalink
Hallo Alexander
Post by Alexander Frueh
in meiner DB habe ich eine Parameterabfrage mit zwei Parametern des
Typs Long. Diese Abfrage spreche ich per VBA über QueryDef an und
übergebe die Parameter. Soweit ist mir das auch klar.
Allerdings kann es mal vorkommen, dass nur ein Parameter vorgegeben
ist, und der andere frei ist. Dies möchte ich aber nicht mit einer
separaten Abfrage auffangen, sondern dem "leeren" Parameter einen
Platzhalter "*" übergeben.
Da die Parameter allerdings als Zahl erwartet werden, nimmt die
Abfrage den * nicht als WildCard, sondern gibt eine Fehlermeldung aus.
Was muss ich denn als Parameter in diesem Fall übergeben?
Wäre ziemlich vernünftig hier mal die Query herzuzeigen (in der SQL Ansicht,
nur die relevanten Teile).

Ich gehe davon aus, dass man da auch einfach 0 oder -1 (Werte, die in der
Tabelle mit an Sicherheit grenzender Wahrscheinlichkeit nicht vorkommen)
übergeben könnte, wenn man die Parameter dann richtig verwurstelt.

Beispiel:

Parameters
Zahl1 LONG
Zahl2 LONG

Abfrage
SELECT ..
FROM ...
WHERE Feld1=[Zahl1] OR Feld2=[Zahl2]

würde in diesem Fall funktionieren.

Hängt aber ganz von der Query selber ab. Daher: Lüfte das Geheimnis!

Gruss
Henry
--
Keine E-Mails auf Postings in NGs. Danke.
Access FAQ www.donkarl.com
Alexander Frueh
2007-05-15 14:11:02 UTC
Permalink
Hallo Henry,
Post by Henry Habermacher
Wäre ziemlich vernünftig hier mal die Query herzuzeigen (in der SQL Ansicht,
nur die relevanten Teile).
PARAMETERS [ID_Mitarbeiter] Long, [ID_Bereich] Long;
INSERT INTO ...
SELECT ...
FROM tblMA_Bereich
WHERE (((tblMA_Bereich.maber_maID)=[ID_Mitarbeiter]) AND
((tblMA_Bereich.maber_berID)=[ID_Bereich]));

Ich hoffe, das ist knapp genug.
Post by Henry Habermacher
SELECT ..
FROM ...
WHERE Feld1=[Zahl1] OR Feld2=[Zahl2]
Mit der ODER-Verknüpfung allein geht es meines Erachtens aber auch nicht, da
es auch vorkommen kann, dass beide gleichzeitig einen Wert haben.

Gruß Alex
Henry Habermacher
2007-05-15 14:53:11 UTC
Permalink
Hallo Alexander
Post by Alexander Frueh
Post by Henry Habermacher
Wäre ziemlich vernünftig hier mal die Query herzuzeigen (in der SQL
Ansicht, nur die relevanten Teile).
PARAMETERS [ID_Mitarbeiter] Long, [ID_Bereich] Long;
INSERT INTO ...
SELECT ...
FROM tblMA_Bereich
WHERE (((tblMA_Bereich.maber_maID)=[ID_Mitarbeiter]) AND
((tblMA_Bereich.maber_berID)=[ID_Bereich]));
Ich hoffe, das ist knapp genug.
Post by Henry Habermacher
SELECT ..
FROM ...
WHERE Feld1=[Zahl1] OR Feld2=[Zahl2]
Mit der ODER-Verknüpfung allein geht es meines Erachtens aber auch
nicht, da es auch vorkommen kann, dass beide gleichzeitig einen Wert
haben.
WHERE Nz(tblMABereich.maber_maID, 0) = ID_Mitarbeiter
AND Nz(tblMABereich.maber_berID, 0) = ID_Bereich

Nun kannst Du ID_Mitarbeiter oder ID_Bereich als 0 übergeben, wenn Du damit
signalisieren willst, dass diese Felder leer sein sollen.

Falls Du aber, wenn Du z.B. ID_Bereich offen lassen willst, einfach
unabhängig vom Bereich, einfach alle Datensätze mit der ID_Mitarbeiter
zurüchbekommen willst, dann kannst Du Dir zu Nutze machen, dass Du Parameter
NULL setzen kannst. Dann sieht das so aus:

WHERE tblMABereich.maber_maID = Nz(ID_Mitarbeiter, tblMABereich.maber_maID)
AND tblMABereich.maber_berID = Nz(ID_Bereich, tblMABereich.maber_berID)

HTH
Henry
--
Keine E-Mails auf Postings in NGs. Danke.
Access FAQ www.donkarl.com
Alexander Früh
2007-05-16 09:02:02 UTC
Permalink
Hallo Henry,
Post by Henry Habermacher
Falls Du aber, wenn Du z.B. ID_Bereich offen lassen willst, einfach
unabhängig vom Bereich, einfach alle Datensätze mit der ID_Mitarbeiter
zurüchbekommen willst, dann kannst Du Dir zu Nutze machen, dass Du Parameter
WHERE tblMABereich.maber_maID = Nz(ID_Mitarbeiter, tblMABereich.maber_maID)
AND tblMABereich.maber_berID = Nz(ID_Bereich, tblMABereich.maber_berID)
Genau das ist es. Klappt wunderbar.
Vielen Dank.

Gruß Alex

Loading...