Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Passwortabfrage mit Datenbank abgleichen (https://www.delphipraxis.net/188594-passwortabfrage-mit-datenbank-abgleichen.html)

Thieon 18. Mär 2016 21:33

Datenbank: ?? • Version: ?? • Zugriff über: ??

Passwortabfrage mit Datenbank abgleichen
 
Moin zusammen,

ich bin kompletter Neuling, was das Programmieren angeht und ich versuche mich schon seit zwei Tagen an das Problem meine Passwortabfrage am laufen zu bekommen. Jetzt habe ich es soweit am laufen, dass er die Eingabe in den Feldern Ben (Benutzername) und Code (Kennwort) mit der Datenbank abgleicht. Jedoch Vergleicht das Programm die Einträge mit der ersten Zeile in der Datenbank und wenn ich einen anderen Benutzernamen wähle, dann passiert nichts.

Meine Prozedur sieht wie folgt aus:
Code:
//LoginButton = true Weiterleitung zum MainForm und schließen LoginFenster
procedure TForm1.BitBtn1Click(Sender: TObject);
 
begin
  if
    (Benutzer.text = form3.Dbf1.FieldByName('Ben').AsString)
  and
     (Code.Text = form3.Dbf1.FieldByName('Code').AsString)
  then
      begin
           form2.show;
           form1.close;
      end
end;
Benutzte Objekte:
TLabeledEdit für Benutzername und Kennwort
TBitBtn für den Login Button

Für die Datenbank habe ich folgende Objekte benutzt:
DGrid
DBNavigator
DataSource
Dbf

Ach ja kann man den FilePath automatisch setzten, so dass die Datenbank immer automatisch gefunden wird (anhand des TableName)?

Ich hoffe meine Angaben sind ausreichend...

Vielen Dank im Voraus

MfG

René

scrat1979 18. Mär 2016 21:44

AW: Passwortabfrage mit Datenbank abgleichen
 
Also...

Filepath und alle anderen Einstellungen kannst du zum Beispiel beim Programmstart im Event "OnFormCreate" zuweisen.

Für deine Passwortabfrage brauchst du kein DBGrid und kein Navigator. Nehme eine SQL-Query Komponente und prüfe so (Pseudocode)

Code:
SELECT *
FROM tblusers
WHERE Passwort='blablabla' AND username='username'
Dann würde ich nur mit SQLQuery.FetchedRows auf <> 0 prüfen.

Alternativ kannst du auch in der Query

Code:
SELECT count(id) As RecFound
FROM tblusers
WHERE ....
Die Anzahl der gefunden Übereinstimmungen berechnen und mittels FieldByName('RecFound').AsInteger <> 0 prüfen.

Schau dir mal die Einsteiger-Tutorials zu SQL und den DB-Komponenten an.

Thieon 18. Mär 2016 22:15

AW: Passwortabfrage mit Datenbank abgleichen
 
Erstmal Danke für deine schnelle Antwort.

Irgendwie kann ich damit nichts anfangen... Ich habe versucht dein Beispiel einzubinden, jedoch klappt das nicht... Ich nutze auch keine SQL Datenbank ich vermute mal das es damit zusammenhängt. Wenn ich ein SQLQuery einbinde dann kann ich dieses Objekt nicht mit meiner Datenbank verbinden. ...


Zitat:

Zitat von scrat1979 (Beitrag 1333322)

Code:
SELECT *
FROM tblusers
WHERE Passwort='blablabla' AND username='username'
Dann würde ich nur mit SQLQuery.FetchedRows auf <> 0 prüfen.

Alternativ kannst du auch in der Query

Code:
SELECT count(id) As RecFound
FROM tblusers
WHERE ....
Die Anzahl der gefunden Übereinstimmungen berechnen und mittels FieldByName('RecFound').AsInteger <> 0 prüfen.

Ach ja das DGrid und den Navigator brauche ich nicht für die Passwortabfrage aber die brauche ich doch zum pflegen der Datenbank...

Und noch eine Anmerkung, die ich vergessen habe...

Ich nutze kein Delphi sondern Lazarus, aber ich habe mir sagen lassen, dass zwischen Lazarus und Delphi kein Unterschied besteht außer die Kosten halt :lol:

Danke

René

nahpets 18. Mär 2016 22:46

AW: Passwortabfrage mit Datenbank abgleichen
 
Da mir nicht klar ist, was für eine Datenbank Du nutzt, versuch es mal so in der Form (nur hingedaddelt und nicht getestet):
Delphi-Quellcode:
//LoginButton = true Weiterleitung zum MainForm und schlie&#8730;üen LoginFenster
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  dbf1.Filtered := false;
  dbf1.Filter  := Format('Ben = %s and Code = %s',[QuotedStr(Benutzer.text),QuotedStr(Code.Text)]);
  dbf1.Filtered := true;
  dbf1.First;
  if not dbf1.EoF then begin
    form2.show;
    form1.close;
  end;
  dbf1.Filtered := false;
end;

Thieon 19. Mär 2016 05:50

AW: Passwortabfrage mit Datenbank abgleichen
 
Tausend Dank...:thumb:

Zitat:

Zitat von nahpets (Beitrag 1333325)
Da mir nicht klar ist, was für eine Datenbank Du nutzt, versuch es mal so in der Form (nur hingedaddelt und nicht getestet):
Delphi-Quellcode:
//LoginButton = true Weiterleitung zum MainForm und schlie&#8730;üen LoginFenster
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  dbf1.Filtered := false;
  dbf1.Filter  := Format('Ben = %s and Code = %s',[QuotedStr(Benutzer.text),QuotedStr(Code.Text)]);
  dbf1.Filtered := true;
  dbf1.First;
  if not dbf1.EoF then begin
    form2.show;
    form1.close;
  end;
  dbf1.Filtered := false;
end;

Genau das hat mein Problem gelöst... Ich verstehe zwar noch nicht ganz, warum die Filterfunktion ausgeschaltet sein muss und danach wieder eingeschaltet werden muss, aber ich nehme es erstmal so hin. :lol:

MfG

René

jobo 19. Mär 2016 07:51

AW: Passwortabfrage mit Datenbank abgleichen
 
Zunächst mal:
Normalerweise meldet man sich an der DB mit User/PW an. Dein Verfahren, auf einer geöffneten DB nach passenden Usern zu suchen erinnert eher an Mittelschicht Anwendungen, klassische Webserver, wie passt das zu einem Fatclient?
Für den Fall, dass dbf tatsächlich dbf ist und die "Datenbank" einfach so im Zugriff liegt, wofür brauchst Du Nutzer und Passwort, wenn sowieso jeder die "Datenbank" öffnen kann?

Die Filtered Sache:
Das Attribut gibt den Zustand an, bzw. ändert ihn bei Zuweisung. Der Filter(text) selbst ist natürlich nur wirksam, wenn Filtered True ist. Einen aktiven Filter ändert man nicht. Man schaltet auch den Motor aus, bevor man die Zündkerzem wechselt (und dann erst wieder an)

Ach und wie soll ein System anhand eines Tabellennamen wissen, wo die zugehörige DB liegt ohne in die DB reinzuschauen? Das geht nur wenn Du es definierst. TABA liegt auf C:\meinedb.dbf, TABB lieft auf c:\backup\meinedb.dbf usw.
Alternativ kannst Du nach DBF suchen und darin nach dem gewünschten Tabellennamen schauen.

nahpets 19. Mär 2016 08:08

AW: Passwortabfrage mit Datenbank abgleichen
 
Zitat:

Zitat von Thieon (Beitrag 1333329)
Ich verstehe zwar noch nicht ganz, warum die Filterfunktion ausgeschaltet sein muss und danach wieder eingeschaltet werden muss, aber ich nehme es erstmal so hin.

Probiere es aus, ob es ohne das Aus- und Einschalten geht. Wenn ja, dann lass es weg, wenn nein, dann schau, wie sich das Verhalten verändert.

Was passierte denn, wenn das erste Ausschalten entfällt, aber bereits ein Filter gesetzt ist?
Wird der Filter dann bereits bei der Zuweisung der "Filtertextes" entsprechend verändert?
Oder ist das Einschalten dann erforderlich?
Lässt sich ein veränderter Filter einschalten, wenn bereits ein anderer Filter eingeschaltet ist?
Was ist im DBGrid zu sehen, wenn ein Filter eingeschaltet ist?
Kann man dann noch per Navigator durch die Daten scrollen?

@Jobo:

Ich hab' auch eine "Datenbank", in der ich Benutzernamen und Passwörter für die verschiedenen "Systeme", auf die ich so im Laufe der Zeit zugreifen muss, verwalte.

Wenn ich halt mal wieder eine Anmeldung vergessen habe, so brauche ich nur Benutzername und Passwort der Anwendung, mit der ich die Benutzernamen und Passwörter verwalte und kann dann dort nachschauen, welchen Benutzernamen und welches Passwort ich gerade benötige.
Prinzipiell könnte es sich hier also schon um eine sinnvolle Anwendung halten.

Andererseits könnte man auf diese Weise aber auch eine Zugriffsverwaltung (mit Berechtigungskonzept) ähnlich verwalten.
Die Anwendung meldet sich an der Datenbank an, aber diese Anmeldung ist unabhängig davon, ob der Nutzer der Anwendung dann auch über die Anwendung Zugriff auf die Datenbank bekommt.

Wenn ich mich hier im Forum anmelde, dann muss ja auch "irgendwer" in 'ner Datenbank nachschauen, ob ich zugriffsberechtigt bin und wenn ja, mit welchen Rechten. Aber Benutzername und Passwort, für die hinter dem Forum liegenden Datenbank, sind mir vollkommen unbekannt. Und bei der Registrierung im Forum wird garantiert kein Benutzer (mit meinen Anmeldedaten) in der Datenbank anlegt.

Sir Rufo 19. Mär 2016 08:18

AW: Passwortabfrage mit Datenbank abgleichen
 
@nahpets

Dein Vergleich mit dem Forum ist das was @jobo mit Mittelschicht meinte. ;)

nahpets 19. Mär 2016 08:37

AW: Passwortabfrage mit Datenbank abgleichen
 
Zitat:

Zitat von Sir Rufo (Beitrag 1333333)
@nahpets

Dein Vergleich mit dem Forum ist das was @jobo mit Mittelschicht meinte. ;)

Jain, die Form der Anwendung schon, wäre dann aber kein Fatclient.

Die Anwendung hier könnte quasi die Grundlage liefern, damit die Mittelschicht die Möglichkeit bekommt, Benutzernamen und Passwörter abzugleichen.

Die Mittelschicht muss nicht unbedingt selbst eine Option enthalten, mit deren Hilfe sie sich quasi selbst verwaltet.

Hier dürfte es sich eher um eine Verwaltung für Benutzernamen und Passwörter handeln, die halt zufällig die Daten in irgendeiner Tabelle irgendeiner Datenbank speichert.

Aber eigentlich egal: Die Informationslage ist wohl nicht aussagekräftig genug, um hier auf eine konkrete Anwendung schließen zu können ;-)

jobo 19. Mär 2016 08:41

AW: Passwortabfrage mit Datenbank abgleichen
 
Zitat:

Zitat von Sir Rufo (Beitrag 1333333)
@nahpets

Dein Vergleich mit dem Forum ist das was @jobo mit Mittelschicht meinte. ;)


Ja, so meinte ich das.

Es kann natürlich sein, dass der TE eine Passwortverwaltung schreibt. Da kann man sich immer noch fragen, ob es Sinn macht in der Form.
Ich vermute eher, dass gemäß Selbstauskunft des TE hier noch einige Verständnisschwierigkeiten bestehen. Aber das kann er ja selbst fragen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:09 Uhr.
Seite 1 von 3  1 23      

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