![]() |
Datenbank: MS SQL • Version: 2005 • Zugriff über: ADO
Beste "Stelle" für eigenen Login-Prompt bei ADO
Hi,
meine Formular-Erstellungsreihenfolge sieht etwa so aus: DataModul <Hauptformular> <weitere Formulare inkl. DB-Login Formular> Ich möchte beim ersten Aufbau der Verbindung per TADOConnection - Komponente meinen eigenen Login-Dialog "einschieben". Wo wäre der beste Platz dafür ? Probleme, die ich bisher habe, sind : - OnLogin-Ereignis funktioniert nicht mit ausgeschaltetem LoginPrompt und ConnectionString, mit eingeschaltetem Prompt kommt das Standard-Anmeldefenster und nicht meins - Ich möchte die Erstellungsreihnefolge nicht ändern, sprich das bisherige Hauptformular soll auch bleiben. Wenn ich aber im Hauptformular bspw. im OnShow-Ereignis die Connection aufmache bzw. dies beim OnCreate-Ereignis im Datamodul tue, ist ja das Login-Formular noch gar nicht initialisiert -> Zugriffsverletzung... Wäre schön, wenn hier jemand diese (sicher schon oft gestellte) Frage umfassend beantworten könnte :)... Gruß und danke, FraGiLe |
Re: Beste "Stelle" für eigenen Login-Prompt bei AD
Im Event OnWillConnect der ADOConnection kann man bequem User und Passwort zuweisen.
|
Re: Beste "Stelle" für eigenen Login-Prompt bei AD
Den DB-User und das Passwort kann ich ja beim Klicken des "OK"-Buttons im Login-Formular übergeben,
mir gehts um die Platzierung des Formulars beim Startablauf der Anwendung. Mein Code im Datamodul :
Delphi-Quellcode:
... und im Login-Formular:
procedure TDataModule1.DataModuleCreate(Sender: TObject);
begin Application.CreateForm(TfrmLogin, frmLogin); frmLogin.ShowModal;
Delphi-Quellcode:
procedure TfrmLogin.BitBtnOKClick(Sender: TObject);
begin gUser.Name := edUserName.Text; gUser.Password := edPassword.Text; try DataModule1.DBConnect_SV2.Open(gUser.Name, gUser.Password); except on Exception do begin ShowMessage('Eingabe fehlerhaft !'); Update; end; end; Ich kreiere jetzt das Login-Form manuell über Application.CreateForm, nur klappt da das Exception-Handling nicht... |
Re: Beste "Stelle" für eigenen Login-Prompt bei AD
Wieso nicht im 'OnWillConnect'?
|
Re: Beste "Stelle" für eigenen Login-Prompt bei AD
Das löst ja nicht mein Initalisierungsproblem.
Ich kann auch in OnWillConnect mit frmLogin.ShowModal mein Loginformular aufrufen, dann bringt er eine Zugriffsverletzung, da das Formular ja noch gar nicht kreiert wurde. Das OnWillConnect wird das erste mal aufgerufen, wenn ich die DataSources aktiviere, also im OnShow-Event des Hauptformulars... |
Re: Beste "Stelle" für eigenen Login-Prompt bei AD
Dann erstelle dir doch dein Formular, wenn Du es brauchst. Ich mache das immer so:
Delphi-Quellcode:
Und irgendwo im Code (z.B. im 'OnWillConnect'):
Type
TfmLogin = Class (TForm) ... ... Public Class Function Execute(Var aUser, aPasswd : String) : TModal; End; Implementation Function TfmLogin.Execute (Var aUser, aPasswd : String) : TModal; Begin With TfmLogin.Create(Nil) Do Begin Result := ShowModal; If Result = mrOK Then Begin aUser := edUser.Text; aPassWd := edPassWd.Text; End; Release End End; ...
Delphi-Quellcode:
Lass Dir die Formulare nicht am Begin des Programms erzeugen, das ist doch unnötig. Na ja, ein Hauptformular darfs schon sein. Erzeuge deine Formulare immer dann, wenn Du sie brauchst, z.B. mit meiner oben beschriebenen Methode.
...
If TfmLogin.Execute (sUser, sPassWd) = mrOk Then TDatabaseModule.Login (sUser, sPassWd) // Oder einfach User/Passwd setzen... Else Raise Exception.Create ('Anmeldung abgebrochen') |
Re: Beste "Stelle" für eigenen Login-Prompt bei AD
Du fügst also deinen Formularen eine Execute-Methode zu, die du dann zur Laufzeit aufrufst ? Der Typ "TModal" sagt mir leider gar nix, die Hilfe schweigt auch dazu ;)...
Edit: Hab ihn jetzt in TModalResult geändert und die Execute-Funktion ein bisserl anders in frmLogin eingführt, jetzt klappt es , danke für den Alternativweg :D |
Re: Beste "Stelle" für eigenen Login-Prompt bei AD
Guten Morgen...
Zitat:
Zitat:
- im OnCreate des Datamoduls ist dein DBLogin Formular noch nicht erzeugt, im OnShow des Hauptformulars schon... - d.h. du könntest im OnShow des Hauptformulars durchaus dein Login Formular anzeigen. - zeigst du dein Login Formular im OnShow des Hauptformulars an ist dein Hauptformular noch nicht sichtbar. - möchtest du, daß dein Login über dem sichtbaren Hauptformular liegt, mußt du dir ein eigenes "AfterOnShow" kreieren
Delphi-Quellcode:
:hi:
const
WM_FERTIG = WM_USER + 100; private procedure AfterOnShow(var Msg: TMessage); Message WM_FERTIG; end; procedure TForm.FormShow(Sender: TObject); begin PostMessage(Handle, WM_FERTIG, 0, 0); end; procedure TForm.AfterOnShow(var Msg: TMessage); begin // hier z.B. FLogin.ShowModal; end; |
Re: Beste "Stelle" für eigenen Login-Prompt bei AD
Zitat:
|
Re: Beste "Stelle" für eigenen Login-Prompt bei AD
Zitat:
die Reihenfolge beim Start eines Programmes ist wie folgt: (vereinfacht :wink: ) - jedes Formular wird in der Reihenfolge erzeugt. - OnCreate jedes Formulars wird ausgeführt - OnShow des Hauptformulars wird ausgelöst (damit u.a. OnActivate etc.) ...bedeutet das dein Formular bzw. alle Formulare bereits erzeugt sind. Schaue mal im Quelltext der Anwendung ob die Reihenfolge überhaupt so stimmt. Eventuell manuell verändern. Beispiel (Auszug):
Delphi-Quellcode:
FMain ist mein Hauptformular. Die 2 Datamodule werden vor dem Hauptformular erzeugt.
begin
Splash := TSplash.Create(Application); try Splash.Show; Splash.Refresh; Application.Initialize; Application.Title := 'bla,bla,bla'; Application.CreateForm(TDMallgemein, DMallgemein); {0} Application.CreateForm(TDMINI, DMINI); Application.CreateForm(TFMain, FMain); PS: beim Hinzufügen eines neuen Formulares, kann es vorkommen, daß die Reihenfolge sich ändert. :hi: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz