Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Out of Memory - beim öffnen nicht alle Datensätze laden? (https://www.delphipraxis.net/91809-out-memory-beim-oeffnen-nicht-alle-datensaetze-laden.html)

bidi 10. Mai 2007 10:38

Datenbank: postgres • Version: 8.2 • Zugriff über: ADO->ODBC

Out of Memory - beim öffnen nicht alle Datensätze laden?
 
Hallo!

Ich habe eine ADOTable die eine Tabelle representiert, welche ca. 5 Mio Datensätze hat. Die ADOTable ist eigentlich nur zum anfügen von neuen Datensätzen. Wenn ich die ADOTable öffne, dann versucht er erstmal alle Datensätze zu laden und das endet mit Out of Memory. Ich habe schon versucht MaxRecords auf 1 zu setzen. Gebracht hat's allerdings nichts. Was kann ich also tun AUßER einen Insert-Query zu verwenden?

Catbytes 10. Mai 2007 11:01

Re: Out of Memory - beim öffnen nicht alle Datensätze laden?
 
Hi,

möchte man mit SQL leere Datensätze holen, macht man das ja in der Regel mit

SQL-Code:
Select * from whatever WHERE 1=2
Probier doch deshalb bei der TTable einfach einen sinnlosen Filter zu setzen, der nichts liefert.

bidi 10. Mai 2007 11:23

Re: Out of Memory - beim öffnen nicht alle Datensätze laden?
 
Als 1=2 will er nicht. Aber entry_id=-1. Allerdings bringt das nichts. Nach dem Öffnen schaufelt er mir 1,5GB in den RAM. Vermutlich wird als Client-Seitig gefiltert.

Bernhard Geyer 10. Mai 2007 11:28

Re: Out of Memory - beim öffnen nicht alle Datensätze laden?
 
Wie ist die Curser-Location?

Kannst du keine Select-Query mit TOP bzw. Limit-Angabe schreiben?

Udontknow 10. Mai 2007 11:30

Re: Out of Memory - beim öffnen nicht alle Datensätze laden?
 
Will er nicht? Lautet so die Fehlermeldung? Ich habe noch keine DB kennengelernt, wo 0=1 oder so nicht funktioniert hätte... Vielleicht gibt´s da auch einen Befehl zum Beschränken der Lieferung, wie "fetch first 50 rows only" bei DB2.

Cu,
UDontknow

marabu 10. Mai 2007 11:34

Re: Out of Memory - beim öffnen nicht alle Datensätze laden?
 
Hallo,

ich würde eine empty query aufsetzen (SELECT * FROM tbl WHERE 1 = 2). Diese Query kann dann genauso wie jedes andere TDataset benutzt werden (Insert, Append, Delete, Edit). Damit sind kaum Änderungen am Code notwendig.

Grüße vom marabu

hoika 10. Mai 2007 13:39

Re: Out of Memory - beim öffnen nicht alle Datensätze laden?
 
Hallo,

für eine SQL-Datenbank sollte man die eine Table-Komponente benutzen
(kenne ich jetzt nur von der bde aus eigener Erfahrung).
Was spricht denn gegen die Insert-Query ?


Heiko

ice.icewing 10. Mai 2007 13:47

Re: Out of Memory - beim öffnen nicht alle Datensätze laden?
 
Wenn es nicht zu viel Aufwand macht würde ich die ADOTable durch eine Query ersetzen.
Wenn das nicht geht kann ein View auf die Tabelle nutzen bringen.
create View V_Name as select * from Tabelle where entry_id = (select max(entry_id) from Tabelle);
Dann gibst du deiner Table statt der Tabelle den View und bekommst nur noch den letzten Datensatz in von der Datenbank. Oder halt mit entry_id = -1 gar keinen. Es sollte aber dennoch möglich sein Daten in die Tabelle einzufügen.

icewing

bidi 10. Mai 2007 17:13

Re: Out of Memory - beim öffnen nicht alle Datensätze laden?
 
Hallo!

Vielen Dank für eure hilfe! Ich habe jetzt einen View erzeugt... funktioniert soweit.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:32 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz