Autor Beitrag
Spatz
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 57

WIN 2k
D7E
BeitragVerfasst: Do 17.03.05 14:01 
Hallo

Um auf meine MySQL Datenbank zuzugreifen, verwende ich die MySQL.pas von hier.
Nun mein Problem: Um Werte aus der DB auszulesen, bekomme ich bei meiner Anfrage einen Pointer (PMySQL) auf das Ergebnisobjekt (TMySQL) zurück. Das Problem hierbei ist nun aber, dass ich nicht weiss, wie ich dieses Objekt wieder aus dem Speicher freigeben kann, denn wenn ich eine Abfrage mit 1000 Resultatzeilen ausführe, so füllt mir dies den Speicher um ca. 5-10mb (und dies jedes Mal!). Irgentwelche Tips, wie ich dies lösen könnte?

Besten Dank
chrisw
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 439
Erhaltene Danke: 3

W2K
D7
BeitragVerfasst: Do 17.03.05 16:29 
Ich nutze immer die "Direct Mysql Objects v.1.1" von

hier

damit hatte ich noch nie Probleme !

_________________
Man sollte keine Dummheit zweimal begehen, die Auswahl ist schließlich groß genug.
Niho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 19



BeitragVerfasst: Mo 18.04.05 22:37 
@Spatz:
Nicht mysql_store_result sondern mysql_use_result verwenden. Näheres dazu im MySQL Handbuch.
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Mi 20.04.05 08:10 
Moin!

Auf den ersten Blick fallen mir die Funktionen mysql_close und mysql_free_result auf. Hast du dir die schon mal genauer angesehen?

Gruß
Tino
Niho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 19



BeitragVerfasst: So 24.04.05 10:16 
user profile iconTino hat folgendes geschrieben:
Auf den ersten Blick fallen mir die Funktionen mysql_close und mysql_free_result auf. Hast du dir die schon mal genauer angesehen?

Klar muss im Anschluss mit mysql_free_result eine Abfrage wieder freigegeben werden.

Allerdings lädt mysql_store_result erstmal die komplette Abfrage in den Speicher - nutzt also unter Umständen viele Speicher vollkommen unnötig.

mysql_use_result hingegen lädt immer nur einen Teil der Abfrage. Sobald die entsprechenden Records ausgelesen wurden wird der verwendete Speicher automatisch wieder freigegeben und die nächsten Records werden von der Datenbank abgefragt.

Klar muß hierfür die Datenbank Verbindung aufrecht erhalten werden - und es darf auch keine andere Abfrage zwischendurch über diese Connection abgehandelt werden. Aber der große Vorteil ist: Es sind nie alle Daten zur gleichen Zeit im Speicher! Und es werden auch nicht alle Daten sofort geladen - es entsteht also keine größere Wartezeit für den User.