Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Recordset mit variabler Abfrage

Begonnen von AbsolutNeu, April 06, 2014, 17:50:28

⏪ vorheriges - nächstes ⏩

MzKlMu

#15
Hallo,
" WHERE tbl_Kalendertage.Datum>=#4/4/2014# And tbl_Kalendertage.Datum<=#5/10/2014#"ein Datum muss in den Gartenzaun (#) eingeschlossen werden.
Außerdem sind wegen Indexnutzung die Operatoren >= und <= vorzuziehen.
Das Requery ist überflüssig, die Zuweisung von strSQL löst automatisch auch ein Requery aus.

Beim Datumsvergleich ist noch zu beachten, dass das Datum vor Übergabe umgeformt werden muss wenn das Datum zum Vergleich aus Formularfeldern kommt.
Es muss entweder nach ISO (JJJJ/MM/TT) oder im US Format (MM/TT/JJJJ) übergeben werden. Suche mal nach SQL Datum.
Gruß Klaus

database

Hallo,

ZitatEs muss entweder nach IS (JJJJ/MM/TT) oder im US Format (MM/TT/JJJJ) übergeben werden.

sieh dazu auch:

http://www.donkarl.com?FAQ6.8


AbsolutNeu

Hallo zusammen,

vielen Dank für eure Antworten.

Das mit dem Datumsformat hätte mir eigentlich nicht passieren dürfen, da ich ja eine Funktion für die Umwandlung in ein SQL gerechtes Datum habe.  ::)

Die Erstellung der Hilftabelle war aus einem Beispiel, was ich so übernommen habe und leider die Namensgebung nicht beachtet habe.

Jetzt habe ich den SQL String geändert:
        strSQL = "SELECT tbl_Kalendertage.kalDatum " & _
                    "FROM tbl_Kalendertage RIGHT JOIN tbl_Termine " & _
                    "WHERE tbl_Kalendertage.kalDatum >= #04/04/2014# AND tbl_Kalendertage.kalDatum <= #05/10/2014#"


bei einem Listenfeld mit Datensatzherkunft Tabelle/Abfrage passiert nichts.
bei einem Kombinationsfeld mit Datensatzherkunft Tabelle/Abfrage kommt die Fehlermeldung Syntaxfehler in der FROM Klausel!

Ist die Syntax der SQL Anweisung nicht richtig? Und kann es sein, das der Abfrage Entwurf nicht mit right join zurecht kommt?

Mfg
AbsolutNeu

MzKlMu

#18
Hallo,
die SQL Abfrage ist ja auch nicht vollständig. Ein Join erfordert ja 2 Schlüsselfelder und Du hast keines im Join. Das heißt der ON Teil fehlt bei Dir vollständig.

SELECT KalDatum, TermDatum
FROM  tbl_Kalendertage
RIGHT JOIN tbl_Termine
ON  tbl_Kalendertage.KalDatum = tbl_Termine.TermDatum
WHERE KalDatum >= #04/04/2014#
AND KalDatum <= #05/10/2014#"


Das ist jetzt der reine SQL Text, ohne Zuweisung als String.
Außer im ON Teil kannst Du die Tabellennamen weglassen, vorausgesetzt es gibt keine gleichen Feldnamen in unterschiedlichen Tabellen. Was auch sonst von Vorteil ist.

Warum klickst Du die Abfragen nicht einfach im Abfrageentwurf (nicht in der SQL Ansicht) zusammen? Dann hast Du die richtige Syntax. Solche einfachen Abfragen kann man immer im Entwurf machen. Da wäre dann der ON Teil drin.
Gruß Klaus

AbsolutNeu

Hallo,

in der Tabelle Termine habe ich TerminAnfang und TerminEnde.
Also habe ich kein konkretes Schlüsselfeld oder 3 wenn ich beide in die On Klausel nehmen soll.

Bei einfachen Auswahl - Abfragen geht das mit dem Entwurfsmodus aber mit Join Abfragen ist das noch Neuland für mich,sorry :(

Mfg
AbsolutNeu

DF6GL

Hallo,

was steht denn in KalDatum bzw. TermDatum drin? Datum mit Uhrzeit, oder nur Datum oder nur Uhrzeit?


Im Fall von Datum mit Uhrzeit könnte die Verjoinung so lauten:

ON  Int(tbl_Kalendertage.KalDatum) = Int(tbl_Termine.TermDatum)
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

AbsolutNeu

Hallo nochmal,

gestern bin ich auf die Idee gekommen, die Datumswerte der Zeiträume (berechnet) als Double Werte mit abzuspeichern, um einen Wertebereich zubekommen. Dann habe ich die Abfrage mit der Bedingung gestellt, das der Zeitraum Startwert kleiner gleich dem des gewollten Tages(auch in double umgerechnet) ist und der Zeitraum Endwert größer gleich ist. Siehe da, es werden mir alle Termine angezeigt, die ich an diesem Tag habe, auch die , die vorher angefangen haben bzw. später enden. Termine außerhalb des Tages werden nicht angezeigt.

Dann habe ich die Double Werte durch ein SQL Datum ersetzt und es funktioniert ohne Hilfstabelle.

Meine letzte Frage noch,
was geht schneller, eine Schleife, die jeden Tag (1 Listenfeld) eine Abfrage zuweist, also 30 oder 31 Abfragen. Oder die Termine pro Monat filtern und die paar Datensätze per Recordset zuzuweisen.

Ich schätze mal 2 Termine pro Tag werden es. Selten mehr, öfter weniger.

Mfg
AbsoultNeu

MzKlMu

Hallo,
Zitatgestern bin ich auf die Idee gekommen, die Datumswerte der Zeiträume (berechnet) als Double Werte mit abzuspeichern,
Datumswerte sind von Haus aus Double Zahlen, da muss man nichts wandlen und schon gar nicht speichern.

Ein Datumswert ist eine Doublezahl, vor dem Komma die Anzahl der Tage die seit dem 30.12.1899 vergangen sind (Tag 1 = 31.12.1899). Nach dem Komma der dezimale Anteil eines Tages. Dabei entspricht ein Tag der Zahl 1, 1h ist demnach 1/24.



Gruß Klaus

AbsolutNeu

Hallo,

das mit dem Datum war mir schon klar, die Werte habe ich auch nur zu Testzwecken gespeichert.

Also ich habe jetzt wieder einiges gelernt (vorallem das ich noch viel lernen muss ;D).

Auf der einen Seite will man seine Datenbank fertig bekommen, auf der anderen Seite sollte man sich doch mehr mit den Grundlagen beschäftigen. Dann kommt der Faktor Zeit auch noch hinzu.

An dieser Stelle möchte ich mich für Eure Geduld, Euer Verständnis und Euer Bemühen bedanken (vorallem bei MzKlMu).

Mfg
AbsolutNeu