Zum Inhalt springen

Dynamisches Nachladen von Datensätzen mit ADO/ASP


Empfohlene Beiträge

Geschrieben

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!?

Geschrieben

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

Geschrieben

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?

Geschrieben

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

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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...