SQLite Recordset

Anfängerfragen zum Programmieren mit PureBasic.
Scream
Beiträge: 32
Registriert: 26.12.2005 15:10

SQLite Recordset

Beitrag von Scream »

Hallo,
leider wieder eine Frage....
Diesmal bezüglich SQLite. Leider verstehe ich nicht so richtig wie ich ganz einfach zwei bestimmte Felder aus einem Record auslesen kann.
Es geht eigentlich um ein registrier und login tool.
In einem Fenster kann man einen neuen Benutzer anlegen wobei die Daten in eine Datenbank geschrieben werden.
Im nächsten Fenster sollen dann der Benutzername und das Passwort aus der Datenbank ausgelesen werden, und mit den Daten aktuell eingegeben Daten des Users verglichen werden.
Also im Grunde genommen ein Mehrbenutzersystem.
Mein konkretes Problem liegt nun darin, das ich nicht weiß wie ich einen Record auswählen kann, um dann aus diesem Record bestimmte Felder auslesen zu können.

Sprich ich gebe Scream ein, dann soll erst mit der Datenabnk verglichen werden ob es diesen Benutzernamen gibt.
Wenn ja dann das eingegebene Passwort mit dem aus der Datenbank vergleichen, und dann zugang gewähren.

Code: Alles auswählen

If SQLite3_InitLib("sqlite3.dll") = #False 
  MessageRequester("Vereinsprog - Kritischer Fehler", "Fehler beim intialisieren der sqlite3.dll")
  End
EndIf

dbHandler = SQLite3_OpenDatabase("Benutzer.db")

Benutzername.s = GetGadgetText(#Benutzername_Neuen)
Passwort.s = GetGadgetText(#Passwort_Neuen)
Vorname.s = GetGadgetText(#Vorname_Neuen)
Nachname.s = GetGadgetText(#Nachname_Neuen)
Organisation.s = GetGadgetText(#Organisation_Neuen)
Regionalverband.s = GetGadgetText(#Regionalverband_Neuen)
Ortsverband.s = GetGadgetText(#Ortsverband_Neuen)


sSQL.s = "Insert Into Benutzer (Benutzername, Passwort, Vorname, Nachname, Organisation, Regionalverband, Ortsverband) Values ('"+ Benutzername +"', '"+ Passwort +"', '"+ Vorname +"', '"+ Nachname +"', '"+ Organisation +"', '"+ Regionalverband +"', '"+ Ortsverband +"')"
SQLite3_Execute(sSQL, dbHandler)

;Hier dachte ich nun an die Recordset abfrage...

SQLite3_CloseDatabase(dbHandler)

SQLite3_End()
Kann mir hier jemand helfen??
Ich habe die Hilfe bezgl SQLite von Kiffi angeschaut, aber so richtig verstanden habe ich es leider nicht.

Mfg
Scream
walker
Beiträge: 278
Registriert: 29.08.2004 18:39
Wohnort: Bayern

Beitrag von walker »

Hi,

also das "Insert" wird nur für neue Datensätze gebraucht (diese werden damit in die DB eingetragen)

Wenn Du nun Daten auslesen willst, musst Du einen Select-Befehl auf die DB absetzen. Z.B.: "SELECT * FROM Benutzer WHERE Benutzername ='Scream';"

Hierbei steht der * für alle Daten der Datensätze aus der Tabelle Benutzer, die einen Benutzer Names Scream beinhalten (Dies sicherzustellen ist eine andere Aufgabe) . In der Rückgabe befindet sich jetzt im Idealfall ein Datensatz, der zum Benutzer passt... das Passwort auslesen und vergleichen ... fertig
Scream
Beiträge: 32
Registriert: 26.12.2005 15:10

Beitrag von Scream »

ah okay vielen dank.....
aber wie sage ich der datenbank, dass er nur aus der zeile wo er den benutzer Scream gefunden hat, das passwort vergleichen soll??
Also nicht aus allen passwörtern lesen sondern nur aus der zeile....

Scream
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

Hai Scream,

> Sprich ich gebe Scream ein, dann soll erst mit der Datenabnk verglichen
> werden ob es diesen Benutzernamen gibt.
> Wenn ja dann das eingegebene Passwort mit dem aus der Datenbank
> vergleichen, und dann zugang gewähren.

Code: Alles auswählen

RS.SQLite3_Recordset

DerEingegebeneUsername$="Hans Wurst"
DasEingegebenePasswort$="SachIchNich"

SQL$ = "Select * From Benutzer Where Benutzername = '" + DerEingegebeneUsername$ + "'"
SQLite3_GetRecordset(SQL$, dbHandler, @RS)

If RS\handle
  If RS\EOF
    Debug "User ist nicht in der Datenbank vorhanden!"
  Else
    SQLite3_GetRecordsetValueByName("Passwort", @RS)
    If RS\sValue <> DasEingegebenePasswort$
      Debug "Das Passwort ist falsch!"
    Else
      Debug "Username und Passwort sind korrekt"
    EndIf
  EndIf
EndIf

SQLite3_ReleaseRecordset(@RS)
Grüße ... Kiffi
Scream
Beiträge: 32
Registriert: 26.12.2005 15:10

Beitrag von Scream »

vielen dank Kiffi :allright:
aber ein kleines problem erscheint noch bei mir....

Und zwar immer wenn ich das Passwort das erste mal eingebe wird es nicht erkannt sondern nur beim zweiten mal oder öfters.....
Ich vermute mal das ist nicht okay mit dem GetGadgetText() innerhalb der Procedur....
oder woran kann das liegen??

Code: Alles auswählen

Procedure ReadBenutzerDB()

If SQLite3_InitLib("sqlite3.dll") = #False 
  MessageRequester("Vereinsprog - Kritischer Fehler", "Fehler beim intialisieren der sqlite3.dll")
  End
EndIf

dbHandler = SQLite3_OpenDatabase("Benutzer.db")

RS.SQLite3_Recordset

BenutzernameLogin.s = GetGadgetText(#Benutzername_Login)
PasswortLogin.s = GetGadgetText(#Passwort_Login)

SQL$ = "Select * From Benutzer Where Benutzername = '" + BenutzernameLogin + "'"
SQLite3_GetRecordset(SQL$, dbHandler, @RS)

If RS\handle
  If RS\EOF
    MessageRequester("Vereinsprog", "Ihr eingegebener Benutzername wurde nicht in der Datenbank gefunden")
  Else
    SQLite3_GetRecordsetValueByName("Passwort", @RS)
    If RS\sValue <> PasswortLogin.s
      MessageRequester("Vereinsprog", "Ihr eingegebenes Passwort stimmt nicht mit dem Benutzernamen überein")
    Else
      MessageRequester("Vereinsprog", "Everything okay....go next")
    EndIf
  EndIf
EndIf

SQLite3_ReleaseRecordset(@RS)

SQLite3_CloseDatabase(dbHandler)

SQLite3_End()




EndProcedure          

Mfg
Scream
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

> aber ein kleines problem erscheint noch bei mir....

mh, sieht auf den ersten Blick in Ordnung aus.
Seltsam ist auch, dass es erst bei zweiten Mal funktioniert.

Was mir auffällt: Verbindest Du Dich beim Aufruf von [c]ReadBenutzerDB()[/c]
wirklich zum ersten Mal mit der Datenbank oder hast Du sie schon vorher
geöffnet und gehst in die Prozedur, ohne sie zu schliessen? Das würde den
Fehler erklären.

Grüße ... Kiffi
Scream
Beiträge: 32
Registriert: 26.12.2005 15:10

Beitrag von Scream »

also ich habe unter anderem zwei Proceduren einmal ReadBenutzerDB() und WriteBenutzerDB() beide öffne und schließe ich nach dem selben verfahren...also nur innerhalb der procedur
Antworten