Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi ExecSQL + Speicherverbauch (https://www.delphipraxis.net/62148-execsql-speicherverbauch.html)

DelphiAndreas 31. Jan 2006 14:17

Datenbank: DBase • Zugriff über: BDE

ExecSQL + Speicherverbauch
 
Da das Thema jetzt geschlossen ist (war wirklich vollkommen falsch da :mrgreen: ) noch einmal die Frage:

Wie bekomme ich es hin, dass sich der Speicherverbrauch eines BDE-basierten Programmes nicht bei jedem Aufruf von ExecSQL erhöht? :gruebel:

Memo 31. Jan 2006 20:24

Re: ExecSQL + Speicherverbauch
 
Zitat:

Zitat von DelphiAndreas
Da das Thema jetzt geschlossen ist (war wirklich vollkommen falsch da :mrgreen: ) noch einmal die Frage:

Deine ursprüngliche Frage hat wirklich nichts mit dieser zu tun.
Zitat:

Wie bekomme ich es hin, dass sich der Speicherverbrauch eines BDE-basierten Programmes nicht bei jedem Aufruf von ExecSQL erhöht?
Die Frage gebe ich unbenutzt an Dich zurück. Wie kriegst Du es hin den Speicherverbrauch zu erhöhen? Wo schaust Du wie, nach was um es zu belegen? Wie sieht die Syntax aus?
Das Abfragen Speicheplatz(leidlich) benötigen sollte dabei aber unstrittig sein!


PS. Du darfst Dir ruhig ein wenig mehr Zeit bei der formulierung Deiner Frage lassen. Das Ergebnis der Antwort kann nur so gut sein wie die Frage.

DelphiAndreas 1. Feb 2006 06:48

Re: ExecSQL + Speicherverbauch
 
okay, dann fang ich ganz langsam nochmal an: :mrgreen:

1. Ich habe eine Datenbank-Anwendung, bei der ganz oft die SQL-Befehle INSERT oder UPDATE verwendet werden. Diese müssen mit ExecSQL ausgeführt werden. Vorher schließe ich natürlich ganz ordnungsgemäß das Query und trage dann den SQL-Befehl ein.

2. Wenn man die Anwendung im Windows-Taskmanager verfolgt, kann man eine stetige erhöhung des Speicherverbrauchs bei jeder ExecSQL-Anweisung beobachten.

3. Das ist das eigentliche Problem: Wenn man das Programm zu lange benutzt ohne es neu zu starten stürzt es mit der Meldung "Zu wenig Arbeitsspeicher für diese Operation" ab. Den Moment des Absturzes konnte ich zwar mithilfe von ein paar Einstellungen in der BDE nach hinten verschieben, aber eigentlich möchte ich, dass das so gut wie nie passiert.

Deshalb die Frage: Wie verhindere ich die Erhöhung des Speicherverbrauchs beim Ausführen von ExecSQL?

mikhal 1. Feb 2006 06:55

Re: ExecSQL + Speicherverbauch
 
Versuch mal ein FlushBuffers abzusetzen, damit deine Änderungen auch direkt in die Tabellen geschrieben werden.

Hintergrund: Die BDE versucht immer deine Anwendung performant zu halten und speichert deshalb Änderungen an deiner Datenbank im Speicher. Sie schreibt sie dann oft erst nach Beendigung des Programms tatsächlich in die Datenbank!

Grüße
Mikhal

DelphiAndreas 1. Feb 2006 07:15

Re: ExecSQL + Speicherverbauch
 
wenn ich das direkt hinter das ExecSQL setze sagt er mir immer: Operation bei geschlossener Datenmenge nicht ausführbar.

Jetzt ist natülich die Frage: Warum ist die Datenmenge geschlossen?

Außerdem habe ich beobachtet, wenn das Programm dann angibt zu wenig Arbeitsspeicher zu haben gehen außer der letzten SQL-Operation keine Daten verloren, d.h. die sind alle ordnungsgemäß in die Tabelle geschrieben.

alzaimar 1. Feb 2006 07:58

Re: ExecSQL + Speicherverbauch
 
Gibts keinen Code? Die Frage, wieso ein Fehler bezüglich einer geschlossenen Datenmenge beim Ausführen von 'ExecSQL' kommt, hegt den Verdacht, das an deinem Code vielleicht etwas faul ist.

ExecSQL öffnet die Datenmenge nicht, sonder führt nur den Befehl aus, weswegen hinterher auch keine (offene) Datenmenge in der Query stehen kann.

DelphiAndreas 1. Feb 2006 08:07

Re: ExecSQL + Speicherverbauch
 
Zitat:

Zitat von alzaimar
Gibts keinen Code? Die Frage, wieso ein Fehler bezüglich einer geschlossenen Datenmenge beim Ausführen von 'ExecSQL' kommt, hegt den Verdacht, das an deinem Code vielleicht etwas faul ist.

Ich hätte wohl noch meinen Vorposter zitieren müssen, allerdings ist mir jetzt klar, weshalb beim ausführen von "FlushBuffers" der oben genannte Fehler kommt. Die Datenmenge ist einfach nicht geöffnet, aber wegen mir braucht sie das auch nicht zu sein ;-)

der code ist ganz normal:

Delphi-Quellcode:
sqlQuery.SQL.text := 'INSERT INTO tabelle' usw.
sqlQuery.ExecSQL;
aber wie gesagt, das funktioniert ja auch, mein Problem wäre nur der Speicherverbrauch und der Absturz der dann irgendwann kommt.

Gruß
Andreas

Memo 1. Feb 2006 12:43

Re: ExecSQL + Speicherverbauch
 
Ich schaffe es nicht die Speichergrenzen zu erreichen.
Ob nun mit FlushBuffers oder ohne. Paradox und DBASE.
Du wirst wohl irgendwo an irgendwelchen Einstellungen geschraubt haben oder es ist irgendwas anderes.
Wo fängt man mit rätseln nun an? Ein paar Vorschläge, sonst fällt mir zu dem Thema nichts weiter ein:
- Tabellenlevel (unter den BDE-Einstellungen)
- BDE aktuell(ich habe 5.01installiert)?
- Query-Einstellung im OI verdreht(nur welche?)?
- führst Du Dein Programm aus Delphi heraus aus und würgst es öfters mal ab(Strg+F2)?

DelphiAndreas 1. Feb 2006 12:50

Re: ExecSQL + Speicherverbauch
 
das problem trat auch immer mit einer frischinstallierten BDE auf, auf jedem Rechner bei dem entsprechend viele Datensätze in die Datenbank eingetragen wurden.

- tabellenlevel ist 7, das einzige was ich da verändert habe ist die Spracheinstellung (FoxPro German 437)
- 5.01 hab ich auch
-
- aus delphi heraus ausführen und abwürgen muss ich zwar auch manchmal, aber wie gesagt es trat auch auf anderen PCs ohne Delphi auf.

Ich kann nicht genau sagen nach wie vielen Ausfü+hrungen von ExecSQl das Probelm auftritt, aber es muss schon so im hunderter-Bereich liegen.

EDIT: Ich seh grad, du benutzt Delphi7 und ich bin noch bei Delphi6, mag es daran leigen? Irgendwann demnächst werd ich nämlich auf Delphi2006 umgestellt, wenns dann weg wär wärs ja okay, ich habe nur das Gefühl es ist ein BDE-Problem

Memo 1. Feb 2006 13:00

Re: ExecSQL + Speicherverbauch
 
Zitat:

Zitat von DelphiAndreas
Ich seh grad, du benutzt Delphi7 und ich bin noch bei Delphi6, mag es daran leigen? Irgendwann demnächst werd ich nämlich auf Delphi2006 umgestellt, wenns dann weg wär wärs ja okay, ich habe nur das Gefühl es ist ein BDE-Problem

Delphi 5 und 2005 hätte ich auch noch im Angebot. Aber wie Du selbst festgestellt hast ist sehr unwahrscheinlich das es an der Delphi-Version liegt.
Hast Du mal ein Stück Programm mit dem man es reproduzieren kann?
Und was steht in der BDE unter System-Init?


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:21 Uhr.
Seite 1 von 2  1 2      

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