Zum Inhalt springen

Dynamisches Nachladen von Datensätzen mit ADO/ASP


Varix

Empfohlene Beiträge

Ich habe folgendes Problem:

Mein in ASP programmiertes Gästebuch greift per ADO auf eine Datenbank mit mehr als 4000 Gästebucheinträgen zu. Im Gästebuch kann man Seitenweise vor- und zurückblättern. Jede Seite enthält 20 Gästebucheinträge.

Die SELECT-Anweisung liest alle Datensätze aus der Datenbank in ein RecordSet. Problem dabei: Für jeden Abrufer des Gästebuchs werden so alle Datensätze in den Arbeitsspeicher des IIS geladen, was gut 2 MB sind. Da ich viele Abrufe auf dem Gästebuch habe, ist das ein Problem.

Mit RecordSet.MaxRecords habe ich jetzt übergangsweise die Satz der Datensätze begrenzt.

Frage:

Ist es möglich (wie?) ADO so zu verwenden, dass immer z.B. 100 Datensätzen aus der Datenbank gelesen werden. Wird im RecordSet dann auf den 101 Datensatze gesprungen, werden automatisch die nächsten 100 geladen usw. Das ganze sollte natürlich vorwärts und rückwärts funktionieren. Sowas muss es doch geben!?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Moin,

das klingt nach MS-SQL-Server oder irre ich mich?

Dann kannst du eine laufende Zeilennummer in der Ausgabe erreichen und entsprechend auswerten, wenn du so etwas machst:

select *, (Select Count (*) FROM Tabelle T2 WHERE T2.id < T1.id)+1 as rownum

from Tabelle T1;

Wobei id bei mir ein Autowert ist. Wenn du nun also seitenweise puffern willst (z.B. 20 pro Seite) und du blätterst zu Seite 5 wätre das (Achtung, uingetestet)

select *, (Select Count (*) FROM Tabelle T2 WHERE T2.id < T1.id)+1 as rownum

from Tabelle T1

where (Select Count (*) FROM Tabelle T2 WHERE T2.id < T1.id)+1 between 101 and 120;

hth

Reinhold

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Reinhold,

nein, es ist kein SQL-Server, sondern ein spezieller Datenbanktreiber der Firma Merant. Dieser unterstützt das Feld rowid, so dass man das so wie von Dir vorgeschlagen machen könnte.

Aber, ich dachte eigentlich, dass wenn ADO so viele gute Dinge kann, so etwas von ADO doch dann auch selbst erledigt werden könnte. So muss ich ja auf jeder Seite des Gästebuches einen neuen SELECT-Befehl ausführen. Da muss es doch eine bessere Lösung geben.

Anderes fiktives Beispiel:

Ich hätte z.B eine Datenbank mit 10 Mio. Datensätzen und will diese als CSV-Datei ausgeben, mache SELECT * usw. Dann läd ADO die ganze Datenbank in ein RecordSet. Wenn ich das verhindern will, z.B. weil der PC nicht genügend Arbeitsspeicher hat, soll ich in der Tat die Datenbank mit einzelnen SELECT-Befehlens solange Schritt für Schritt einlesen und ausgeben, bis alle Datensätze durch sind?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Aber, ich dachte eigentlich, dass wenn ADO so viele gute Dinge kann, so etwas von ADO doch dann auch selbst erledigt werden könnte. So muss ich ja auf jeder Seite des Gästebuches einen neuen SELECT-Befehl ausführen. Da muss es doch eine bessere Lösung geben.

Dein Gästebuchskript besteht ja wohl hoffentlich aus EINER EINZIGEN ASP-Datei, oder? Dann kannst du den Anfangs- und Endwert für die between-Angaben nämlich anhand der Seitenzahl errechnen und so dein SQL dynamisch zusammenbasteln.

Wenn nicht hast du wohl einen Denfehler in deiner Logik ...

Reinhold

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...