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