Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Arbeitszeitaufzeichnung - Ideen sind gefragt! (https://www.delphipraxis.net/1141-arbeitszeitaufzeichnung-ideen-sind-gefragt.html)

MrSpock 7. Nov 2002 11:08

Hallo m-werk,

ein wichtiger Tip noch:

Dem Eingabefeld im Passwortdialog (oben im Code ePasswort) sollte im Objektinspektor ein PasswordChar (meist *) zugwiesen werden.

m-werk 9. Nov 2002 08:16

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.

MrSpock 9. Nov 2002 18:15

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: ?

m-werk 10. Nov 2002 16:49

Danke erstmals für die freundliche unterstützung.

Zitat:

Bei qryCheck kannst du nach Eingabe des SQL Testes das Array Params über den Objektinspektor zugreifen. Dort steht (wie von Geisterhand ) der Parameter Name drin. Weise diesem den Typ String zu.
Ich kapier das nicht so ganz. Was meinst du damit genau. Wie gehe ich vor?

m-werk 13. Nov 2002 18:19

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.

MrSpock 13. Nov 2002 20:53

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:
  Session.AddPassword('mwerk');
  {Jetzt kannst du auf die Tabelle zugreifen }
mwerk wäre natürlich ein schlechtest Paßwort :shock: .

Wenn du auf die Tabelle zugegriffen hast, solltest du das Paßwort wieder aus der Session entfernen, z.B. mit:

Code:
Session.RemoveAllPasswords;
Ü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.

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:

m-werk 14. Nov 2002 18:49

Hi, das mit der Session kapier ich nicht ganz

Zitat:


Session.AddPassword('mwerk');
{Jetzt kannst du auf die Tabelle zugreifen }

Session.RemoveAllPasswords;
Wo muß ich denn diese Session eintragen?

Ich habe die Passwoerter-DB und die Personen DB überprüft. Ich hab keinen leeren Datensatz.

MrSpock 14. Nov 2002 19:09

Hallo m-werk,

immer wenn du auf die Passwoerter Tabelle zugreifen willst, also hier:

Delphi-Quellcode:
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;
und natürlich hier:
Delphi-Quellcode:
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;
Zu dem unique Name Problem müsstest du mal im Einzelschrittverfahren die Stelle lokalisieren, an der dieser Fehler auftritt.

m-werk 15. Nov 2002 12:03

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).

MrSpock 15. Nov 2002 12:22

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:
  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;
Dabei sollte das CreateForm automatisch erscheinen, wenn du ArbeitsForm als Hauptformular auswählst. Nur den Rest solltest du drumherumstricken.

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 00:11 Uhr.
Seite 3 von 4     123 4      

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