AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Beste "Stelle" für eigenen Login-Prompt bei ADO
Thema durchsuchen
Ansicht
Themen-Optionen

Beste "Stelle" für eigenen Login-Prompt bei ADO

Ein Thema von fragile · begonnen am 29. Dez 2008 · letzter Beitrag vom 30. Dez 2008
Antwort Antwort
Benutzerbild von fragile
fragile

Registriert seit: 4. Nov 2008
Ort: Amberg
87 Beiträge
 
Delphi 2009 Enterprise
 
#1

Beste "Stelle" für eigenen Login-Prompt bei ADO

  Alt 29. Dez 2008, 15:32
Datenbank: MS SQL • Version: 2005 • Zugriff über: 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
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Beste "Stelle" für eigenen Login-Prompt bei AD

  Alt 29. Dez 2008, 16:20
Im Event OnWillConnect der ADOConnection kann man bequem User und Passwort zuweisen.
  Mit Zitat antworten Zitat
Benutzerbild von fragile
fragile

Registriert seit: 4. Nov 2008
Ort: Amberg
87 Beiträge
 
Delphi 2009 Enterprise
 
#3

Re: Beste "Stelle" für eigenen Login-Prompt bei AD

  Alt 29. Dez 2008, 16:41
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:
procedure TDataModule1.DataModuleCreate(Sender: TObject);
begin
  Application.CreateForm(TfrmLogin, frmLogin);
  frmLogin.ShowModal;
... und im Login-Formular:

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...
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: Beste "Stelle" für eigenen Login-Prompt bei AD

  Alt 29. Dez 2008, 16:50
Wieso nicht im 'OnWillConnect'?
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von fragile
fragile

Registriert seit: 4. Nov 2008
Ort: Amberg
87 Beiträge
 
Delphi 2009 Enterprise
 
#5

Re: Beste "Stelle" für eigenen Login-Prompt bei AD

  Alt 30. Dez 2008, 08:34
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...
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: Beste "Stelle" für eigenen Login-Prompt bei AD

  Alt 30. Dez 2008, 08:50
Dann erstelle dir doch dein Formular, wenn Du es brauchst. Ich mache das immer so:
Delphi-Quellcode:
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;
...
Und irgendwo im Code (z.B. im 'OnWillConnect'):
Delphi-Quellcode:
...
  If TfmLogin.Execute (sUser, sPassWd) = mrOk Then
     TDatabaseModule.Login (sUser, sPassWd) // Oder einfach User/Passwd setzen...
  Else
     Raise Exception.Create ('Anmeldung abgebrochen')
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.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von fragile
fragile

Registriert seit: 4. Nov 2008
Ort: Amberg
87 Beiträge
 
Delphi 2009 Enterprise
 
#7

Re: Beste "Stelle" für eigenen Login-Prompt bei AD

  Alt 30. Dez 2008, 08:56
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
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#8

Re: Beste "Stelle" für eigenen Login-Prompt bei AD

  Alt 30. Dez 2008, 09:24
Guten Morgen...
Zitat:
DataModul
<Hauptformular>
<weitere Formulare inkl. DB-Login Formular>
Zitat:
- 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...
also...
- 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:
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;
  Mit Zitat antworten Zitat
Benutzerbild von fragile
fragile

Registriert seit: 4. Nov 2008
Ort: Amberg
87 Beiträge
 
Delphi 2009 Enterprise
 
#9

Re: Beste "Stelle" für eigenen Login-Prompt bei AD

  Alt 30. Dez 2008, 11:17
Zitat:
im OnCreate des Datamoduls ist dein DBLogin Formular noch nicht erzeugt, im OnShow des Hauptformulars schon...
Als ich das LoginFormular aus dem OnShow des Hauptformulars aufgerufen habe, gabs eine Zugriffsverletzung...deshalb nehme ich an, daß das Loginformular noch nicht erzeugt wurde...
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#10

Re: Beste "Stelle" für eigenen Login-Prompt bei AD

  Alt 30. Dez 2008, 11:44
Zitat:
DataModul
<Hauptformular>
<weitere Formulare inkl. DB-Login Formular>
...wenn die Reihenfolge der Erzeugung der Formulare wie oben ist dann schon. Dann hat die Zugriffsverletzung vieleicht eine andere Ursache.

die Reihenfolge beim Start eines Programmes ist wie folgt: (vereinfacht )

- 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:
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);
FMain ist mein Hauptformular. Die 2 Datamodule werden vor dem Hauptformular erzeugt.

PS: beim Hinzufügen eines neuen Formulares, kann es vorkommen, daß die Reihenfolge sich ändert.

  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 23:46 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