| Autor |
Beitrag |
csigg
      
Beiträge: 706
WIn XP, Win NT, Win2000, Suse8.0
Delphi 5, Delphi 6
|
Verfasst: Do 09.06.05 08:57
ICh hab ein recht umfangreiches Programm, beim starten desselben wird eine Datenbank mit ihren ganzen Tabellen registriert. Wird die Datenbank dabei nicht gefunden, soll das Programm komplett beendet werden. Wenn ich das ganze mit Apllication.Terminate mache, wird das Programm trotzdem noch kurz sichtbar. Kann mir jemand sagen wie ich das Unterbinden kann??
Hier mal noch ein wenig Quellcode, vielleicht hilft es euch ja weiter:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48:
| procedure TdmMesse.DataModuleCreate(Sender: TObject); var servername, dbpfad:String; dbini:Tinifile; sqlstatement:String; begin
dbini := TIniFile.Create(GetCurrentDir + '\db.ini'); servername := dbini.ReadString('DB','name' ,'Error');
if servername='Error' then begin MessageDlg('db.ini Datei nicht gefunden.',mtError,[mbOK],0); Application.Terminate; end;
dbpfad := dbini.ReadString('DB','pfad','Error');
WriteLog(servername +', ' + dbpfad + ' gelesen');
IBMessegdb.Connected := false; IBMessegdb.DatabaseName := servername + ':' + dbpfad;
WriteLog('DB-Parameter gesetzt');
try begin IBMessegdb.Open; IBSecurityService1.ServerName := servername; TReservierung.Open; TMitarbeiter.Open; TKenntnisse.Open; TSprachen.Open; DrgDrpEvent.SetAutoRegister(true); ResUpdate.SetAutoRegister(true); DBDaySource1.Active := true; DBDaySource1.Day := Date(); end except begin MessageDlg('Keine Verbindung zur Datenbank möglich.' + #10#13 + 'Netwerkverbindung und Server überprüfen',mtError,[mbOK],0); Application.Terminate; end end;
WriteLog('dmMesse erstellt');
end; |
Moderiert von Klabautermann: Beiträge zusammengefügt.
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Do 09.06.05 11:55
Moin!
Pack mal jeweils hinter das "Application.Terminate;" ein "Exit;", das könnte helfen.
cu
Narses
|
|
retnyg
      
Beiträge: 2754
SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
|
Verfasst: Do 09.06.05 12:00
ne andere möglichkeit wäre folgende nachricht an dein prog zu schicken
Delphi-Quelltext 1:
| showwindow(handle, SW_HIDE); |
_________________ es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 09.06.05 12:09
Wenn ich so was sehe, dann schüttelt es mich immer wieder. Überlegt doch mal, was ihr da macht oder versucht zu machen: Das OnCreate Ereignis ist wie das Einsteigen in ein Auto, ihr versucht aber auch gleichzeitig wieder auszusteigen. Und das kann ja nicht fonktionieren. Überprüf im Hauptprogramm (dpr-datei) ob die Datei existieert und mach davon abhängig, wie es weitergeht.
BTW: dbini := TIniFile.Create(GetCurrentDir + '\db.ini'); Das aktuelle Verzeichnis muss nicht zwingend das deiner Exe sein. Wurde hie ruim Forum abre auch schon mehr als tausendmal erklärt.
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Do 09.06.05 13:05
Moin!
Luckie hat folgendes geschrieben: | | Überprüf im Hauptprogramm (dpr-datei) ob die Datei existieert und mach davon abhängig, wie es weitergeht. |
Yep! Du hast natürlich recht und so sollte es gemacht werden! [das Baum, Wald und Sichtbarkeitsproblem hat mal wieder zugeschlagen  ]
cu
Narses
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Do 09.06.05 13:10
@Luckie: Den radikalsten Weg haben se doch noch gar nicht erwähnt:
Delphi-Quelltext
Und schon ist das Programm beendet ...
Aber in der Hinsicht muss ich mich Luckie anschlieen: Bau liber ne ordentliche Fehlerbehandlung rein, anstatt den Task radikal zu killen.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Do 09.06.05 13:45
Halt klappt auch nicht immer. Nachdem ich mit 1000 Klimmzügen versucht habe, die Autoeinsteig-Start-Wieder-RausNnummer durchzuziehen (Halt,Exit, Terminate, Selbstzerstörung der Handles etc.), mach ich das mittlerweile geregelt.
Variante 1 (mit login bzw. 'Connect-Button'):
Die Datenmodule machen beim Create nix besonderes, exportieren aber eine 'Connect' Methode. Die wird beim 'login' aufgerufen.
Variante 2 (automatisches login, so wie hier):
Das Datenmodul versucht im OnCreate, eine Verbindung aufzubauen, Daten zu lesen usw. und setzt eine Eigenschaft 'DataOK' entsprechend.
Um Projektquelltext schreibe ich dann z.B.:
Delphi-Quelltext 1:
| If myDatamodule.DataOK Then Application.Run; |
Kriegt das Jemand besser/eleganter hin? Würde mich wirklich mal interessieren, wie man das absolut sauber hinbekommt.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 09.06.05 15:31
|
|
|