![]() |
Datenbank: SQLite • Version: 3 • Zugriff über: ASQLite Komponenten
AcessViolation?
Hallo,
leider habe ich schon wieder ein Problem. Sorry, falls ich nerve. Ich habe folgende Function:
Delphi-Quellcode:
Der Aufruf sieht so aus:
function getWNamenByID(id:String):TStrings;
var sl:TStrings; begin roster.sqldings.Active := false; roster.sqldings.SQL.Clear; roster.sqldings.SQL.Add('SELECT * FROM namen where workerID = ' +id+';'); roster.sqldings.Active := true; sl.create; //sl.Clear; while not roster.sqldings.Eof do begin sl.Add(kalender.sqldings.FieldByName('name').AsString); roster.sqldings.Next; end; Result := sl; sl.Free; end;
Delphi-Quellcode:
Leider bekomme ich (laut Haltepunkt) beim Aufruf eine AccessViolation und ich weiß nicht wieso...
roster.namen.Items.AddStrings(func.getWNamenByID(wid.Caption))
Gruß, Andreas |
Re: AcessViolation?
Du solltest einmal
Delphi-Quellcode:
versuchen.
sl:=tStringList.create;
Und der Hinweis auf Parameter war ernst gemeint! Gruß K-H |
Re: AcessViolation?
Hallo,
danke für die Hilfe. Die AV ist jetzt weg. Allerdings stehn in der ListBox (namen) keine Einträge. Das mit den Parametern muß ich erst lernen. Ich versteh das noch nicht ganz. Aber ich bin dabei, darüber zu lesen. Dauert nur leider. Gruß, Andreas |
Re: AcessViolation?
nach "sl.free;" gibt es auch nichts mehr zum Anzeigen.
Delphi-Quellcode:
Vorsicht! Die Parameterübergabe ist nicht bei allen Komponenten gleich!
Query.sql.text:='select * from tabelle where wert=:_parameter';
Query.sql.parambyname('_parameter').asstring:='12345'; Gruß K-H |
Re: AcessViolation?
Danke, das wars. Ich hatte das sl.free; extra nach der Reultübergabe geschrieben, weil ich dachte die sl wird dann nicht mehr gebraucht und schreibt nur den Speicher voll. Wenn ich das sl.free; auskommentiere, gehts aber, danke!
Für die Parameter, lese ich grad in den Aducom Samples rum. Gruß und Dank, Andreas |
Re: AcessViolation?
Blöde Frage... aber gibt es die Möglichkeit bei einem Element der Stringlist den Tag zu übergeben? Ich möchte da gerne die ID des Datensatzes rein schreiben, weil die ausgelesenen "namen" doppelt sein können.
|
Re: AcessViolation?
Ich hätte da noch einen Vorschlag für das Design deiner Funktion:
Das macht man so nicht:
Delphi-Quellcode:
Besser:
function TuWas1 : TStrings;
begin end;
Delphi-Quellcode:
Grund:
procedure TuWas2( StrLst : TStrings );
begin end; Hier kann es knallen ... und könnte nur mit einem try...except abgefangen werden
Delphi-Quellcode:
Hier habe ich das Erzeugen und Zerstören selber in der Hand
procedure TestVonTuWas1;
var sl : TStrings; begin sl := TuWas; // sl kann jetzt initialisiert sein, muss aber nicht sl.Free; // <- hier kann es zu einer AV kommen end;
Delphi-Quellcode:
Zu den IDs und der Stringlist ... das geht so naja
procedure TestVonTuWas2;
var sl : TStrings; begin sl := TStringList.Create; try TuWas2( sl ); finally sl.Free; end; end; Der richtige Weg führt über entsprechende Daten-Klassen die in einer ObjectList gespeichert werden. Den ListView-Inhalt lässt man einfach virtuell von der ObjectList füllen. Stichworte dazu ![]() ![]() |
Aussagekräftiger Titel
Bitte gib deinem Beitrag einen aussagekräftigen Titel. Der jetzige Titel lässt nicht erkennen, um was für ein Problem oder Frage es sich handelt. Um den Titel zu ändern, editiere einfach deinen ersten Beitrag. Damit erleichterst du das Auffinden deines Beitrages mit der Suche und ersparst anderen Mitglieder ein unnötiges Öffnen deines Beitrages.
|
Re: AcessViolation?
Hallo,
du könntest die Doppelten Einträge mit der Stringlist vermeiden. So etwa: sL.Sorted := true; //Muss vorher gesetzt werden! sL.Duplicates := dupIgnore; Wenn du ID's in die Stringlist mit packen möchtest dann solltest du nicht "Add" nehmen sondern mit dem Object der Stringlist Arbeiten. So etwa: sL.AddObject('meinText',TObject(EineZahl)); Auslesen ist dann auch ganz einfach. Findest hier garantiert 1000 Beispiele dafür. |
Re: AcessViolation?
Guten Abend,
ich danke Euch. Die doppelten Einträge, sind Absicht. Aber mit dem AddObject habe ich es hinbekommen. Vielen Dank! Leider fällt mir kein besserer Titel für den Thread ein... Gruß, Andreas |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:29 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-2025 by Thomas Breitkreuz