Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Passwortabfrage durch IB (https://www.delphipraxis.net/39941-passwortabfrage-durch-ib.html)

raccoon 9. Feb 2005 11:10

Datenbank: Interbase • Version: 6.5 • Zugriff über: dbexpress

Passwortabfrage durch IB
 
Hi,

also ich möchte folgendes fertig stellen, und zwar habe ich eine Form1 wo zwei EditFelder drauf liegen wo man Username und Passwort eingeben muss, diese Eingaben solen dann mit der Interbase Datenbank verglichen werden.

Hier zunächst der Quelltext mit dem ich es versucht habe,

Code:
var pass,user: TSQLDataSet;

{$R *.dfm}

procedure TForm1.BTN_BeendenClick(Sender: TObject);
begin
  application.Terminate;
end;

procedure TForm1.BTN_LoginClick(Sender: TObject);
begin
  User:=SQLDataSet1;
  pass:=SQLDataSet2;
  if (ED_Passwort.Text=pass) and (ED_Username.Text=user) then
  begin
    Form2.Show;
    Form1.Visible:=false;
  end;
end;

procedure TForm1.ED_PasswortKeyPress(Sender: TObject; var Key: Char);
begin
  User:=SQLDataSet1;
  pass:=SQLDataSet2;
  if (ED_Passwort.Text=SQLDataSet2) and (ED_Username.Text=SQLDataSet1) then
  begin
    Form2.Show;
    Form1.Visible:=false;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
SQLConnection1.Connected:=True;
SQLDataSet1.Active:=True;
SQLDataSet2.Active:=True;
end;
nun zeigt er mir den fehler an Inkompatible typen TSQLDataset und String, ist ja auch verständlich da das Edit Feld ein String wert haben möchte ich aber die zu vergleichenden werte als TSQLDataSet angegeben habe, also zur Verbindungserstellung habe ich einmal den TSQLConnection und zum andern zwei TSQLDataSet's benutzt da ich einmal die SQL Abfrage mit pass und einmal mit user habe.

naja nun weiß ich nich recht weiter, habe ich in der Grundüberlegung etwas falsch gemacht oder wo sonst??

könnte mir dabei einer Helfen bitte??

Bye

Grumble 9. Feb 2005 11:15

Re: Passwortabfrage durch IB
 
also user und passwort sind eigenschaften der connection

d.h. du musst das etwa so machen .. pseudo code

connection1.passwort=edit1.text
connection1.user=edit2.text

diese werte also der connection uebergeben

natuerlich solltest du auch abfragen ob sich dann connecten laesst, und wenn nicht dann eine meldung ausgeben 'passwort oder login flasch'

raccoon 9. Feb 2005 11:33

Re: Passwortabfrage durch IB
 
meintest du das so ungefair??

Delphi-Quellcode:
procedure TForm1.BTN_LoginClick(Sender: TObject);
begin
  if (SQLConnection1.U_pass=ED_Passwort.Text) and (SQLConnection1.U_Name=ED_Username.Text) then
  begin
    Form2.Show;
    Form1.Visible:=false;
  end;

Grumble 9. Feb 2005 11:37

Re: Passwortabfrage durch IB
 
so in etwa meinte ich das :-D

raccoon 9. Feb 2005 11:52

Re: Passwortabfrage durch IB
 
joa hab ich mir schon gedacht aber das funktioniert auch nicht wirklich da er die felder aus der db U_name und U_pass nicht erkennt, wodran könnte das liegen? die verbindung zur datenbank ist erstellt...

Grumble 9. Feb 2005 12:01

Re: Passwortabfrage durch IB
 
das liegt normalerweise daran dass passwort und benutzername keine datenbankfelder sind , sondern eher in deren eigenschaften stehen. womit hast du die datenbank erstellt? hast du im objektinspektor mal versucht zur db zu connecten? hast du die eigenschaft database der connection gesetzt?

raccoon 9. Feb 2005 12:04

Re: Passwortabfrage durch IB
 
ja also über den objektinspektor baut er die datenbankverbindung auf, habe auch den loginprompt ausgeschalten da das dauernde verbinden zur datenbank mich stört, die datenbank hab ich erstellt mit interbase benutzen zum datensätze einfügen habe ich den IBExpert.

Grumble 9. Feb 2005 12:11

Re: Passwortabfrage durch IB
 
achso bei interbase:
im ibdatabase object, stehen username und passwort wohl nich als eigenschaft direkt, sondern in den params, also

musst du diese eigenschaften setzen
ca. soleider weiss ich jetzt die genaue syntax der param strings nicht

Delphi-Quellcode:
var s2,s1:string;
  s1:=edit1.text;
  s2:=edit2.text;
  IBD.Params.Strings[0]:='password='+s1;
  IBD.Praams.Strings[1]:='username='+s2;
IBD ist das interbase database objekt

raccoon 9. Feb 2005 12:30

Re: Passwortabfrage durch IB
 
boa ich check des nich so ganz, ich hab des jetzt so geschrieben,

Delphi-Quellcode:
procedure TForm1.BTN_LoginClick(Sender: TObject);
var s2,s1:string;
  s1:=ED_Passwort.Text;
  s2:=ED_Username.Text;
  IBD.Params.Strings:='password='+s1;
  IBD.Praams.Strings:='username='+s2;
begin
  if (IBD.Params.Strings=ED_Passwort.Text) and (IBD.Params.Strings=ED_Username.Text) then
  begin
    Form2.Show;
    Form1.Visible:=false;
  end;
end;
doch ich werd daraus nich schlau, erstens sagt er bezeichner redefiniert was ich zum ersten mal sehe und sonst weiß ich auch nich weiter...

Grumble 9. Feb 2005 12:42

Re: Passwortabfrage durch IB
 
oh sorry also
var sind nur s1,s2

muss so aussehn
Delphi-Quellcode:
var s1,s2:string;

begin
  s1:=ED_Passwort.Text;
  s2:=ED_Username.Text;
  IBD.Params.Strings:='password='+s1;
  IBD.Praams.Strings:='username='+s2;

raccoon 9. Feb 2005 12:48

Re: Passwortabfrage durch IB
 
was meinst du nochmal mit IBD, soll ich anstatt IBD SQLConnection dort einfügen??

raccoon 9. Feb 2005 12:57

Re: Passwortabfrage durch IB
 
so habs nochmal geändert, war nur leicht verwirrt gerade, nun also der quellcode sieht nun so aus:

Delphi-Quellcode:
procedure TForm1.BTN_LoginClick(Sender: TObject);
begin
  s1:=ED_Passwort.Text;
  s2:=ED_Username.Text;
  SQLConnection1.Params.Strings[1]:='password='+s1;
  SQLConnection1.Params.Strings[2]:='username='+s2;
  if (SQLConnection1.Params.Strings[1]=ED_Passwort.Text) and (SQLConnection1.Params.Strings[2]=ED_Username.Text) then
  begin
    Form2.Show;
    Form1.Visible:=false;
  end
    else ShowMessage('Falsche Eingabe');
end;
das programm startet, keine fehler doch er liest den benutzernamen oder das passwort nicht richtig ein, da ist noch ein kleiner fehler aber ich denke den schaff ich selber zu finden, wenn nicht ich weiß ja wo ich hilfe bekommen, danke sehr schonmal für deine hilfe.

Grumble 9. Feb 2005 13:23

Re: Passwortabfrage durch IB
 
ibd ist das ibdatabase objekt, ich hab das nur so genannt...

du solltest dieses database objekt auch eingefuegt haben und die entsprechende db im objekt inspektor einstellen usw....

ich hab nochmal nachgeschaut die params muessen so aussehn:

user_name=SYSDBA
password=masterkey

wobei SYSDBA und masterkey beispiele sind fuer s1 und s2

also

Delphi-Quellcode:
Params.Strings[0]:='user_name='+s1;
Params.Strings[1]:='password='+s2;
wieso hast du [1] und [2] als strings?

raccoon 9. Feb 2005 13:48

Re: Passwortabfrage durch IB
 
also das problem ist ja er soll sich nicht mit dem namen sysdba und pw masterkey anmelden sondern mit den in der table T_user befindlichen datensätzen, die verbindug zur datenbank über den benutzer sysdba wird in der Procedure FormCreate schon aufgerufen und besteht. In der Datenbank befinden sich auch schon 2 user mit dem entsprechenden pass, diese sind einmal Admin und einmal test mit pw abc123, najo und des macht er nicht wirklich, auch per sysdba und masterkey loggt er sich nciht ein und gibt aus das eine Falsche eingabe bestand.

Grumble 9. Feb 2005 13:59

Re: Passwortabfrage durch IB
 
achso :) jetzt is alles klar...
benutze eine ibquery komponente ich nenn sie mal IBQ und schreib folgendes

Delphi-Quellcode:
procedure TForm1.BTN_LoginClick(Sender: TObject);
begin
  s1:=ED_Passwort.Text;
  s2:=ED_Username.Text;

  IBQ.SQL.Text:='Select PASSWORT FROM CONDATA Where USER='+s2;
  IBQ.SQL.OPEN;
  if IBQ.Fieldbyname('PASSWORT').asString=s1 then
  begin
    Form2.Show;
    Form1.Visible:=false;
  end
    else ShowMessage('Falsche Eingabe');
end;
hierbei waer die db tabelle aus der du liest CONDATA und deren Felder PASSSWORT und USER... du musst also die entsprechend deiner im quellcode aendern

raccoon 9. Feb 2005 14:05

Re: Passwortabfrage durch IB
 
der erkennt bei

Delphi-Quellcode:
SQLQuery1.SQL.OPEN;
das open nicht, wodran kann das liegen??

Grumble 9. Feb 2005 14:08

Re: Passwortabfrage durch IB
 
versuch mal nur sqlquery1.open

raccoon 9. Feb 2005 14:21

Re: Passwortabfrage durch IB
 
so steht das jetzt da:

Delphi-Quellcode:
s1:=ED_Passwort.Text;
  s2:=ED_Username.Text;

  SQLQuery1.SQL.Text:='Select U_pass FROM T_User Where U_name='+s2;
  SQLQuery1.Open;
  if SQLQuery1.Fieldbyname('U_pass').asString=s1 then
  begin
    Form2.Show;
und er gibt mir nach eingabe vom benutzer und passwort den fehler aus "Exeption von EDatabaseError Meldung: Column Unknown ADMINISTRATOR

Grumble 9. Feb 2005 14:41

Re: Passwortabfrage durch IB
 
ich hab leider jetzt feierabend... wenn du magst dann schick mir das projekt inkl. db per mail (grumble@gmx.ch) oder haengs an einen deiner posts an.
dann guck ich zu hause nochmal rein.

vielleicht hilft dir auch noch jemand anderes hier. die meisten hier sind viel kompetenter als ich.

Stevie 9. Feb 2005 14:47

Re: Passwortabfrage durch IB
 
Dein String muss in einfachen Anführungstrichen stehen, sonst interpretiert SQL das als Vergleich zweier Spalten!
Delphi-Quellcode:
SQLQuery1.SQL.Text:='Select U_pass FROM T_User Where U_name='''+s2+'''';
oder
Delphi-Quellcode:
SQLQuery1.SQL.Text:='Select U_pass FROM T_User Where U_name='+QuotedStr(s2);

raccoon 9. Feb 2005 14:48

Re: Passwortabfrage durch IB
 
Liste der Anhänge anzeigen (Anzahl: 1)
hast du evtl. zuhause auch internet?? vielleicht wenn du zeit hättest könnten wir dann mal über headset oder icq oder sonstiges reden, nur wenn du zeit hättest oder interesse, das programm pack ich jetzt mal ebend in eine rar

raccoon 9. Feb 2005 14:55

Re: Passwortabfrage durch IB
 
danke stevie, mit Quoted hats geklappt, also das funzt nun das find ich gut, wisst ihr vielleicht noch wie ich des einstelle das bei enter klicken das so ist als wenn ich den Login button drücke??? weil benutzer drücken ja sehr gerne einfach Enter und somit wird dann eingelogged...ich hoffe ich habs jetzt nicht zu umständlich erklärt :)

Stevie 9. Feb 2005 15:04

Re: Passwortabfrage durch IB
 
Setz mal Default deines Ok-Buttons auf True und ModalResult auf mrOK...
Ansonsten (nach einer Suche): Neue Frage = Neuer Thread ;-)

raccoon 9. Feb 2005 15:09

Re: Passwortabfrage durch IB
 
danke sehr Stevie.

Quake 10. Feb 2005 06:17

Re: Passwortabfrage durch IB
 
Delphi-Quellcode:
procedure TForm1.ED_PasswortKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
    if (Key=VK_RETURN) then
    begin
      Key:=0;
      .
      .
      .
      SucheStartBtnClick(Sender);
    end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:05 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