![]() |
Datenbank: MYSQL • Version: 4.1 • Zugriff über: Direkt
Funktion mit eine Liste :TStrings
Delphi-Quellcode:
So lade ich die Lagerliste in eine TCombPox Componente. Wenn ich aber diese Zeile ( //Lagerliste.Free;) Ausdokumentiere um die Varialbe Lagerliste aus dem Speicher zu entfernen, bekomme ich beim Aufruf dieser Funktion eine Zugriffsverlestzung. Weil ich die Lagerliste aus dem Speicher entnommen haben. Aber Warum ich habe doch den Inhalt davor an ReSult übergeben..
Function Tf_hauptfenster.GibLagerListe: TStrings;
var Lagerliste: TStrings; begin Lagerliste := TStringList.Create; with dm.mqr_TEMP do begin Close; Sql.Clear; sql.Add('SELECT * FROM lager ORDER BY lg_bezeichnung ASC'); open; While not Eof do begin Lagerliste.Add(Fieldbyname('lg_bezeichnung').asstring); next; end; close; end; Result := Lagerliste; //Lagerliste.Free; end; |
Re: Funktion mit eine Liste :TStrings
nein du hast nicht den INHALT sondern den ZEIGER der Liste übergeben. probier das mal mit
Delphi-Quellcode:
Oder war das Append :gruebel:
Result.Assign(Lagerliste)
denn wenn du den Zeiger übergibst und Lagerliste freigibst ist das Result auch futsch weil glaube ich auch freigegeben. |
Re: Funktion mit eine Liste :TStrings
moin,
die Lagerliste wird eigentlich ja nicht benötigt da es ja ein result gibt und dann sollte es auch keine Zugriffsverletztung mehr geben. |
Re: Funktion mit eine Liste :TStrings
Zitat:
Zitat:
Delphi-Quellcode:
Somit hast du das create und free der stringliste an einer Stelle und minimierst die Gefahr von Speicherlecks durhc das vergessen vom freigeben der Lagerliste.
Procedure Tf_hauptfenster.blablaLagerListe(Lagerliste: TStrings); (edit: in Procedure geändert)
begin Lagerliste.clear; with dm.mqr_TEMP do begin Close; Sql.Clear; sql.Add('SELECT * FROM lager ORDER BY lg_bezeichnung ASC'); open; While not Eof do begin Lagerliste.Add(Fieldbyname('lg_bezeichnung').asstring); next; end; close; end; end; Procedure Aufruf; Var sl:tstings; begin sl:=tstringlist.create; try blablaLagerListe(sl); machnochwasmit(sl); finally sl.free; end; Mfg Frank |
Re: Funktion mit eine Liste :TStrings
so und jetzt machst du aus der Funktion noch eine Prozedur(keine Rückgabe) dann sollte es funktionieren :thumb:
|
Re: Funktion mit eine Liste :TStrings
Zitat:
|
Re: Funktion mit eine Liste :TStrings
Und zusätzlich noch statt
Delphi-Quellcode:
folgendes:
Function Tf_hauptfenster.blablaLagerListe(Lagerliste: TStrings)
Delphi-Quellcode:
Denn ansonsten wird es nichts in die übergeben StringList geschrieben und du hast nach dem Aufruf der Procedure noch den gleichen Inhalt in der SL wie vorher ;-)
Procedure Tf_hauptfenster.blablaLagerListe(var Lagerliste: TStringList)
Falls ich mich da in Bezug auf TStringList irre und es nicht als var übergeben werden muss, steinigt mich bitte ;-) |
Re: Funktion mit eine Liste :TStrings
du brauchst kein Var bei Objekten.
|
Re: Funktion mit eine Liste :TStrings
Oh! Okay wieder was gelernt... DAnke für den Hinweis ;-)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz