Varix Geschrieben 4. März 2008 Teilen Geschrieben 4. März 2008 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!? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Reinhold Geschrieben 4. März 2008 Teilen Geschrieben 4. März 2008 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Varix Geschrieben 5. März 2008 Autor Teilen Geschrieben 5. März 2008 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? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Reinhold Geschrieben 5. März 2008 Teilen Geschrieben 5. März 2008 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.