Jochen Frenzer: Wie in Datansätzen blättern?

Hi together,
baue mal wieder auf Eure Hilfe.

Ich lese derzeit innerhalb einer ASP Seite einen Datnsatz aus einer SQL Server Tabelle aus und zeige diesen im Web an.

Nun soll man ausgehend von diesem Datensatz zum nächsten, vorherigen, ersten und letzten Datensatz springen können.

Hoffe ihr habt eine Idee.

Schöne Grüße,
 Jochen

  1. Nun soll man ausgehend von diesem Datensatz zum nächsten, vorherigen, ersten und letzten Datensatz springen können.

    Hallo Jochen,

    nun bin ich zwar nicht _der_ SQL Experte, aber da gibts so nette Abfragen wie:

    SELECT TOP 10 liste_der_felder FROM tabelle WHERE primärschlüssel > irgendwas ORDER BY primärschlüssel ASC

    • wenn Du den WHERE-Teil wegläßt, bekommst Du die ersten 10 Elemente
    • wenn Du statt ASC lieber DESC verwendest, kriegst Du die letzten 10 Elemente
    • wenn Du für "irgendwas" den key des aktuellen Elementes einsetzt, kriegst Du die nächsten 10 Elemente,
    • mit kleiner statt größer sind es die letzten 10 Elemente

    Das ist jetzt ins "Unreine" gesprochen und stimmt so sicher nicht ganz, aber Du weißt jetzt, wo Du bei Deinem SQL-Buch nachsehen kannst.

    Ciao
    Hans-Peter

  2. Hi Jochen,

    Nun soll man ausgehend von diesem Datensatz zum nächsten,
    vorherigen, ersten und letzten Datensatz springen können.

    Dein Hauptproblem ist m. E. die Kombination aus
    a) relativer Adressierung der Datensätze "der nächste", was
       ein Gedächtnis erfordert, und
    b) der Verwendung von HTTP, welches zunächst einmal selbst
       kein Gedächtnis besitzt.
    Also mußt Du von Request zu Request die aktuelle Position
    innerhalb Deiner Tabelle als Query-String-Parameter übergeben.

    Ein zusätzliches Problem könnte darin bestehen, daß der Begriff
    "der nächste" durch gleichzeitige Änderungen im Datenbestand
    Deiner Tabelle droht, undefiniert zu werden. Beachte folgende
    Probleme:

    • Was ist, denn der zuvor angezeigte Datensatz gerade geändert
        oder gar gelöscht wurde?
    • Was ist, wenn direkt "neben" diesem Datensatz eine Einfügung
        bzw. Löschung statt gefunden hat?
      Je nachdem, wie Du in diesem Falle Deine Aufgabenstellung
      interpretieren willst, mußt Du eventuell nicht die Position,
      sondern den Wert des aktuellen Datensatzes (Primärschlüssel?)
      als Parameter durchreichen, um korrekte Ergebnisse zu erhalten.

    Verglichen mit dieser Problematik ist die eigentliche techni-
    sche Abwicklung (Lesen eines Teilbereiches über irgend eine
    LIMIT-Klausel Deines SELECT-Statements) wahrscheinlich von
    eher untergeordneter Komplexität.

    Viel Spaß beim Programmieren
         Michael

    1. Hallo Michael,

      Deine Antwort verstehe ich nicht. Mit der von mir vorgeschlagenen einfachen Lösung existiert Problem (a) nicht, weil immer auf den Primärschlüssel referenziert wird (also absolut, nicht relativ) und Problem (b) existiert nicht, weil der Primärschlüssel eine Eigenschaft der Datenbank-Tabelle ist und nicht eines nicht vorhandenen HTML-Gedächtnisses.

      Es ist egal was zwischenzeitlich in der der Datenbank an geändert, gelöscht oder eingefügt wurde (selbst wenn der aktuelle Eintrag gelöscht wurde), mit dem Primärschlüssel als Suchkriterium funktioniert es immer.

      Ciao,
      Hans-Peter

      1. Hallo Hans-Peter,

        Es ist egal was zwischenzeitlich in der der Datenbank an geändert,
        gelöscht oder eingefügt wurde (selbst wenn der aktuelle Eintrag gelöscht
        wurde), mit dem Primärschlüssel als Suchkriterium funktioniert es immer.

        wer sagt Dir, daß der Primärschlüssel das Sortierkriterium sein _kann_?

        In den meisten Fällen ist das gar nicht möglich, weil als Sortierkriterium
        ggf. ein dem Benutzer verständliches Attribut verwendet werden muß, was
        der Primärschlüssel aber aus technischen Gründen oftmals nicht sein darf
        (weil man Primärschlüssel nicht ändern kann, ohne das zugrundeliegende
        relationale Modell zu zerstören).

        Viele Grüße
              Michael