Neuigkeiten:

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

Mobiles Hauptmenü

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

#1
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
aus aktuellen Anlässen:
Das Hauptproblem - eines der Hauptprobleme, denn es gibt mehrere - eines der vielen Hauptprobleme beim Regieren von Leuten ist, von wem man sich das gefallen läßt; oder vielmehr, wer es schafft, die Leute soweit zu kriegen, dass sie sich's gefallen lassen.
Zusammenfassend: Es ist eine allseits bekannte Tatsache, dass die Leute, die sich am meisten wünschen, Leute zu regieren, gerade deshalb diejenigen sind, die am wenigsten dazu geeignet sind. Um die Zusammenfassung zusammenzufassen: Jeder, der imstande ist, sich zum Präsidenten wählen zu lassen, sollte um alles in der Welt daran gehindert werden, dass er seinen Job ausübt. Um die zusammengefasste Zusammenfassung zusammenzufassen: Leute sind ein Problem.
(Douglas Adams)

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