Helmut: Selct auswahl falsch ??????

Hier mein quelltext:

<%
dim ip, yyyyakt, mmakt, ttakt, hhakt, minakt

arrIP = Request.ServerVariables("REMOTE_ADDR")

ttakt = CStr(Day(Date()))
mmakt = CStr(Month(Date()))
jjjjakt = CStr(Year(Date()))
hhakt = CStr(Hour(Now()))
minakt = CStr(Minute(Now()))

strConn = "Driver={Microsoft Access Driver (*.mdb)};DriverID=25;UID=admin;PWD=;DBQ="
strConn = strConn & Server.MapPath("../../~db/besucher.mdb")
strConn = strConn & ";FIL=MS Access;MaxBufferSize=512;PageTimeout=5;"

Set Conn = CreateObject("ADODB.Connection")
Conn.Open strConn
Set RS = CreateObject("ADODB.Recordset")
RS.Cursortype = 1
RS.LockType = 3
RS.Open "SELECT TOP 1 t_besucher.id, t_besucher.ip, t_besucher.jjjj, t_besucher.mm, t_besucher.tt, t_besucher.hh, t_besucher.min FROM t_besucher WHERE (((t_besucher.ip)= 'arrIP' )) ORDER BY t_besucher.jjjj DESC , t_besucher.mm DESC , t_besucher.tt DESC , t_besucher.hh DESC , t_besucher.min DESC", Conn

ip = RS("hh")
Response.Write (ip)

%>

folgender fehler:

Entweder BOF oder EOF ist True, oder der aktuelle Datensatz wurde gelöscht. Die angeforderte Operation benötigt einen aktuellen Datensatz.

Jetzt meine Frage:
kann man bei RS.Open so eine SQL anweisung einsetzen. Sie tut eigentlich nur den höchsten Wert von der IP Adresse der in der Variablen arrIP steht.
den höchsten Wert vom jahr monat tag uhrzeit und minute.

Was mache ich da genau falsch. Bin für jeden tipp dankbar.

  1. RS.Open "SELECT TOP 1 t_besucher.id, t_besucher.ip, t_besucher.jjjj, t_besucher.mm, t_besucher.tt, t_besucher.hh, t_besucher.min FROM t_besucher WHERE (((t_besucher.ip)= 'arrIP' )) ORDER BY t_besucher.jjjj DESC , t_besucher.mm DESC , t_besucher.tt DESC , t_besucher.hh DESC , t_besucher.min DESC", Conn

    Hab jetzt den Fehler gefunden und zwar möchte ich einen Wert in der Daten bak angeben der in der Variablen arrIP ist wie kann ich das machen ?????
    was ist da falsch ß????
    FROM t_besucher WHERE (((t_besucher.ip)= arrIP ))

    1. Hallo,

      RS.Open "SELECT TOP 1 t_besucher.id, t_besucher.ip, t_besucher.jjjj, t_besucher.mm, t_besucher.tt, t_besucher.hh, t_besucher.min FROM t_besucher WHERE (((t_besucher.ip)= 'arrIP' )) ORDER BY t_besucher.jjjj DESC , t_besucher.mm DESC , t_besucher.tt DESC , t_besucher.hh DESC , t_besucher.min DESC", Conn

      Hab jetzt den Fehler gefunden und zwar möchte ich einen Wert in der Daten bak angeben der in der Variablen arrIP ist wie kann ich das machen ?????
      was ist da falsch ß????
      FROM t_besucher WHERE (((t_besucher.ip)= arrIP ))

      Was ist t_besucher.ip für ein Feld? Text?
      Du musst den Variablenwert in den SQLString hinenverketten. Der Textverkettungsoperator ist im VisualBasic der Operator &.

      Außerdem ist es schlauer, den SQLString in einer separaten Variablen zu speicher, weil man ihn dann leichter kontrollieren kann.

      Dim SQLStr as String;
      SQLStr = "SELECT TOP 1 t_besucher.id, t_besucher.ip, t_besucher.jjjj, t_besucher.mm, t_besucher.tt, t_besucher.hh, t_besucher.min FROM t_besucher WHERE (((t_besucher.ip)= '" & arrIP & "' )) ORDER BY t_besucher.jjjj DESC , t_besucher.mm DESC , t_besucher.tt DESC , t_besucher.hh DESC , t_besucher.min DESC"
      'MsgBox(SQLStr) 'Kommentarzeichen zur Kontrolle entfernen
      RS.Open SQLStr, Conn

      Vor jeder weiteren Bearbeitung des Recordsets solltest du trotzdem prüfen, ob es überhaupt Datensätze enthält.

      If NOT RS.EOF AND NOT RS.BOF Then
       ...
      End If

      viele Grüße

      Axel