Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Speicherproblem bei TCombobox.Items (https://www.delphipraxis.net/118415-speicherproblem-bei-tcombobox-items.html)

sonicus83 7. Aug 2008 11:58


Speicherproblem bei TCombobox.Items
 
Moin,

ich hab mein Programm mit FastMM4 mal auf Speicherlecks untersucht und viele bereits abgeschafft. Eins allerdings schaffe ich nicht abzuschaffen.

Zweck der folgenden Codezeilen:
Ich habe eine ComboBox, deren Inhalt (Items) aus einer Datenbank gefüllt werden soll..

In der Formular-Unit:

Delphi-Quellcode:
cbOrt.Items := fillStrings(ADOQuery,'teOrte','ortBeschreibung');
In der Hilfsunit:

Delphi-Quellcode:
function fillStrings(var ADOQuery: TADOQuery; tabName: string; fieldName: string) : TStringList;
var list : TStringList;
begin
  ADOQuery.SQL.Clear;
  ADOQuery.SQL.Append('SELECT '+fieldName+' FROM '+tabName);
  ADOQuery.Open;
  list := TStringList.create;
  list.Clear;
  while not ADOQuery.Eof do begin
    list.Append(ADOQuery.Recordset.Fields.Item[fieldName].Value);
    ADOQuery.Next;
  end;
  fillStrings := list;
  ADOQuery.Close;
end;
Pro Aufruf von fillStrings sind nach Schließen des Formulars nun noch 1x TStringList nicht freigegeben. Ich habe schon mehrere Sachen probiert (items.free vor fillStrings, items.free in FormDestroy,..) , nur keine davon half bisher.

Wer hat eine Idee, wie ich das gelöst bekomme? Danke..

mkinzler 7. Aug 2008 12:01

Re: Speicherproblem bei TCombobox.Items
 
Ich würde die Liste als Parameter übergeben

DeddyH 7. Aug 2008 12:02

Re: Speicherproblem bei TCombobox.Items
 
Versuch das mal so:
Delphi-Quellcode:
procedure fillStrings(var ADOQuery: TADOQuery; tabName: string; fieldName: string; const sItems: TStrings);
begin
  ADOQuery.SQL.Clear;
  ADOQuery.SQL.Append('SELECT '+fieldName+' FROM '+tabName);
  ADOQuery.Open;
  sItems.BeginUpdate;
  try
    sItems.Clear;
    while not ADOQuery.Eof do begin
      sItems.Append(ADOQuery.Recordset.Fields.Item[fieldName].Value);
      ADOQuery.Next;
    end;
    ADOQuery.Close;
  finally
    sItems.EndUpdate;
  end;
end;
Als sItems übergibst Du nun ComboBox.Items.

[edit] Markus, 2 Doofe, ein Gedanke :zwinker: [/edit]

sonicus83 7. Aug 2008 13:10

Re: Speicherproblem bei TCombobox.Items
 
Ok, danke, so funktioniert es..

Das mit const beim Parameter fehlte mir, mit var meckerte er rum.. da muss ich wohl nochmal n bisschen was nachholen an Wissen :roll:

Danke


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:43 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