Access 2003 Abfragen

DiddiGSB

Mitglied
Hallo ihr Meister der Programmierung. :)



Ich möchte einen Bericht erstellen.

Ich habe in einem Formular mehrere Kombi-Felder die dann nach
Auswahl der Kombifelder einen Bericht aufrufen sollen. (Bericht wird per KLICK aufgerufen.

Die Felder die ausgewählt werden sollen nenn ich mal.

Datum

Kennnummer

Preis

Lieferdatum

Produktname

usw.



In einer Abfrage könnte man es ja so machen.


Datum betwen frm bla bla bla und frm bla bla bla

Kennnummer Like frm bla bla bla

Preis Like frm bla bla bla

Lieferdatum betwen frm bla bla bla

Produktname like frm bl bla bla





Wie kann ich jetzt aber der Abfrage beibringen:


Wenn im Kombifeld kein Preis steht, soll er alle Preis nehmen, oder

wenn im Kombifeld Kennnummer keine Kennnummer steht soll er alle Kennnummern nehmen.
 
Moin DiddiGSb,

die Meister der Programmierung sind wahrscheinlich jetzt mit der Programmierung der Kaffeemaschine für morgen früh beschäftigt, also versuch ich das mal.
> wenn im Kombifeld Kennnummer keine Kennnummer steht soll er alle Kennnummern nehmen.
dann am einfachsten:
SQL:
...Where 
(Kennnummer Like [DeinKennnummerKombiFeld]
         OR [DeinKennnummerKombiFeld] is Null)
AND 
( Whatever Like [DeinWhateverKombiFeld]
      OR [DeinWhateverKombiFeld] is Null)

Grüße
Biber
 
Moin DiddiGSb,

die Meister der Programmierung sind wahrscheinlich jetzt mit der Programmierung der Kaffeemaschine für morgen früh beschäftigt, also versuch ich das mal.
> wenn im Kombifeld Kennnummer keine Kennnummer steht soll er alle Kennnummern nehmen.
dann am einfachsten:
SQL:
...Where 
(Kennnummer Like [DeinKennnummerKombiFeld]
         OR [DeinKennnummerKombiFeld] is Null)
AND 
( Whatever Like [DeinWhateverKombiFeld]
      OR [DeinWhateverKombiFeld] is Null)

Grüße
Biber


Kaffemaschiene ist schon programmiert. :)

Erstmal Danke für die Antwort, ich werde es testen und mich morgen wieder melden.
 
Ich würde noch die Reihenfolge zwischen der Prüfung auf Null und der Normalen Bedingung tauschen.
Da Is Null einfacher auszuwerten ist als der andere Ausdruck und der folgende Ausdruck auch nicht mehr ausgewertet wird.

SQL:
([DeinKennnummerKombiFeld] IS NULL
     OR Kennnummer LIKE [DeinKennnummerKombiFeld])
 
Zuletzt bearbeitet von einem Moderator:
Hi,

ich glaube wir reden aneinander vorbei ich habe es wohl falsch erklärt. :(

Ich poste mal die Abfrage.


SELECT tblDaten.KP, tblDaten.AusDat, tblDaten.Bestelltext, tblDaten.Firma, tblDaten.Preis, tblDaten.RechPreis, tblDaten.OM
FROM tblDaten

WHERE (((tblDaten.AusDat) Between [Formulare]![frmBerichtsauswahlKP]![von Datum] And [Formulare]![frmBerichtsauswahlKP]![bis Datum]) AND ((tblDaten.Firma) Like [Formulare]![frmBerichtsauswahlKP]![Kombinationsfeld12]));


Ich möchte jetzt das wenn kein Datum eingegeben ist, das die Datumsbegrenzung ausser Kraft ist, das selbe für das Kombifeld 12 (das ist die Firma). Wenn da keine Firma ausgewählt ist, alle Firmen anzeigen.

Ich hoffe so ist es besser zu verstehen.
 
Hu, Access ist immer noch nicht fähig SQLs sauber darzustellen *g* (Kein einrücken, Sinnlose () und unnätige Tabellennanmen vor allen feldern bei einer nicht-Join-Abfrage...)
Leider sind auch Subqueries glaub in Access03 nicht unterstützt. Also bleibt uns nur das performancefressende IIF.

Code:
SELECT 
	KP, 
	AusDat, 
	Bestelltext, 
	Firma, 
	Preis, 
	RechPreis, 
	OM
FROM 
	tblDaten
WHERE 
	(
		(
			AusDat Between 
				IIF(isNull([Formulare]![frmBerichtsauswahlKP]![von Datum]); AusDat; [Formulare]![frmBerichtsauswahlKP]![von Datum])
			And IIF(isNull([Formulare]![frmBerichtsauswahlKP]![bis Datum]); AusDat; [Formulare]![frmBerichtsauswahlKP]![bis Datum])
		) AND (
			Firma Like IIF(isNull([Formulare]![frmBerichtsauswahlKP]![Kombinationsfeld12]); Firma; [Formulare]![frmBerichtsauswahlKP]![Kombinationsfeld12])
		)
	);

Schauen wir uns kurz diesen Block an:
Code:
Firma Like IIF(isNull([Formulare]![frmBerichtsauswahlKP]![Kombinationsfeld12]); Firma; [Formulare]![frmBerichtsauswahlKP]![Kombinationsfeld12]
Wenn Kombinationsfeld12 ist Null, dann wird Firma mit Firma verglichen (=true), ansonsten mit Kombinationsfeld12.
Mit Firma=Firma ist dieser WHERE-Teil sozusagen ausgeschaltet da es immer true gibt.

Auf dieselbe Art hab ich es beim Datum gelöst.
 
Moin DiddiGSB,

in der Tat - irgendwie scheinen wir aneinander vorbeizureden.

Was genau funktioniert den nicht bei deiner Umsetzung von mages/meiner Variante mit dem simplen ..And ( ( tabellenfeld =formularfeld) OR (formularfeld IS NULL))

Hast du denn versucht, das umzusetzen und wenn ja: ist das Ergebnis falsch, funktioniert es einfach nicht, wird ein Syntaxfehler zurückgeliefert oder ist die Query seit 2 Tagen noch gar nicht zurückgekommen?

[Unabhängig von yaslaws Variante, die ja auch durchaus funktionieren wird)

Verstehe nicht, wo du dich missverstanden fühlst.

Grüße
Biber
 
Zuletzt bearbeitet:
Hu, Access ist immer noch nicht fähig SQLs sauber darzustellen *g* (Kein einrücken, Sinnlose () und unnätige Tabellennanmen vor allen feldern bei einer nicht-Join-Abfrage...)
Leider sind auch Subqueries glaub in Access03 nicht unterstützt. Also bleibt uns nur das performancefressende IIF.

Code:
SELECT 
	KP, 
	AusDat, 
	Bestelltext, 
	Firma, 
	Preis, 
	RechPreis, 
	OM
FROM 
	tblDaten
WHERE 
	(
		(
			AusDat Between 
				IIF(isNull([Formulare]![frmBerichtsauswahlKP]![von Datum]); AusDat; [Formulare]![frmBerichtsauswahlKP]![von Datum])
			And IIF(isNull([Formulare]![frmBerichtsauswahlKP]![bis Datum]); AusDat; [Formulare]![frmBerichtsauswahlKP]![bis Datum])
		) AND (
			Firma Like IIF(isNull([Formulare]![frmBerichtsauswahlKP]![Kombinationsfeld12]); Firma; [Formulare]![frmBerichtsauswahlKP]![Kombinationsfeld12])
		)
	);

Schauen wir uns kurz diesen Block an:
Code:
Firma Like IIF(isNull([Formulare]![frmBerichtsauswahlKP]![Kombinationsfeld12]); Firma; [Formulare]![frmBerichtsauswahlKP]![Kombinationsfeld12]
Wenn Kombinationsfeld12 ist Null, dann wird Firma mit Firma verglichen (=true), ansonsten mit Kombinationsfeld12.
Mit Firma=Firma ist dieser WHERE-Teil sozusagen ausgeschaltet da es immer true gibt.

Auf dieselbe Art hab ich es beim Datum gelöst.


hi, auch dir danke, aber bekomme einen Syntaxfehler angezeigt,

die Position habe ich in deinem Code rot makiert.
 
Ah ja, MS Access.
Im Query-Editor will er ; Wenn man aber des SQL im SQL-Fenster iengibt will er ,.
Also ersetze alle ; durch ,

ggf alle Felder noch in [] setzen -> [Firma]
 
Zurück