עבור לתוכן

בעיה באימות ובדיקת נתונים מול מסד הנתונים

Featured Replies

פורסם

שלום רב,

יש לי בעיה בעת אימות נתונים מול מסד הנתונים כאשר אני מכניס פרטים נכונים אז לא מתבצעת השורה של הבדיקה והתוכנה מזהה כי לא הוכנס פרטי כניסה / הוכנס פרטי כניסה שגויים.

הקוד הינו:


Private Sub Command1_Click()
Dim rs As New ADODB.Recordset
ConnectDB
Call mdlDB.Execute("select * FROM tblUsers", rs)
If rs.RecordCount = 0 Then
DisConnectDB
MsgBox ("לא נמצאו משתמשים")
Else
If rs.Fields("firstName").Value = txtUserName.Text And rs.Fields("lastName").Value = txtPass Then
FirstName = rs.Fields("firstName").Value
LastName = rs.Fields("lastName").Value
authorization = rs.Fields("accessCode").Value
DisConnectDB
frmMain.Show
frmLog.Hide
Else
MsgBox ("שם משתמש ו/או סימא לא נכונים, אנא נסה שנית")
End If
End If
End Sub

השורה הבעייתית הינה:


If rs.Fields("firstName").Value = txtUserName.Text And rs.Fields("lastName").Value = txtPass Then

מה הבעיה וכיצד אני פותר את הבעיה הזו ?

פורסם

1) אתה יכול לדבג את הקוד שלך ע"י הדפסה של הערכים שנמצאים לך ב- RS, ולבדוק שאלה אכן הערכים שאתה מצפה להם.

2) השאילתא שלך מחזירה לך, כנראה, יותר משורה אחת. אתה צריך לצמצם את הערכים שחוזרים לך ע"י where.

פורסם
  • מחבר

ביצעתי DEBUG לתוכנית ולא מצאתי בעיה לכן פניתי אליכם

חשיבת היסוד הינה שלא קיים 2 משתמשים ז\הים בעלי אותו שם משתמש וסיסמא דבר עליה מבוססת השאילה לכן היא לא יכולה להחזיר יותר משורה אחת

פורסם

מה ההדפסה של

rs.Fields("firstName").Value

וההדפסה של

rs.Fields("lastName").Value

מראים?

ובקשר למשפט השני שלך - אתה לא מצמצם את השאילתא שלך בשום מקום. גם אם אין 2 משתמשים בעלי שם משתמש וסיסמא זהים, אתה לא מתייחס לזה בשום מקום בשאילתא שלך.

פורסם

בנוגע לקוד:

If rs.Fields("firstName").Value = txtUserName.Text And rs.Fields("lastName").Value = txtPass Then

FirstName = rs.Fields("firstName").Value

LastName = rs.Fields("lastName").Value

authorization = rs.Fields("accessCode").Value

DisConnectDB

frmMain.Show

frmLog.Hide

האם השורה :

rs.Fields("lastName").Value = txtPass

תקינה?

txtPass אמור לציין סיסמא , לא?

מדוע לאכסן מחדש את הנתונים username ו lastname מהדטבייס? יש לך אותם כבר בהזנה של הבנאדם והם נכונים אחרי האימות , מדובר בבזבוז זמן ומשאבים.

פורסם
  • מחבר

בנוגע לקוד:

האם השורה :

rs.Fields("lastName").Value = txtPass

תקינה?כן

txtPass אמור לציין סיסמא , לא?כן

מדוע לאכסן מחדש את הנתונים username ו lastname מהדטבייס? יש לך אותם כבר בהזנה של הבנאדם והם נכונים אחרי האימות , מדובר בבזבוז זמן ומשאבים.

התשובה בציטוט..

אני מאחסן את המידע של שם פרטי ושם משפחה על מנת להשתמש בו בהמשך (כאשר ה-DB סגור) וברך את המשתמש בכל אחד מהחלונות, נוצר ומתשנה בהתחלה ונשאר אותם נתונים לאוחר כל התוכנית.

פורסם

התשובה בציטוט..

אני מאחסן את המידע של שם פרטי ושם משפחה על מנת להשתמש בו בהמשך (כאשר ה-DB סגור) וברך את המשתמש בכל אחד מהחלונות, נוצר ומתשנה בהתחלה ונשאר אותם נתונים לאוחר כל התוכנית.

א. אתה משווה בין הסיסמא לשם משפחה.. זאת ככל הנראה הטעות..

ב. אתה מבקש מידע מהדטהבייס שכבר קיים לך במשתנים.. תסתכל שוב.

פורסם
  • מחבר

צודק, סידרתי..

האם הקוד הנ"ל תקין כעת ? האם הקוד מובן נכון כעת מבחינה תחבירית ?


Dim userFound As Boolean
ConnectDB
userFound = False
Set mdlDB.rs = oConn.Execute("select * FROM tblUsers")
If rs.EOF = True Or rs.BOF = True Then
DisConnectDB
MsgBox ("לא נמצאו משתמשים")
Else
While rs.EOF = False And userFound = False
If rs.Fields("username").Value = txtUserName.Text And rs.Fields("password").Value = txtPass Then
FirstName = rs.Fields("firstName").Value
LastName = rs.Fields("lastName").Value
authorization = rs.Fields("accessCode").Value
DisConnectDB
userFound = True
frmMain.Show
frmLog.Hide
Else
rs.MoveNext
End If
Wend
End If
If userFound = False Then
DisConnectDB
MsgBox ("שם משתמש ו/או הסיסמא לא נכונים, אנא נסה שנית")
End If

פורסם
  • מחבר

רשמתי את הביטוי הבא אך הוא עושה לי שגיאה עליה, מה לא נכון בקוד ?

בקישור לא רשום כיצד בודקים 2 שדות ? האם יש לכתוב את הקוד פעמים (שורת קוד לכל שדה רצוי)?


Set mdlDB.rs = oConn.Execute("select * FROM tblUsers WHERE username=txtUserName.Text&password=txtPass.Text")

פורסם

יש לך לחצן של NEXT בעמוש שמפנה אותך ל-

http://www.w3schools.com/sql/sql_and_or.asp

שים לב שאתה צריך לשרשר את שם המשתמש והסיסמא לשאילתא שאתה צריך עם " מסביבם.

פורסם
  • מחבר

רשמתי את השורה הנ"ל והוא רושם לי שגיאה של חוסר התאמה בין הסוגים, למה ? מה הבעיה ?


Set mdlDB.rs = oConn.Execute("select * FROM tblUsers WHERE username=txtUserName.Text And password=txtPass.Text")

פורסם

אתה צריך לשרשר את txtUserName.Text, ולא להכניס את השם שלו לשאילתא.

בנוסף, יש בלינק שהבאתי דוגמא של נכון ולא נכון על שאילתא של מחרוזת.

פורסם
  • מחבר

שיניתי את הקוד והקוד העדכני הינו:


ConnectDB
Set mdlDB.rs = oConn.Execute("select * FROM tblUsers WHERE username='" + txtUserName.Text + "' and password='" + txtPass.Text + "'")
If rs.EOF = True Or rs.BOF = True Then
MsgBox ("שם משתמש ו/או הסיסמא לא נכונים, אנא נסה שנית")
Else
FirstName = rs.Fields("firstName").Value
LastName = rs.Fields("lastName").Value
authorization = rs.Fields("accessCode").Value
DisConnectDB
frmMain.Show
frmLog.Hide
End If

האם הקוד כעת תקין ?

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים