![]() |
Hallo m-werk,
ein wichtiger Tip noch: Dem Eingabefeld im Passwortdialog (oben im Code ePasswort) sollte im Objektinspektor ein PasswordChar (meist *) zugwiesen werden. |
Hi, so nun steh ich ein bischen an.
Das mit dem 1. Code, habe ich erledigt. beim 2. Code: PasswortOK (erscheint auch beim 1. code), Welche zuordnung hat dieser? In der Automatischen Erzeugung der Formulare habe ich jetzt nichts mehr drinn. Ich habe beim Login Formular eine DBComboBox eingebaut. Ist das richtig so? Ich habe die BDE Querys genommen und auch so beannt, wie du geschrieben hast. Ich habe auch bei den beiden Querys den SQL-Code eingetragen. Die beiden Querys habe ich auf das Loginformular plaziert. Beim qryUser bin ich auf 'Alle Felder hinzufügen' gegangen und da habe ich 'Name' hinzugefügt. Beim qryCheck wollte ich es auch so machen und da kam die Felher-Meldung: qryCheck:Typ für Feld 'Name' unbekannt Da muß was in der SQL-Anweisung was falsch sein, nur was? Muß ich nicht die DBComboBox mit der Personen-DB verknüpfen? Wenn ja, wie? Noch was habe ich bemerkt. Muss ich nicht in der Datenbank 'Arbeitszeit' auch den 'Monat' einfügen? (FieldName: Monat, Type: S)? Es tud mir leid, dass ich so viele Fragen stelle, aber ich möchte ja auch was lernen dabei, und so kann ich es dann. |
Hallo m-werk,
PasswortOK habe ich als Boolean im PUBLIC Bereich von frmLogin deklariert, damit andere Formulare darauf zugreifen können. Das Login Formular soll das "2. Formular" sein. Das Hauptformular soll weiterhin in der automatischen Reihenfolge bleiben! Durch den Eingriff in den Projektquellcode haben wir aber verhindert, dass es tatsächlich erzeugt wird, solange der Benutzer kein korrektes Passwort eingibt. Im Login Formular habe ich nur eine normale ComboBox (also keine datensensitive cbBox) benutzt. Die Daten für die Füllung hole ich über die entsprechende TQuery Komponente. Ich wollte nicht, dass das Programm an dieser Stelle direkt mit Daten aus der Datenbank verknüpft wird. Bei qryCheck kannst du nach Eingabe des SQL Testes das Array Params über den Objektinspektor zugreifen. Dort steht (wie von Geisterhand :witch:) der Parameter Name drin. Weise diesem den Typ String zu. Ich habe nicht mit Monat gearbeitet, das wird komplizierter. Die Woche genügt ja, da jede Kalenderwoche eindeutig ist und du jedes Datum innerhalb der Kalenderwoche darstellen kannst. Viele Fragen sind übrigens kein Problem, denn dafür sind wir ja da :mrgreen:. Was sollte ich sonst mit der vielen Freizeit machen :lol: ? |
Danke erstmals für die freundliche unterstützung.
Zitat:
|
Hi, so nun hab ich ein bischen herumgedüftelt.
Ich habe bei qryCheck bei Params den Namen angeklickt und unter dem Punkt DataType 'ftString' ausgewählt. Ist das richtig so? Weiters: Wenn ich jetzt das Login (Programm) starte, kommt beim Start eine Passwortaufforderung (Da muß ich nun das Passwort für die Passwort-Datenbank eingeben) Wenn ich dann das Passwort eingegeben habe, kommt folgende Meldung: Name not unique in this context. Dann bin ich beim Login Formular und kann aber keinen Benutzer auswählen. (Es steht in der Combobox nichts drin) Was ist da nur los? Wenn das dann alles klappt, könnten wir ja schon zur eigentlichen Hauptform überspringen und diese dann gestallten. |
Hallo m-werk,
ja, der Eintrag ftString als Typ des Parameters ist korrekt. Nun zu der Passworteingabe für die Datenbank. Die musst du natürlich über das Programm eingeben, sonst müsstest du ja jedem Mitarbeiter das Paßwort nennen, damit er sich anmelden kann. Das Passwort fügst du vor dem Zugriff auf die Passwoerter Tabelle wie folgt der Session hinzu:
Code:
mwerk wäre natürlich ein schlechtest Paßwort :shock: .
Session.AddPassword('mwerk');
{Jetzt kannst du auf die Tabelle zugreifen } Wenn du auf die Tabelle zugegriffen hast, solltest du das Paßwort wieder aus der Session entfernen, z.B. mit:
Code:
Übrigens, wenn du das Passwort wie oben beschrieben hinzufügst, könnte ein Hacker den String 'mwerk' eventuell in deinem Executable finden und so das Passwort herausbekommen. Es wäre deshalb eventuell sinnvoll, den String irgendwie zusammenzubauen, falls du Hacker fürchten musst.
Session.RemoveAllPasswords;
Die Fehlermeldung Name not unique könnte verschiedene Ursachen haben. Prüfe einmal, ob in der Personen und Passwoerter Tabelle alle Namen eindeutig sind und nicht z.B. ein Leereintrag existiert. Ansonsten lauf mal im Einzelschritt durch die Anwendung, um festzustellen, wo der Fehler erzeugt wird. Wenn das alles funktioniert kann es ans Hauptformular gehen. :mrgreen: |
Hi, das mit der Session kapier ich nicht ganz
Zitat:
Ich habe die Passwoerter-DB und die Personen DB überprüft. Ich hab keinen leeren Datensatz. |
Hallo m-werk,
immer wenn du auf die Passwoerter Tabelle zugreifen willst, also hier:
Delphi-Quellcode:
und natürlich hier:
procedure TfrmLogin.FormActivate(Sender: TObject);
begin Session.AddPassword('mwerk'); qryUser.Close; qryUser.Open; cbUser.Clear; if qryUser.RecordCount = 0 then cbUser.Items.Add('Kein User definiert.') else begin cbUser.Items.Add('Bitte User auswählen.'); while not qryUser.EOF do begin cbUser.Items.Add(qryUserName.Value); qryUser.Next end end; cbUser.ItemIndex := 0; Session.RemoveAllPasswords; end;
Delphi-Quellcode:
Zu dem unique Name Problem müsstest du mal im Einzelschrittverfahren die Stelle lokalisieren, an der dieser Fehler auftritt.
procedure TfrmLogin.BitBtn1Click(Sender: TObject);
begin if Trim(ePasswort.Text) = '' then begin MessageDlg('Bitte gültiges Passwort eingeben.', mtInformation, [mbOK], 0); ActiveControl := ePasswort; ModalResult := mrNone; EXIT end; PasswortOK := False; qryCheck.Close; if Trim(cbUser.Text) <> '' then begin qryCheck.ParamByName('name').AsString := cbUser.Text; try Session.AddPassword('mwerk'); qryCheck.Open; if UpperCase(Trim(qryCheckPasswort.Value)) = UpperCase(Trim(ePasswort.Text)) then PasswortOK := True else begin PasswortOK := False; MessageDlg('Passwort stimmt nicht.', mtError, [mbOK], 0); ModalResult := mrNone; end; Session.RemoveAllPasswords; except on exception do begin MessageDlg('User nicht gefunden.', mtError, [mbOK], 0); PasswortOK := False; end end end else begin MessageDlg('Bitte gültigen User auswählen.', mtError, [mbOK], 0); PasswortOK := False; end; qryCheck.Close; end; |
Hi, jetzt funktioniert das login. Ich habe einfach den Code nochmal übernommen. (Beim code war aber nichts falsch. Es ist wahrscheinlich beim Passwort der DB gehängt.)
Jetzt kann es ans Hauptformular gehen. Wie gehe ich jetzt vor? Ich habe schon ein Hauptformular erstellt. (Ist aber noch nichts drinn). Dieses trägt den Namen 'ArbeitszeitForm' Wenn ich auf LOGIN klicke, dann soll sich ja diese Hauptform öffnen. Das muss ja auch noch eingebaut werden (Loginform). |
Hallo m-werk,
dass das Hauptformular geöffnet wird, wenn der Login korrekt abgelaufen ist, haben wir ja schon durch den Zugriff auf den Projektquelltext erledigt:
Delphi-Quellcode:
Dabei sollte das CreateForm automatisch erscheinen, wenn du ArbeitsForm als Hauptformular auswählst. Nur den Rest solltest du drumherumstricken.
Application.Initialize;
frmLogin := TfrmLogin.Create(Application); if (frmLogin.ShowModal = 1) and frmLogin.PasswortOK then begin Application.CreateForm([b]TArbeitszeitForm, ArbeitszeitForm[/b]); Application.Run; end else Application.Terminate; Dann sollte das Formular sich nach erfolgreichem Einloggen öffnen. Zum Inhalt werde ich dir heute Abend ein paar Tips geben. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:31 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-2025 by Thomas Breitkreuz