Announcement

Collapse
No announcement yet.

Interbase 6 und begrenzte Anzahl von Datensätzen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Interbase 6 und begrenzte Anzahl von Datensätzen

    Hallo Members,

    ich habe folgendes Problem, welches auch hier im Forum ab und zu auftaucht (Siehe Beitrag von Herr Kosch im Mai ueber die Anzeige einer begenzten Anzahl von Datensätzen)aber mein Problem nicht endgültig löst. Beispiel:
    Ich bin mit einer Datenbank (IB 6) über eine realativ langsame Modemverbindung verbunden und der Benutzer möchte alle Datensätze vom aktuellen Datum sehen. Je nach Aufkommen können das wenige (20) bis viel (500) sein. Nun möchte ich, dass z.B. immer nur 20 angezeigt werden und dann entweder nach unten oder auch nach oben gescollt werden kann um die nächsten 20 bzw. vorherigen 20 Datensätze anzuzeigen. Wenn jemand eine funktionierende Lösung (eventuell Stored Procedure) hat und die Aufwendungen dafür entlohnt haben möchte ist das kein Problem.
    Besten Dank

    Gerhard Behnke
    [email protected]

  • #2
    Hallo Gerhard,

    es muß auf jeden Fall eine StoredProc verwendet werden. Als z.B.
    <pre>
    CREATE PROCEDURE SELECT_KUNDE (start: integer, anzahl integer)
    RETURNS (NAME VARCHAR(30),
    TELEFONNUMMER VARCHAR(30))
    AS
    DECLARE VARIABLE TEMP INTEGER;
    BEGIN
    temp = 0;
    for select Name, Telefonnummer from KUNDE
    into :Name, :Telefonnummer
    do begin
    temp = temp + 1;
    if ((temp >= :start) and (:anzahl > 0)) then begin
    anzahl = anzahl - 1;
    suspend;
    if (anzahl < 1) then exit;
    end
    end
    end
    </pre>

    Wichtig ist, das die Abfragen im Rahmen einer Transaktion läuft, die im Transaktions-Isolationslevel Snapshot gestartet wurde. Darüber hinaus sollte die Datenabfrage in einem separaten Thread laufen. Ich würde dann die die StoredProc in einer Schleife solange aufrufen bis alle Datensätze übertragen worden sind.

    Wie man allerdings die verschiedenen Abfrageergebnisse in ein DBGrid integriert weiss ich nicht (man könnte auch alles selber in die Hand nehmen und zur Anzeige ein DrawGrid verwenden).

    Tschüß

    Torste

    Comment

    Working...
    X