AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

AcessViolation?

Ein Thema von Sanguis · begonnen am 18. Mär 2010 · letzter Beitrag vom 18. Mär 2010
Antwort Antwort
Sanguis

Registriert seit: 20. Jul 2005
Ort: Essen
146 Beiträge
 
#1

AcessViolation?

  Alt 18. Mär 2010, 17:22
Datenbank: SQLite • Version: 3 • Zugriff über: ASQLite Komponenten
Hallo,

leider habe ich schon wieder ein Problem. Sorry, falls ich nerve.

Ich habe folgende Function:
Delphi-Quellcode:
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;
Der Aufruf sieht so aus:
roster.namen.Items.AddStrings(func.getWNamenByID(wid.Caption)) Leider bekomme ich (laut Haltepunkt) beim Aufruf eine AccessViolation und ich weiß nicht wieso...

Gruß,
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#2

Re: AcessViolation?

  Alt 18. Mär 2010, 17:25
Du solltest einmal sl:=tStringList.create; versuchen.

Und der Hinweis auf Parameter war ernst gemeint!

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Sanguis

Registriert seit: 20. Jul 2005
Ort: Essen
146 Beiträge
 
#3

Re: AcessViolation?

  Alt 18. Mär 2010, 17:32
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
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#4

Re: AcessViolation?

  Alt 18. Mär 2010, 17:41
nach "sl.free;" gibt es auch nichts mehr zum Anzeigen.

Delphi-Quellcode:
Query.sql.text:='select * from tabelle where wert=:_parameter';
Query.sql.parambyname('_parameter').asstring:='12345';
Vorsicht! Die Parameterübergabe ist nicht bei allen Komponenten gleich!

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Sanguis

Registriert seit: 20. Jul 2005
Ort: Essen
146 Beiträge
 
#5

Re: AcessViolation?

  Alt 18. Mär 2010, 17:49
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
  Mit Zitat antworten Zitat
Sanguis

Registriert seit: 20. Jul 2005
Ort: Essen
146 Beiträge
 
#6

Re: AcessViolation?

  Alt 18. Mär 2010, 18:07
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.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

Re: AcessViolation?

  Alt 18. Mär 2010, 18:45
Ich hätte da noch einen Vorschlag für das Design deiner Funktion:

Das macht man so nicht:
Delphi-Quellcode:
function TuWas1 : TStrings;
begin
end;
Besser:
Delphi-Quellcode:
procedure TuWas2( StrLst : TStrings );
begin
end;
Grund:

Hier kann es knallen ... und könnte nur mit einem try...except abgefangen werden
Delphi-Quellcode:
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;
Hier habe ich das Erzeugen und Zerstören selber in der Hand
Delphi-Quellcode:
procedure TestVonTuWas2;
  var
    sl : TStrings;
  begin
    sl := TStringList.Create;
    try
      TuWas2( sl );
    finally
      sl.Free;
    end;
  end;
Zu den IDs und der Stringlist ... das geht so naja

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 Delphi-Referenz durchsuchenTListView.OwnerData Delphi-Referenz durchsuchenTListView.OnData
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

Aussagekräftiger Titel

  Alt 18. Mär 2010, 18:47
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von defede
defede

Registriert seit: 10. Aug 2006
Ort: Stötten am Auerberg
72 Beiträge
 
Delphi 7 Professional
 
#9

Re: AcessViolation?

  Alt 18. Mär 2010, 18:50
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.
Invader Zim
Obey Zim
Fear Zim
  Mit Zitat antworten Zitat
Sanguis

Registriert seit: 20. Jul 2005
Ort: Essen
146 Beiträge
 
#10

Re: AcessViolation?

  Alt 18. Mär 2010, 23:18
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
  Mit Zitat antworten Zitat
Antwort Antwort


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 02:09 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