Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Abfrage mit zwei Konstanten

Begonnen von Carl, November 20, 2019, 22:53:28

⏪ vorheriges - nächstes ⏩

Carl

Hallo, ich habe mal eine Frage.

gegeben:
* eine Tabelle tblPatienten mit dem Feld "PatientenDatum" (sowie anderen Feldern)
* eine Tabelle tblZeitraum mit nur dem einen Feld [Datum_beginn]
* eine Abfrage abfPatienten, die alle Felder von tblPatienten enthält

Jetzt suche ich eine Möglichkeit, die abfPatienten zu filtern.

Es sollen alle DS eingeschlossen werden, deren Feld [PatientenDatum] einen größeren Wert enthält als jener Wert des Feldes [Datum_beginn] in tblZeitraum mit der ID=1.

in() mit Bezug auf das Feld [Datum_beginn] in tblZeitraum mit der ID=1

Kann mir bitte jemand einen Tipp geben, wie der string aussehen muss?

Carl

atropos

#1
Hallo,

so frei heraus: entweder Du baust das in VBA zusammen oder nutzt als Kriterium eine DomFunktion:

Select * From tblPatienten Where ((PatientenDatum)>DLookup('Datum_beginn','tblZeitraum','tblZeitraum.ID=1'));

oder Du könntest auch einfach in die Abfrage ein Kriterium einfügen:

Select * From tblPatienten WHERE ((tblPatienten.PatientenDatum)>[Bitte geben Sie ein Datum an:]);

Ist Geschmackssache und kommt darauf an wie Du das nutzen magst...
Gruss
atropos

Carl

Danke für Deine Antwort. :-)

Ich habs mal mit der Domfunktion in der Abfrage gemacht, es funktioniert.

Wenn man die Domfunktion in der Abfrage einbaut, dann bekommt jeder DS den selben Wert, weil ja auch die DOM-Funktion für jeden DS die selbe ist? Ist so ja normal. oder?

ebs17

Man kann auch einfach eine richtige Abfrage schreiben:
SELECT
   *
FROM
   tblPatienten
WHERE
   PatientenDatum >
      (
         SELECT
            Datum_beginn
         FROM
            tblZeitraum
         WHERE
            ID = 1
      )

Und ja, wenn es die ID=1  nur einmal gibt, kann auch nur ein Datum zurückgegeben werden, mit dem verglichen wird.

Wer von Konstanten spricht, dürfte auch keine anderen Erwartungen haben.
Mit freundlichem Glück Auf!

Eberhard

Carl

Hallo Eberhardt,

ich habe da was nicht ganz verstanden.

Es soll ein Feld in einer Abfrage werden. Also ein einzelner string. Ich komme mit den Kommata durch einander, könntest Du es mal in einem string schreiben?

Und ich habe es mit einer dlookup-funktion gemacht, da war plötzlich die gesamte Abfrage gesperrt.

Carl

atropos

Hi,

ZitatUnd ich habe es mit einer dlookup-funktion gemacht, da war plötzlich die gesamte Abfrage gesperrt.

Dlookup und DomWert sind die gleichen Funktionen. Wenn Du die Funktion im Anfrageentwurf in ein Kriterium setzt, dann werden alle Datensätze der tblPatienten angezeigt, die den Wert des Ergebnisses der Domänefunktion haben. Also nein, es sollte nicht immer der gleiche Wert angezeigt werden, sofern es mehrere Datensätze gibt, bei denen das Datum das gefundene Kriterium erfüllt.
Gruss
atropos

ebs17

Zitatich habe da was nicht ganz verstanden
Der Glaube, dass ich verstanden hätte, ist auch darnieder.

Vielleicht verstehst Du, warum alle Ansätze und Abfragen zeigen, Du jedoch nicht, und kannst Dich dazu äußern. Musst Du natürlich nicht, Problem behalten ist auch schön.
Mit freundlichem Glück Auf!

Eberhard

Carl

Ich habs glaube ich jetzt hinbekommen, mit diesem SQL-Fenster. Dann hat er automatisch den String erstellt.

Der String sieht jetzt so aus:

>(SELECT ZeitpunktBeginn FROM tblDruckzeitraum WHERE ID=1) Und <(SELECT ZeitpunktEnde FROM tblDruckzeitraum WHERE ID=1)


Danke für die Hilfe
Carl

ebs17

ZitatTabelle tblZeitraum mit nur dem einen Feld [Datum_beginn]
Da schließt sich Deine Lösung dann logisch an ... auch weil ...
ZitatEs soll ein Feld in einer Abfrage werden
Da würde man eigentlich im SELECT-Teil einen Ausdruck erwarten, weil nur da Abfragefelder (nach außen) definiert werden. Die Lösung ist aber immer noch sichtbar nur ein Filter.
Mit freundlichem Glück Auf!

Eberhard