Autor Beitrag
csigg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 706

WIn XP, Win NT, Win2000, Suse8.0
Delphi 5, Delphi 6
BeitragVerfasst: 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:

ausblenden volle Höhe Delphi-Quelltext
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 user profile iconKlabautermann: Beiträge zusammengefügt.
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Do 09.06.05 11:55 
Moin!

Pack mal jeweils hinter das "Application.Terminate;" ein "Exit;", das könnte helfen.

cu
Narses
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Do 09.06.05 12:00 
ne andere möglichkeit wäre folgende nachricht an dein prog zu schicken
ausblenden 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



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Do 09.06.05 13:05 
Moin!

user profile iconLuckie 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 :wink: ]

cu
Narses
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Do 09.06.05 13:10 
@Luckie: Den radikalsten Weg haben se doch noch gar nicht erwähnt:

ausblenden Delphi-Quelltext
1:
Halt;					


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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: 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.:
ausblenden 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



BeitragVerfasst: Do 09.06.05 15:31 
user profile iconBenBE hat folgendes geschrieben:
@Luckie: Den radikalsten Weg haben se doch noch gar nicht erwähnt:

ausblenden Delphi-Quelltext
1:
Halt;					


Und schon ist das Programm beendet ...

Darauf habe ich nur gewartet. Ist wie als wenn man nicht die Bremse benutzt bei 120 auf der Autobahn, sondern zum Anhalten das Auto vor den nächsten Brückenpfeiler setzt - dann stehts auch. :mrgreen: