AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Zugriffsverletzung bei visible:=true von form
Thema durchsuchen
Ansicht
Themen-Optionen

Zugriffsverletzung bei visible:=true von form

Ein Thema von Sebbel · begonnen am 11. Aug 2008 · letzter Beitrag vom 12. Aug 2008
Antwort Antwort
Sebbel

Registriert seit: 5. Jun 2005
21 Beiträge
 
#1

Zugriffsverletzung bei visible:=true von form

  Alt 11. Aug 2008, 23:10
Hallo,

folgender Sachverhalt:
Ich will zum Programmstart abfragen, ob eine Datei, in der SQL-Zugangsdaten hinterlegt sind, vorhanden ist. Wenn dies der Fall ist, ist auch kein Problem, passt, alles läuft wie es soll.
Wenn die Datei nicht vorhanden ist, will ich jedoch einen Hinweis ausgeben, dass beim ersten Start des Programms (bzw. beim ersten Verbindungsversuch zum MySQL-Server), die Daten hinterlegt werden müssen, und danach ein form mit formname.visible:=true aufrufen, wo dann eine Eingabemaske zum Hinterlegen der Daten erscheint.
Im ganzen Programm gib es diverse Prozeduren, die auf die Prozedur mysqlConnect (s.U.) zugreifen.

Delphi-Quellcode:
procedure TForm1.mysqlConnect;
var f: File of TSQLSettings;
    SQLsettings: TSQLsettings;
    port,username,databasename,
    password,serveradress:string;
begin

      if fileexists('mysql.dat') then begin
        AssignFile(f,'mysql.dat');
        reset(f);
        read(f,SQLsettings);
        closefile(f);
        port:=sqlsettings.port;
        username:=sqlsettings.username;
        databasename:=sqlsettings.databasename;
        password:=sqlsettings.serverpassword;
        serveradress:=sqlsettings.serveradress;
        FMysql.Host := 'localhost';
        FMysql.port := StrToInt(port);
        FMysql.user := username;
        FMysql.password := password;
        FMysql.UnixSocket := '';
        FMysql.Db := databasename;
        FMysql.UseNamedPipe := false;
        FMysql.UseSSL := false;
        FMysql.Compress := true;
        FMysql.TrySockets := false;
      end
      else begin
        application.MessageBox('Vor der ersten Benutzung müssen sie ihre'+#10#13+'MySQL Zugangsdaten hinterlegen','MySQL Zugangsdaten benötigz!');
        formSettings.visible:=true; //<--Knackpunkt

      end;
end;

Die Messagebox erscheint noch, aber danach, bekomme ich eine Acces Vioalation Exception. Und zwar passiert das an der ersten Stelle, wo die mysqlConnect benötigt wird.


Delphi-Quellcode:
procedure updateShowDoctors;
var q: string;
    ex: boolean;
    i: integer;
begin
  Form1.mysqlConnect; //<--Hier wird die o.G. prozedur aufgerufen
  q := 'SELECT name,id FROM doctors ORDER BY name ASC';
  Form1.FResult := Form1.FMysql.query(q, true, ex);
  Form1.boxShowDoctors.Clear;
    if assigned(Form1.FResult) then begin
      setlength(saveresultDoctor, Form1.FResult.RowsCount);
         for i:=1 to Form1.FResult.RowsCount do
         begin
            Form1.boxShowDoctors.items.add('Dr. '+Form1.FResult.FieldValueByName('name'));
            saveresultDoctor[i-1]:=Form1.FResult.FieldValueByName('id');
            Form1.FResult.Next;
         end;
      end;
  Form1.mysqlDisconnect;
end;

Ich weiss nicht mehr weiter. Wie kann ich das Vernünftig handhaben? Ich habe keine Idee. Ohne die Zeile mit dem formsettings.visible:=true passiert garnichts, auch keine Fehlermeldung. Ich möchte aber halt nach dem Hinweiss auf die zu hinterlegenden Daten gleich die Eingabemaske aufrufen.

Über jede hilfreiche Antwort würde ich mich sehr freuen
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#2

Re: Zugriffsverletzung bei visible:=true von form

  Alt 11. Aug 2008, 23:12
Ist formSettings zu diesem Zeitpunkt erstellt?
  Mit Zitat antworten Zitat
Sebbel

Registriert seit: 5. Jun 2005
21 Beiträge
 
#3

Re: Zugriffsverletzung bei visible:=true von form

  Alt 11. Aug 2008, 23:19
Wie kann ich nachvollziehen, ob das form zu diesem Zeitpunkt schon erstellt ist?
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#4

Re: Zugriffsverletzung bei visible:=true von form

  Alt 11. Aug 2008, 23:35
Schreib mal:

Delphi-Quellcode:
if Assigned(formSettings) then
  formSettings.Visible := true
else
  ShowMessage('Formsettings noch nicht erstellt!');
  Mit Zitat antworten Zitat
Sebbel

Registriert seit: 5. Jun 2005
21 Beiträge
 
#5

Re: Zugriffsverletzung bei visible:=true von form

  Alt 12. Aug 2008, 00:00
Okay, formSettings ist noch nicht erstellt. Wie sorge ich dafür?

Entweder steh ich im Moment gewaltig auffem Schlauch oder ich weiss auch nicht. Einen solchen Fehler hatte ich noch nie in diesem Zusammenhang


edit:

es geht jetzt! Ich habe mir im Debugger das den Aufruf-Stack anzeigen lassen, der so aussah:

Delphi-Quellcode:
program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas{Form1},
  Unit2 in 'Unit2.pas{addPatient},
  mysqlqueries in 'mysqlqueries.pas',
  Unit5 in 'Unit5.pas{doctorFrame},
  settings in 'settings.pas{formSettings};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TaddPatient, addPatient);
  Application.CreateForm(TdoctorFrame, doctorFrame);
  Application.CreateForm(TformSettings, formSettings); //das hier muss ganz nach oben
  Application.Run;
end.

daraus wurde dann

Delphi-Quellcode:
program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas{Form1},
  Unit2 in 'Unit2.pas{addPatient},
  mysqlqueries in 'mysqlqueries.pas',
  Unit5 in 'Unit5.pas{doctorFrame},
  settings in 'settings.pas{formSettings};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TformSettings, formSettings); //<--so ist das schon besser!
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TaddPatient, addPatient);
  Application.CreateForm(TdoctorFrame, doctorFrame);
  Application.Run;
end.
  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 17:55 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