Oktober 24, 2020, 16:14:38

Neuigkeiten:

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


SQL Abrage zwischen 2 Zeiten

Begonnen von KaJu74, Februar 01, 2020, 09:42:40

⏪ vorheriges - nächstes ⏩

KaJu74

Hallo

Ich fange gerade erst an, mit SQL Abfragen, daher schon im Vorfeld, SORRY für dumme Fragen.
Ich habe eine Datenbank aufgebaut, wo es eine Spalte gibt, die "Fertigstellung" heißt.
Dort ist ein Datum und eine Uhrzeit drin.
Nun möchte ich die Zahl der Einträge innerhalb einer Stunde zählen.

        Sql = "select count(*) " & _
            "FROM " & Tabelle & " " & _
            "WHERE Fertigstellung >= ' " & Beginnzeit & "' " & _
            "AND Fertigstellung < ' " & Endzeit & "' "

    Tabelle = "FTS_Transporte"
    Beginnzeit = Format(date, "dd.mm.yy hh:mm:ss")
    Endzeit = CDate(Beginnzeit) + 1 / 24

Das klappt aber nicht.

Auch dieser Versuch scheiterte:
        Sql = "select count(*) " & _
            "FROM " & Tabelle & " " & _
            "WHERE Fertigstellung BETWEEN 'Beginnzeit' AND 'Endzeit'"

Kann mir jemand helfen?

Gruß

Karsten

DF6GL

Februar 01, 2020, 10:25:10 #1 Letzte Bearbeitung: Februar 01, 2020, 10:35:45 von DF6GL
Hallo,


(gültig für Access, evtl. ist die Datum/Uhrzeit-Formatierung an MySQL anzupassen.)

Dim strTabelle as String, strSQL as String
Dim datBeginnzeit as Date
Dim datEndzeit as Date

    strTabelle = "FTS_Transporte"
    datBeginnzeit = Format(Now(), "\#yyyy-mm-dd hh:nn:ss\#")
    datEndzeit =  Format(Dateadd("h",1,Now()), "\#yyyy-mm-dd hh:nn:ss\#")

        strSql = "select count(*)  FROM " & strTabelle  & _
                 " WHERE Fertigstellung BETWEEN " & datBeginnzeit & " AND " & datEndzeit


Debug.Print strSQL

KaJu74

Hallo,

erst mal vielen Dank für die Antwort.

Leider kommen Fehler.

datBeginnzeit = Format(Now(), "\#yyyy-mm-dd hh:nn:ss\#")
und
datEndzeit =  Format(Dateadd("h",1,Now()), "\#yyyy-mm-dd hh:nn:ss\#")
führen zum Fehler:
Typen unverträglich.

Wenn ich die \# entferne geht es.

Aber dann führt
Set rs = cn.Execute(strSQL) zu folgendem Fehler:
Syntaxfehler (fehlender Operator)

Gruß

Karsten

Hondo

Hallo,
datBeginnzeit  und datEndzeit müssen als String deklariert werden.
ZitatSet rs = cn.Execute(strSQL)

Execute ist die falsche Methode.
Set rs = cn.OpenRecordset(strSQL, dbopenSnapshot)
With rs
....
End With


Gruß Andreas

KaJu74

Moin,

egal ob als Date oder String, folgender Fehler kommt:
"Arguments are the wrong type, are out of acceptable range, or are in conflict with one another."

Hondo

Poste bitte deinen Code und nicht die Fehlermeldung!
Gruß Andreas

KaJu74

Hi

ich habe es jetzt so gelöst, dass ich eine neue Spalte in der Datenbank gemacht habe, wo ich die Stunde eintrage.
Damit kann ich das "Problem" jetzt ganz einfach lösen, indem ich Datum und Stunde separat abfrage.

Gruß

Karsten

Beaker s.a.

Hallo Karsten,
Und diese Zeile von Franz hast du nicht mal ausprobiert?
Debug.Print strSQL
Dies schreibt dir den geparsten String ins Direktfenster (VBE -> Strg-G). Dort
kommt man den Syntaxfehlern am schnellsten auf die Spur.
gruss ekkehard

P.S. Für kompliziertere Abfrage, vor allem mit solchen mit mehreren Variablen,
Formularbezügen bzw. Parametern hilft dieses Tool bei der Analyse ungemein:
http://access-codelib.net/download/addins/SqlDebugPrint.zip
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.

KaJu74

Ich gebe zu, dass ich das als Signatur gehalten habe.  ::)

ebs17

Oder der Einfachheit halber so:
strSql = "SELECT COUNT(*)  FROM " & strTabelle  & _
         " WHERE Fertigstellung BETWEEN Now() AND DateAdd('h', 1, Now())"

VBA-Funktionen ohne äußere Argumente kann man direkt in den SQL-String übernehmen und spart sich den Formatierungskram, an dem sich so viele so gerne aufreiben.

Eine echte Alternative wäre eine echte Parameterabfrage.
Mit freundlichem Glück Auf!

Eberhard