Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Schleife mit Ini Datei: EAccesViolation (https://www.delphipraxis.net/4262-schleife-mit-ini-datei-eaccesviolation.html)

Stanlay Hanks 21. Apr 2003 20:04


Schleife mit Ini Datei: EAccesViolation
 
Hallo zusammen. Mein Gott...ich und die Ini Dateien.
Ich krieg bei folgendem Code immer eine EAccesViolation.
Ich habe ein EditFeld, in das ich einen Namen eingeben und eine Listbox, in der alle vorhandenen Kategorien sind. Jetzt will ich, dass das Programm den String einer zeile ausliest, eine IniDatei mit dem Namen des Strings öffnet und dann, falls der String aus dem Editfeld in der Ini Datei als Section existiert, den Namen der gerade durchsuchten Ini in die erste Zeile des StringGrid schreibt. (...Hoffentlich versteht ihr das, ich verstehs nämlich selber fast nicht :oops: )
Könnt ihr mir sagen, wo da der Fehler liegt?

Delphi-Quellcode:
procedure TForm1.BilderSuche(LBS1: TListbox);
var
BilderSuchIni : TIniFile;
BilderSuchInt : Integer;
begin
For BilderSuchInt := 0 to LBS1.Items.Count -1 do
BilderSuchIni := TIniFile.Create(PathS+LBS1.Items.Strings[BilderSuchInt]+'.ini');                                                                //PathS ist der Programmpfad             ;
Try
IF BilderSuchIni.SectionExists(Edit1.Text) THEN //  <--- Hier bekomm ich nen Error
StringGrid1.Cells[0,StringGrid1.RowCount-1] := LBS1.Items.Strings[BilderSuchInt];
StringGrid1.Cells[1,StringGrid1.RowCount-1] := Edit1.Text;
StringGrid1.Row := StringGrid1.Row +1;
end;
finally FreeAndNil(BilderSuchIni);
end;
end;
Danke fürs Lesen. Man liest sich. Stanlay

Daniel B 21. Apr 2003 20:12

Hallo,

das Create der Ini, vor die for-Schleife, Du erzeugst/öffnest ja ständig die gleiche Datei. ;)

Grüsse, Daniel :hi:

Daniel B 21. Apr 2003 20:13

Hallo,

und die Schleife ins try.

Delphi-Quellcode:
Ini.Create
try
  for
finally
end
Grüsse, Daniel :hi:

Stanlay Hanks 21. Apr 2003 20:18

Das Problem ist ja. Ich hab ja auch mehrere Ini Dateien.

Das ganze ist so ne Art von Bild verwaltung (Fast...). Ich hab eine IniDatei in der alle Kategorien gespeichert werden. Und die Einträge jeder Gruppe, werden in einer extra Ini Datei gespeichert (Also zz.B. für die Kategorie Geburtstag hab ich eine Geburtstag.ini in der dann Section wie [Torte], [Geschenke] usw. gespeichert werden. Die Kategorien lese ich bei Programmstart in eine Listbox ein. Jetzt soll die For Schleife bei jedem Druchlauf schauen, ob es in irgendeiner dieser Inis ein Bild (eine Section gibt) die den Namen aus Edit1 hat. Ich muss also ständig eine neue Ini Datei öffnen.

Daniel B 21. Apr 2003 20:19

Hallo,

*grmpfl*
In der falschen Sparte bist Du ja auch noch.
Programmieren allgemein gilt für alles andere was nicht mit Delphi zutun hat!
Ich verschiebe es mal nach Delphi-Language.

Grüsse, Daniel :hi:

Daniel B 21. Apr 2003 20:24

Hallo,

vielleciht wäre es besser/einfacher, alle Inis auf einmal zu laden, in StringLists o.ä., damit dann in ruhe Arbeiten und am Ende wieder alle beschreiben.

Grüsse, Daniel :hi:

Stanlay Hanks 21. Apr 2003 20:26

Da hast du natürlich recht. Aber dazu bräuchte ich ja eine ähnliche/fast gleiche Schleife, oder? (Ich hab ja eine unbekannte Anzahl an Kategorien, also Inis)

MrSpock 21. Apr 2003 20:28

Hallo Stanlay,
wie Daniel bereits erklärt hat, öffnest du in der for-Schleife alle Ini-Daten nacheinander. Der folgende try Block wird dann nur noch mit der zuletzt geöffneten Ini-Datei durchgeführt. Du musst nach do einen begin ... end Block benutzen:

Delphi-Quellcode:
For BilderSuchInt := 0 to LBS1.Items.Count -1 do
{ hier jetzt das BEGIN }
begin
  BilderSuchIni :=   TIniFile.Create(PathS+LBS1.Items.Strings[BilderSuchInt]+'.ini');                                                                //PathS ist der Programmpfad             ;
  Try
   IF BilderSuchIni.SectionExists(Edit1.Text) THEN
...
end;

Stanlay Hanks 21. Apr 2003 20:33

:wall: :wall: :wall: :wall: :wall: :wall: :wall: :wall: :wall:
DUMMMMMMMMMDUMMMMMDUMMMMM

Ich Depp. Man, tut mir leid, dass ich eúch aufgehalten hab. Das was ihr schreibt, hab ich zwar auch alles richtig gemacht und muss ich noch verbessern, aber die EAccesViolation hab ich bekommen, weil ich eine falsche, nämlich leere Listbox übergeben hab.


Tut mir leid, nächstes mal pass ich besser auf. (Schämmm)

Man liest sich (falls jetzt noch wer auf meine Fragen antwortet)
Stanlay. :oops:

Christian Seehase 21. Apr 2003 21:32

Moin Stanlay,

falls es Dich beruhigt:
Den Fehler an der falschen Stelle zu suchen, ist wohl jedem schon mehr als einmal passiert ;-)


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