| Autor | Beitrag | 
| the-chosen1 
          Beiträge: 16
 
 
 
 
 | 
Verfasst: Mo 05.04.10 17:25 
 
Hey Leute    Habe folgendes problem. Ich möchte beim Start meines Programmes eine Datei laden. Allerdings bekomme ich immer einen Accessviolation Error. 
 Was ich eigentlich machen will ist, dass das Programm beim Start eine Ini datei läd.
 Wie bekomm ich nun am einfachsten diese Zugriffsverletzung weg? | 
|  | 
| ALF 
          Beiträge: 1085
 Erhaltene Danke: 53
 
 WinXP, Win7, Win10
 Delphi 7 Enterprise, XE
 
 | 
Verfasst: Mo 05.04.10 17:29 
 
Welches Windows? Wo liegt die ini? ein bischen mehr infos währe nicht schlecht!
Gruss ALf
 _________________ Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg,  währe dieses Forum leer!
 | 
|  | 
| Gausi 
          Beiträge: 8550
 Erhaltene Danke: 478
 
 Windows 7, Windows 10
 D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
 
 | 
Verfasst: Mo 05.04.10 17:34 
 
Hallo und    in der Entwickler-Ecke,
 Eine Access-Violation deutet darauf hin, dass du ein Objekt  nicht (korrekt) erzeugt hast, bevor du darauf zugreifst. Zeig mal den entsprechenden Code. Ich tippe mal blind auf ein MyInifile.Create , wo ein MyInifile := TIniFile.Create  stehen sollte   ._________________ We are, we were and will not be.
 | 
|  | 
| the-chosen1  
          Beiträge: 16
 
 
 
 
 | 
Verfasst: Mo 05.04.10 17:35 
 
	  |  ALF hat folgendes geschrieben  : |  	  | Welches Windows? Wo liegt die ini? ein bischen mehr infos währe nicht schlecht! Gruss ALf
 | 
 Windows XP 32bit
 Delphi 7 Personal
 Die ini liegt im Programmverzeichnis. 
 Ansonsten hab ich das problem aber schon immer. Ich kann dateien z.b. In textfelder laden, wenn ich einen Butten drücke, wenn ich aber über Form1.Create die Datei lade, kommt dieser Access violation error. 
 Auch wenn ich über Form1.Create den Button ausführe
 Also
 Button10.click; kommt der Error
 ---Moderiert von  Narses: Beiträge zusammengefasst ---
 	  |  Gausi hat folgendes geschrieben  : |  	  | Hallo und  in der Entwickler-Ecke, 
 Eine Access-Violation deutet darauf hin, dass du ein Objekt  nicht (korrekt) erzeugt hast, bevor du darauf zugreifst. Zeig mal den entsprechenden Code. Ich tippe mal blind auf ein MyInifile.Create, wo ein MyInifile := TIniFile.Create stehen sollte
  . | 
 Ja ich habe ein MyInifile.Create da stehen    Wie sieht es denn korekt aus?
 		                       Delphi-Quelltext 
 									| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 
 | procedure TForm3.FormCreate(Sender: TObject);var
 TheMStream : TMemoryStream;
 Zero : char;
 ini: Tinifile;
 begin
 ini:=TIniFile.Create('.\settings.ini');
 form11.HotKey1.HotKey:= TextToShortcut(ini.ReadString('Hotkeys','Play',''));
 form11.HotKey2.HotKey:= TextToShortcut(ini.ReadString('Hotkeys','Next',''));
 ini.free;
 end;
 |  | 
|  | 
| ALF 
          Beiträge: 1085
 Erhaltene Danke: 53
 
 WinXP, Win7, Win10
 Delphi 7 Enterprise, XE
 
 | 
Verfasst: Mo 05.04.10 17:58 
 
was soll der Punkt
 		                       Delphi-Quelltext 
 									| 1:
 | ini:=TIniFile.Create('.\settings.ini');					 |  da drin?
 Das ist doch nicht PHPcode    Und wenn sie im Exe ordner liegt, ist es trotzdem nicht gut, auf verdacht die ini so zu laden!
 Besser ist,
 		                       Delphi-Quelltext 
 									| 1:
 | ini:=TIniFile.Create(ExtractFilePath(ParamStr(0)) + '\settings.ini');					 |  ist da sicherer.
 Gruss Alf_________________ Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg,  währe dieses Forum leer!
 | 
|  | 
| the-chosen1  
          Beiträge: 16
 
 
 
 
 | 
Verfasst: Mo 05.04.10 18:09 
 | 
|  | 
| Gausi 
          Beiträge: 8550
 Erhaltene Danke: 478
 
 Windows 7, Windows 10
 D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
 
 | 
Verfasst: Mo 05.04.10 18:12 
 
Wann wird der Code denn genau aufgerufen? Wenn das OnCreate einer Form aufgerufen wird, sind möglicherweise einige andere Formen noch nicht erzeugt. Wenn der Fehler beim ButtonClick nicht mehr kommt, könnte das an so etwas liegen... _________________ We are, we were and will not be.
 | 
|  | 
| the-chosen1  
          Beiträge: 16
 
 
 
 
 | 
Verfasst: Mo 05.04.10 18:15 
 
	  |  Gausi hat folgendes geschrieben  : |  	  | Wann wird der Code denn genau aufgerufen? Wenn das OnCreate einer Form aufgerufen wird, sind möglicherweise einige andere Formen noch nicht erzeugt. Wenn der Fehler beim ButtonClick nicht mehr kommt, könnte das an so etwas liegen... | 
 Unmittelbar bei dem Start des Programms. 
 Ich hab insgesamt 11 formen. Es werden aber nur 2 gezeigt.
 Ich füre den Script bei Form1.OnCreate aus. Da Form1 meine MainForm ist also sofort. 
 Aber wie könnte ich denn das problem umgehen? | 
|  | 
| Luckie Ehemaliges Mitglied
 Erhaltene Danke: 1
 
 
 
 
 | 
Verfasst: Mo 05.04.10 18:15 
 | 
|  | 
| Gausi 
          Beiträge: 8550
 Erhaltene Danke: 478
 
 Windows 7, Windows 10
 D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
 
 | 
Verfasst: Mo 05.04.10 18:20 
 
	  |  the-chosen1 hat folgendes geschrieben  : |  	  | Unmittelbar bei dem Start des Programms. Ich hab insgesamt 11 formen. Es werden aber nur 2 gezeigt.
 Ich füre den Script bei Form1.OnCreate aus. Da Form1 meine MainForm ist also sofort.
 Aber wie könnte ich denn das problem umgehen?
 | 
 Greifst du denn auf eine andere Form zu? In dem Code oben, wird im Create von Form3 auf Form11 zugegriffen, die dann wahrscheinlich noch nicht da sein dürfte.
 Umgehung des Problems: Z.B. die Ini offen lassen und im Create der anderen Formen auch darauf zugreifen. Oder die Daten aus der Ini in eine geeignete Struktur lesen (die dann auch für einen eventuellen Einstellungsdialog genutzt werden kann) und diese Struktur beim Create der einzelnen Forms verwenden. Oder jede Form holt sich die Daten selbst aus der Inidatei. Oder du packst das ins OnShow der Form und merkst dir danach, dass du das einmal getan hast, damit das nicht nochmal durchgeführt werden. ..._________________ We are, we were and will not be.
 | 
|  | 
| the-chosen1  
          Beiträge: 16
 
 
 
 
 | 
Verfasst: Mo 05.04.10 18:29 
 
Moderiert von  Narses: Komplett-Zitat des letzten Beitrags entfernt. Ah VIELEN dank!
 Ja stimmt... Form11 wird ja auch beim start erstellt, also kann ich einfach den Script in Form11.OnCreate reinschreiben    Aber was meinst du mit die ini einfach offen lassen?
ini.free; weg lassen und dafür in jede der verwendeten formen
ini:=TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'settings.ini'); reinschreiben? | 
|  | 
| Gausi 
          Beiträge: 8550
 Erhaltene Danke: 478
 
 Windows 7, Windows 10
 D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
 
 | 
Verfasst: Mo 05.04.10 18:37 
 
Nein, man könnte die ini als Variable der Form definieren (also nicht lokal in der Create-Methode) und von den späteren Formen auf Form1.Ini zugreifen. Schön ist das aber nicht.    Besser wäre da schon, wenn du den Code aus Form1.Create einfach auf die einzelnen Formen aufteilst und jeweils nur den passenden Teil aus der Ini liest, also
 		                       Delphi-Quelltext 
 									| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 
 | procedure TFormX.FormCreate(Sender: TObject);var
 ini: Tinifile;
 begin
 ini:=TIniFile.Create('.\settings.ini');   try
 lese Optionen für Form X
 finally
 ini.free;
 end;
 end;
 | _________________ We are, we were and will not be.
 | 
|  | 
| the-chosen1  
          Beiträge: 16
 
 
 
 
 | 
Verfasst: Mo 05.04.10 18:40 
 
Moderiert von  Narses: Komplett-Zitat des letzten Beitrags entfernt. Okay viele dank    Schätze so wird das klappen    Nur eine Frage noch:    Warum ist es nicht "schön" auf Form1.Ini zuzugreifen? | 
|  | 
| ALF 
          Beiträge: 1085
 Erhaltene Danke: 53
 
 WinXP, Win7, Win10
 Delphi 7 Enterprise, XE
 
 | 
Verfasst: Mo 05.04.10 18:41 
 
	  |  Luckie hat folgendes geschrieben  : |  	  | Augen auf. Der Punkt gehört zur Zeichenkette und repräsentiert das aktuelle Arbeitsverzeichnis. | 
 Ooops, warum rufe ich das so nie auf    Egal, habe wenigstens was dazugelernt    Hat aber keine Lösung seines Probs gebracht.
 @the-chosen1,
 Ich teste auch trotzdem noch, ob die ini überhaupt da ist, bevor ich sie zum lesen öffne.
 		                       Delphi-Quelltext 
 									| 1:
 | if not FileExists(ExtractFilePath(ParamStr(0)) + '\settings.ini') then					 |  Kann ja auch sein das sie mal gelöschht wird.
 Gruss Alf_________________ Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg,  währe dieses Forum leer!
 | 
|  | 
| elundril 
          Beiträge: 3747
 Erhaltene Danke: 123
 
 Windows Vista, Ubuntu
 Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
 
 | 
Verfasst: Mo 05.04.10 18:41 
 
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
 | 
|  | 
| Luckie Ehemaliges Mitglied
 Erhaltene Danke: 1
 
 
 
 
 | 
Verfasst: Mo 05.04.10 19:48 
 | 
|  |