AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi unbekanntes Speicherleck (BDE / MS-SQL)

unbekanntes Speicherleck (BDE / MS-SQL)

Ein Thema von PT_Spawn · begonnen am 24. Apr 2007 · letzter Beitrag vom 26. Apr 2007
Antwort Antwort
Seite 2 von 2     12
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.173 Beiträge
 
Delphi 10.4 Sydney
 
#11

Re: unbekanntes Speicherleck (BDE / MS-SQL)

  Alt 25. Apr 2007, 15:06
Zitat von PT_Spawn:
Die BDE würde ich auch nicht freiwillig nutzen... leider gehört das zur Anforderung an das Zielsystem...
Wann wurden diese Anforderungen aufgestellt? 1840?

Zitat von PT_Spawn:
Wenn ich das nun garnicht in den Griff bekomme, dann werde ich zwangsläufig alles mit ADO programmieren...
Mach dich lieber mit ADO bekannt. Für MS SQL-Server sollte man unter Win32 nichts anderes nehmen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#12

Re: unbekanntes Speicherleck (BDE / MS-SQL)

  Alt 26. Apr 2007, 16:58
Hallo,

- try finally benutzen

- das First nach dem Open kann weg

- mit memcheck mal prüfen, wo das Leck ist
oder zumindestens, dass nicht an deinem Programm liegt

- Prepare / UnPrepare direkt benutzen
(es gab mal nen Bug)

Ausserdem ist das hier komisch:
Result := Format('(SELECT MIN(PK_TProjekt) FROM TeilProjekte WHERE ProjektNummer=%s AND Bereich=%s)',
[VerifyData(DBCheckQuery.Fields[0]), VerifyData(DBCheckQuery.Fields[1])]);
DBCheckQuery.Close;

Du rufst dein VerifyData nochmal auf, ohne die Query vorher zu schliessen.


Ansonstens eh immer
- Unidirectional=True für die Query setzen,
sonst puffert die Bde alles zwischen
dann geht aber kein "Last", habe ich aber auch nicht gesehen



Ich würde sogar soweit gehen,
die Query hier lokal zu erzeugen.
Vergleichen mit der Netzlast, die erzeugt wird,
merkt man das überhaupt nicht.


Zu den Parametern:
Delphi-Quellcode:
with DBCheckQuery do
begin
  SQL.Clear;
  SQL.Add('SELECT MIN(PK_TProjekt) FROM TagesLeistungen ');
  SQL.Add('WHERE PK_TagLeistung = :PK_TagLeistung');
  ParamByName('PK_TagLeistung').AsString:= DBQueryArchive.Fields[0].AsString;
end;
Das DBQueryArchive.Fields[0].AsString würde ich über einen Parameter
(der Funktion) übergeben.

Der Vorteil ist die bessere Lesbarkeit.
Ausserdem landet so eine Query im Query-Cache der Datenbank,
muss also nicht jedesmal neu vom SQL-Server übersetzt werden.
Das ist zumindestens bei Oracle und mssql 2005 so (ob der 2000er das schon kann ???)



Heiko
Heiko
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:21 Uhr.
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