Hallo,
ich fülle einzelne Picklists meiner Spalten eines DBGrid abh. von deren FieldName zur Laufzeit mit einer TStringList. Soweit so gut. Jetzt stelle ich aber fest, das mir FastMM nach Beendigung des Programms mitteilt, dass die jeweilige erzeugte Anzahl TStringLists nicht freigegeben wurde.
Ich habe schon mehrere Versuche gemacht, diese Listen per Free freizugeben, laufe dabei jedoch immer auf Fehler. Selbst das zus. Verwalten der zugewiesenen Listen in einer Objektliste inkl. anschließendem Durchlauf + Free hilft nichts.
Was übersehe ich und warum gibt das DBGrid die Listen nicht selber frei
Hier noch ein wenig Code:
ich fülle einzelne Picklists meiner Spalten eines DBGrid abh. von deren FieldName zur Laufzeit mit einer TStringList. Soweit so gut. Jetzt stelle ich aber fest, das mir FastMM nach Beendigung des Programms mitteilt, dass die jeweilige erzeugte Anzahl TStringLists nicht freigegeben wurde.
Ich habe schon mehrere Versuche gemacht, diese Listen per Free freizugeben, laufe dabei jedoch immer auf Fehler. Selbst das zus. Verwalten der zugewiesenen Listen in einer Objektliste inkl. anschließendem Durchlauf + Free hilft nichts.
Was übersehe ich und warum gibt das DBGrid die Listen nicht selber frei
Hier noch ein wenig Code:
Code:
procedure TBB_DataProvider.BuildLookupColumns(var cDBGrid : TJvDBGrid); var x : integer; cList : TList; begin for x := 0 to cDBGrid.Columns.Count - 1 do begin if (cDBGrid.Columns[x].FieldName = 'Artikel') OR (cDBGrid.Columns[x].Title.Caption = 'Artikel') then cDBGrid.columns[x].PickList := GetItemPickList() [...] end; function TBB_DataProvider.GetItemPickList : TStringList; var cItemDataSet : TDataSet; begin cItemDataSet := cDBProvider.GetSQLDataset('SELECT Artikel FROM tbl_Artikel', TRUE); try Result := cDBProvider.GetStringListOfFieldValues(cItemDataSet, 0); finally cItemDataSet.Free; end; end; function TBB_DBProvider.GetStringListOfFieldValues(var cDataSet : TDataSet; iFieldNo : integer) : TStringList; begin Result := GetStringListOfFieldValues(cDataSet, iFieldNo, 0, ''); end; function TBB_DBProvider.GetStringListOfFieldValues(var cDataSet : TDataSet; iFieldNo, iAddFieldNo : integer; sSeparator : string) : TStringList; var cNewStringList : TStringList; begin cNewStringList := TStringList.Create; if cDataSet.RecordCount > 0 then begin cDataSet.First; while not cDataSet.Eof do begin if iAddFieldNo = 0 then cNewStringList.Add(cDataSet.Fields[iFieldNo].asString) else cNewStringList.Add(cDataSet.Fields[iFieldNo].asString + sSeparator + cDataSet.Fields[iAddFieldNo].asString ); cDataSet.Next; end; end else cNewStringList.Add(''); Result := cNewStringList; end;
Comment