Helmut: Datum un MySQL

Hallo zusammen,
Ich habe ein kleines problem mit der SQL anweisung und dem Datum:
Ich möchte das datum mit einer variable in die SQL anweisung übergeben. Wie muss ich das Datum miteinbringen.
Bei Access läuft es so:
datum = mm & "/" & ttt & "/" & jjjj
in sql dann so:
WHERE (((tabelle.spalte) = #" & datum & "#))

weiß jemand da bescheid?

  1. hi,

    Ich habe ein kleines problem mit der SQL anweisung und dem Datum:
    Ich möchte das datum mit einer variable in die SQL anweisung übergeben. Wie muss ich das Datum miteinbringen.

    so, wie es zu dem datumstyp, den du für die spalte gewählt hast, passt.

    lies http://www.mysql.com/doc/de/Date_and_time_types.html ff.

    gruss,
    wahsaga

    1. Ich habe es ja so versucht aber da bringt er nix.
      Datum = 2004-03-22" (genau wie in DB)

      SQL: (((t_besucher.datum)=' & datum & '))

      kommt zwar keine fehlermeldung aber er bringt aber auch keine werte raus.

      P.S. es läuft auf eine ASP Seite wenns hilft.

      1. Halihallo Helmut

        Ich habe es ja so versucht aber da bringt er nix.
        Datum = 2004-03-22" (genau wie in DB)
        SQL: (((t_besucher.datum)=' & datum & '))

        Lass dir den _generierten_ SQL-Query ausgeben und poste ihn hier.
        Einzig dies ist für eine Fehlersuche relevant! - Denn so wie es
        ausschaut, ist es OK.

        kommt zwar keine fehlermeldung aber er bringt aber auch keine werte raus.

        Gibt es einen Datensatz mit dem entsprechenden Datum? - Ist die
        Join-Bedingung falsch?

        Viele Grüsse

        Philipp

        1. Hier di Komplette SQL anweisung.

          SQL = "SELECT t_besucher.id, t_besucher.ip, t_besucher.name, t_besucher.datum, t_besucher.uhrzeit FROM t_besucher WHERE (((t_besucher.datum)=2004-03-22)) ORDER BY t_besucher.id DESC;"

          RS.Open SQL, objconn

          Ich wollte grad mal das datum fest reinschreiben aber da kommt auch nix.
          Und ja es sind daten mit diesem Datum vorhanden.

          1. Halihallo Helmut

            SQL = "SELECT t_besucher.id, t_besucher.ip, t_besucher.name, t_besucher.datum, t_besucher.uhrzeit FROM t_besucher WHERE (((t_besucher.datum)=2004-03-22)) ORDER BY t_besucher.id DESC;"

            Datumsangaben sind Strings und gehören somit in Quotes oder
            Doublequotes gesetzt.

            t_besucher.datum="2004-03-22"

            BTW: Warum diese sinnlose Klammerung um den Attributnamen?

            Viele Grüsse

            Philipp

            1. t_besucher.datum="2004-03-22"

              Siehe mal meinen beitrag oben

              BTW: Warum diese sinnlose Klammerung um den Attributnamen?

              die habe ich mal reingemacht weil ich was anderes getestet habe und vergessen Sie rauszunehmen aber ich habe sie schon entfernt für dich :)

          2. hi,

            SQL = "SELECT t_besucher.id, t_besucher.ip, t_besucher.name, t_besucher.datum, t_besucher.uhrzeit FROM t_besucher WHERE (((t_besucher.datum)=2004-03-22)) ORDER BY t_besucher.id DESC;"

            2004-03-22 ergibt nach allgemeinen rechenregeln 1979 - das ist kein gültiger wert des datumsformates, das mysql erwartet.

            solltest du statt des rechenausdruckes 2004-03-22 den string '2004-03-22' gemeint haben, dann notiere diesen auch so.

            gruss,
            wahsaga

          3. Ich habe es so mal getestet:
            WHERE (((t_besucher.datum)='2004-03-22'))
            dann warte ich im Browser bis ich schwarz werde also es kommt nix.

            WHERE (((t_besucher.datum)="2004-03-22"))
            Wenn ich es so mache dann kommt die fehlermeldung das nach dem " das anweisungsende erwartet wird. (Im Browser)

            1. yo,

              WHERE (((t_besucher.datum)='2004-03-22'))
              dann warte ich im Browser bis ich schwarz werde also es kommt nix.

              warten heisst nicht, dass es falsch ist. das kommt immer auf die abfrage, das system und der datenmenge drauf an. wenn dir geholfen werden soll, sind fehlermeldungen aber wichtig.

              WHERE (((t_besucher.datum)="2004-03-22"))
              Wenn ich es so mache dann kommt die fehlermeldung das nach dem " das anweisungsende erwartet wird. (Im Browser)

              wenn du die sql anweisung über php ausführst, dann ist klar, dass es nicht mit "datum" geht, weil er die " braucht, um einen string einzugrenzen.

              Ilja

              1. Was das warten betrifft ca. nach 30 - 60 minuten kommt dann die seite kan nicht angezeigt werden....

                Es sind mom nur 12 einträge drin.
                Das kann nicht so lange dauern.

                Was das andere betrifft ich arbeite über ASP.

                1. yo,

                  Was das warten betrifft ca. nach 30 - 60 minuten kommt dann die seite kan nicht angezeigt werden....

                  dann scheint es ein grundsätzliches problem zu geben. falsch die abfrage falsch ist, gibt es auch eine fehlermeldung und das dauert in aller regel nicht solange.

                  Was das andere betrifft ich arbeite über ASP.

                  was asp betrifft, so ist das nicht meine welt, aber das gleiche problem könnte auftauchen, das die "zur makrierung von strings genutzt werden.

                  Ilja

                  1. Ich habe es ja auch schon mit ' ' versucht aber dann warte ich so lange.
                    Das komische daran ist ja das wenn ich idese anweisung im MySQL Editor eingebe gibt er mir die daten ohne probleme innerhal von 0,22 sec zurück.
                    MySQL Control Center

                    1. yo

                      Das komische daran ist ja das wenn ich idese anweisung im MySQL Editor eingebe gibt er mir die daten ohne probleme innerhal von 0,22 sec zurück.

                      das ist doch schon mal ein sicherer hinweis, dass das sql statement richtig ist. das problem, warum es so lange dauert, liegt dann logischerweise woanders und nicht an der anweisung.

                      Ilja

                      1. Aber wo das ist hier die frage.
                        Hier mal das komplette script.

                        <html>
                        <head>
                        <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
                        <title>Besucher Statistik im Intranet</title>
                        </head>
                        <body>

                        <%
                        strComplete = "Driver=MySQL ODBC 3.51 Driver;Server=localhost;" &_
                        "Option=3;UID=intranet;DATABASE=intranet;"
                        Set objConn = Server.CreateObject("ADODB.Connection")
                        objConn.open strComplete

                        Set RS = CreateObject("ADODB.Recordset")
                        rs.CursorType = 3
                        rs.CursorLocation = 3
                        rs.LockType = 3

                        SQL = "SELECT t_besucher.id, t_besucher.ip, t_besucher.name, t_besucher.datum, t_besucher.uhrzeit FROM t_besucher WHERE t_besucher.datum='2004-03-22' ORDER BY t_besucher.id DESC;"

                        RS.Open SQL, objconn

                        Response.Write ("<center>")
                        Response.Write ("<font face=Arial size=6><b><i><u>Besucher Statistik vom Intranet")
                        Response.Write ("<br>") & ("von Datum: ") & date &("</b></i></u></font>")
                        Response.Write ("<br><center><a href=statistik_gesamt.asp>gesamte Statistik abrufen</a></center>")
                        Response.Write ("<br><br>")
                        Response.Write ("<table border=1>")

                        Response.Write ("<td width=130><b><i><u>Besuchernummer:</b></i></u></td>")
                        Response.Write ("<td width=150><b><i><u>Besucher - IP:</b></i></u></td>")
                        Response.Write ("<td width=180><b><i><u>Besucher Name:</b></i></u></td>")
                        Response.Write ("<td width=100><b><i><u>besucht am:</b></i></u></td>")
                        Response.Write ("<td width=100><b><i><u>besucht um:</b></i></u></td>")
                        Response.Write ("</tr>")

                        while (not rs.eof)

                        Response.Write ("<tr>")
                         Response.Write ("<td>")
                         response.write rs("id")
                         Response.Write ("</td>")
                         Response.Write ("<td>")
                         Response.write rs("ip")
                         Response.Write ("</td>")
                         Response.Write ("<td>")
                         response.write rs("name")
                         Response.Write ("</td>")
                         Response.Write ("<td>")
                         response.write rs("datum")
                         Response.Write ("</td>")
                         Response.Write ("<td>")
                         response.write rs("uhrzeit")
                         Response.Write ("</td>")
                        wend
                        Response.Write ("</table>")
                        Rs.Close
                        objConn.Close
                        Set objConn = Nothing
                        %>

                        <form method = "POST" action="statistik_datum.asp">
                        <p align="center">Bitte geben Sie hier ein Datum ein für den Tag den Sie für
                        die Statistik brauchen.<br>
                        Beispiel: <% =date %><br>
                        <input type="text" name="datum"><br>
                        <input type="submit" value="OK" name="ok">
                        </form>

                        </body>

                        1. Hallo,

                          Aber wo das ist hier die frage.
                          Hier mal das komplette script.

                          <html>
                          <head>
                          <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
                          <title>Besucher Statistik im Intranet</title>
                          </head>
                          <body>

                          <%
                          strComplete = "Driver=MySQL ODBC 3.51 Driver;Server=localhost;" &_
                          "Option=3;UID=intranet;DATABASE=intranet;"
                          Set objConn = Server.CreateObject("ADODB.Connection")
                          objConn.open strComplete

                          Set RS = CreateObject("ADODB.Recordset")
                          rs.CursorType = 3
                          rs.CursorLocation = 3
                          rs.LockType = 3

                          SQL = "SELECT t_besucher.id, t_besucher.ip, t_besucher.name, t_besucher.datum, t_besucher.uhrzeit FROM t_besucher WHERE t_besucher.datum='2004-03-22' ORDER BY t_besucher.id DESC;"

                          Lass mal das Semikolon am Ende weg. PHP jedenfalls warnt davor, bei SQL-Queries an MySQL. http://de3.php.net/manual/en/function.mysql-query.php

                          RS.Open SQL, objconn

                          ^Hast Du ein Schwein, dass ASP nicht casesensitive ist, oder ist es das doch?

                          Response.Write ("<center>")
                          Response.Write ("<font face=Arial size=6><b><i><u>Besucher Statistik vom Intranet")
                          Response.Write ("<br>") & ("von Datum: ") & date &("</b></i></u></font>")
                          Response.Write ("<br><center><a href=statistik_gesamt.asp>gesamte Statistik abrufen</a></center>")
                          Response.Write ("<br><br>")
                          Response.Write ("<table border=1>")

                          Response.Write ("<td width=130><b><i><u>Besuchernummer:</b></i></u></td>")
                          Response.Write ("<td width=150><b><i><u>Besucher - IP:</b></i></u></td>")
                          Response.Write ("<td width=180><b><i><u>Besucher Name:</b></i></u></td>")
                          Response.Write ("<td width=100><b><i><u>besucht am:</b></i></u></td>")
                          Response.Write ("<td width=100><b><i><u>besucht um:</b></i></u></td>")
                          Response.Write ("</tr>")

                          So. Nehmen wir an, Deine Querie ergibt eine Datensatzmenge. Dann steht der Datensatzzeiger jetzt auf Datensatz 1.

                          while (not rs.eof)

                          ^OK. Es ist nicht EOF.

                          Response.Write ("<tr>")
                           Response.Write ("<td>")
                           response.write rs("id")
                           Response.Write ("</td>")
                           Response.Write ("<td>")
                           Response.write rs("ip")
                           Response.Write ("</td>")
                           Response.Write ("<td>")
                           response.write rs("name")
                           Response.Write ("</td>")
                           Response.Write ("<td>")
                           response.write rs("datum")
                           Response.Write ("</td>")
                           Response.Write ("<td>")
                           response.write rs("uhrzeit")
                           Response.Write ("</td>")

                          Der Datensatzzeiger steht immer noch auf Datensatz 1. Es ist immer noch nicht EOF. Das wird es auch nie ;-)). Wo veränderst Du den Datensatzzeiger? Es fehlt sowas wie
                              rs.MoveNext

                          wend

                          ^Endlosschleife bis Timeout

                          Response.Write ("</table>")
                          Rs.Close
                          objConn.Close
                          Set objConn = Nothing
                          %>

                          viele Grüße

                          Axel

                          1. Oh man das nennt man ihronie des schicksals. Ich hatte fest daran geglaubt das ich das rs.MoveNext geschrieben habe. Aber ich muss es warscheinlich bei meinen test irgendwann ausversehen rausgelöscht haben. Des wegen hat es auch so lange gedauert bis die seite lädt weil es in eine endloss schleife lief.

                            Mann vielen dank.

                            Und wie nennt man das nun blödheit oder Blindheit?

                            mfg Helmut

                            1. yo

                              Und wie nennt man das nun blödheit oder Blindheit?

                              nun wenn man den fehler nicht sieht wohl blindheit, wenn man die brille vergessen hat aufzusetzen dann wohl blödheit ;-)

                              Ilja

                              1. Jetzt habe ich nochmal eine frage.

                                Ist das normal wenn ich in der db das format für time auf standart gelassen habe (also 00:00:00) und wenn ich es über asp ganznormal auslese wie oben dann erscheinnt es so:
                                Datum Uhrzeit.

                                1. Halihallo Helmut

                                  Ist das normal wenn ich in der db das format für time auf standart gelassen habe (also 00:00:00)

                                  Hä? - Meinst du den Default-Wert für ein Feld des Typs TIME?

                                  und wenn ich es über asp ganznormal auslese wie oben dann erscheinnt es so:

                                  Wo oben?

                                  Datum Uhrzeit.

                                  Das wird ausgegeben? - Das klingt nicht nach TIME-Feld, sondern nach
                                  Beschreibung. Und diese klingt wirklich "komisch", denn bei einem
                                  TIME-Typ-Attribut wird etwa '12:36:24' ausgegeben. Ich könnte mir
                                  vorstellen, dass die ODBC-Schnittstelle dies erweitert...?

                                  Schreib doch etwas Code und dessen Ausgabe hin, sodass (zumindest
                                  ich) es verstehen und nachvollziehen kann.

                                  Viele Grüsse

                                  Philipp

                                  1. Halihallo Helmut

                                    Schreib doch etwas Code und dessen Ausgabe hin, sodass (zumindest
                                    ich) es verstehen und nachvollziehen kann.

                                    Das sollte heissen, dass dich vielleicht jemand anderes versteht,
                                    aber ich deine Formulierung nicht verstehe. Deshalb auch die
                                    Nachfrage nach Quellcode und Ausgabe.

                                    Viele Grüsse

                                    Philipp