Holger Lersch: (SQL) Gegestückt zu record.MoveNext ...

Hallo Leute !

... konkret :

ich lese mit

SQL="SELECT MAX(Datum) AS lDatum FROM Tabelle"
db.OPEN SQL,con
   db.Move_einen_Vorher
   lDatum = db("ldatum")
db.CLOSE

Also ich brauch nicht das maximale Datum sondern das preMaximale Datum aus der Tabelle,
dazu würde ich gern den Zeiger halt eben wieder einen Datensatz zurücksetzen.

THX4HELP

Gruß
Holger

  1. Nochma Hi
    Sorry, ich vergaaas zu sagen womit ich hantiere :

    • ASP
    • MS SQL-Server 7

    BTW : db.MoveBack funktioniert nicht.

    Gruß
    Holger

  2. SQL="SELECT MAX(Datum) AS lDatum FROM Tabelle"
    db.OPEN SQL,con
       db.Move_einen_Vorher
       lDatum = db("ldatum")
    db.CLOSE

    Also ich brauch nicht das maximale Datum sondern das preMaximale Datum aus der Tabelle,
    dazu würde ich gern den Zeiger halt eben wieder einen Datensatz zurücksetzen.

    Hallo,

    mit deinem SQLString liest Du nur einen einzigen Satz aus,
    daher kannst Du auch nicht zum vorherigen springen.

    <%
    SQL="SELECT TOP 2 Datum FROM Tabelle ORDER BY Datum DESC"
    rs.OPEN SQL,conn
       If Not rs.EOF Then
          rs.MoveNext
          lDatum = rs.Fields("Datum")
       End if
    rs.CLOSE
    %>

    TOP n geht allerdings nicht mit Access (nur SQL Server)
    Daher sieht bei Access der SQL-String so aus:

    <%
    SQL="SELECT Datum FROM Tabelle ORDER BY Datum DESC"
    rs.OPEN SQL,conn
       If Not rs.EOF Then
          rs.MoveNext
          lDatum = rs.Fields("Datum")
       End if
    rs.CLOSE
    %>

    Alternativ kannst Du auch folgenden SQL-String basteln
    <%
    SQL = "SELECT max(Datum) as lDatum FROM Tabelle1 First WHERE First.Datum < (Select max(Datum) as l2Datum FROM Tabelle1 Second)DESC"
    rs.OPEN SQL,conn
       If Not rs.EOF Then
          lDatum = rs.Fields("lDatum")
       End if
    rs.CLOSE
    %>

    Tschau, Stefan

    1. SQL="SELECT TOP 2 Datum FROM Tabelle ORDER BY Datum DESC"

      In Oracle würde ich schreiben:
      "SELECT Datum FROM Tabelle where rowid=2 ORDER BY Datum DESC;"

      Aber ob Deine M$-DB das kann ... ?

      1. SQL="SELECT TOP 2 Datum FROM Tabelle ORDER BY Datum DESC"

        In Oracle würde ich schreiben:
        "SELECT Datum FROM Tabelle where rowid=2 ORDER BY Datum DESC;"

        Aber ob Deine M$-DB das kann ... ?

        Hallo Michael,

        also ob rowid dir das gewünschte Ergebnis bringt ???
        Rowid ist eigentlich ja eine der Zeile zugehörige
        Nummer, die auch bei einer evtl. Sortierung an der
        Zeile kleben bleibt.

        Probier mal:
        "SELECT rowid, Datum FROM Tabelle ORDER BY Datum ASC;" und
        "SELECT rowid, Datum FROM Tabelle ORDER BY Datum DESC;"

        Desweiteren sieht unsere rowid so aus: 00001BB0.0005.0005
        und bei einer Abfrage "WHERE rowid = 2" kommt nur der Fehler:
        ORA-00932: inconsistent datatypes

        rownum geht auch nicht, da erst nach der Query die rownum
        zugewiesen wird und von daher bei einer Abfrage auf rownum = 2
        "No rows selected" erscheint.

        Tschau, Stefan

        1. also ob rowid dir das gewünschte Ergebnis bringt ???
          Rowid ist eigentlich ja eine der Zeile zugehörige
          Nummer, die auch bei einer evtl. Sortierung an der
          Zeile kleben bleibt.

          Sorry, ich meinte in der Tat rownum. (Ich sollte einfach keine Syntax mehr posten.)

          rownum geht auch nicht, da erst nach der Query die rownum
          zugewiesen wird und von daher bei einer Abfrage auf rownum = 2
          "No rows selected" erscheint.

          Habe ich nicht ausprobiert. Im Zweifelsfalle eine View dazwischenschalten und fertig.

  3. Hallo Holger

    db.Move_einen_Vorher

    Nur zur Ergänzung, die Methode zum "zurückblättern" in einem Recordset wäre "db.MovePrevious".

    Wie aber schon erwähnt, muss im Recordset vor dem aktuellen Datensatz noch ein weiterer Datensatz vorhanden sein.

    Grüsse
    Tom