פורסם 2011 בינואר 2914 שנים שלום רב,יש לי בעיה בעת אימות נתונים מול מסד הנתונים כאשר אני מכניס פרטים נכונים אז לא מתבצעת השורה של הבדיקה והתוכנה מזהה כי לא הוכנס פרטי כניסה / הוכנס פרטי כניסה שגויים.הקוד הינו: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 IfEnd Subהשורה הבעייתית הינה:If rs.Fields("firstName").Value = txtUserName.Text And rs.Fields("lastName").Value = txtPass Thenמה הבעיה וכיצד אני פותר את הבעיה הזו ?
פורסם 2011 בינואר 2914 שנים 1) אתה יכול לדבג את הקוד שלך ע"י הדפסה של הערכים שנמצאים לך ב- RS, ולבדוק שאלה אכן הערכים שאתה מצפה להם.2) השאילתא שלך מחזירה לך, כנראה, יותר משורה אחת. אתה צריך לצמצם את הערכים שחוזרים לך ע"י where.
פורסם 2011 בינואר 3114 שנים מחבר ביצעתי DEBUG לתוכנית ולא מצאתי בעיה לכן פניתי אליכםחשיבת היסוד הינה שלא קיים 2 משתמשים ז\הים בעלי אותו שם משתמש וסיסמא דבר עליה מבוססת השאילה לכן היא לא יכולה להחזיר יותר משורה אחת
פורסם 2011 בפברואר 214 שנים מה ההדפסה של rs.Fields("firstName").Valueוההדפסה שלrs.Fields("lastName").Valueמראים?ובקשר למשפט השני שלך - אתה לא מצמצם את השאילתא שלך בשום מקום. גם אם אין 2 משתמשים בעלי שם משתמש וסיסמא זהים, אתה לא מתייחס לזה בשום מקום בשאילתא שלך.
פורסם 2011 בפברואר 314 שנים בנוגע לקוד: 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 מהדטבייס? יש לך אותם כבר בהזנה של הבנאדם והם נכונים אחרי האימות , מדובר בבזבוז זמן ומשאבים.
פורסם 2011 בפברואר 314 שנים מחבר בנוגע לקוד:האם השורה :rs.Fields("lastName").Value = txtPass תקינה?כןtxtPass אמור לציין סיסמא , לא?כןמדוע לאכסן מחדש את הנתונים username ו lastname מהדטבייס? יש לך אותם כבר בהזנה של הבנאדם והם נכונים אחרי האימות , מדובר בבזבוז זמן ומשאבים.התשובה בציטוט..אני מאחסן את המידע של שם פרטי ושם משפחה על מנת להשתמש בו בהמשך (כאשר ה-DB סגור) וברך את המשתמש בכל אחד מהחלונות, נוצר ומתשנה בהתחלה ונשאר אותם נתונים לאוחר כל התוכנית.
פורסם 2011 בפברואר 414 שנים התשובה בציטוט..אני מאחסן את המידע של שם פרטי ושם משפחה על מנת להשתמש בו בהמשך (כאשר ה-DB סגור) וברך את המשתמש בכל אחד מהחלונות, נוצר ומתשנה בהתחלה ונשאר אותם נתונים לאוחר כל התוכנית.א. אתה משווה בין הסיסמא לשם משפחה.. זאת ככל הנראה הטעות..ב. אתה מבקש מידע מהדטהבייס שכבר קיים לך במשתנים.. תסתכל שוב.
פורסם 2011 בפברואר 414 שנים מחבר צודק, סידרתי..האם הקוד הנ"ל תקין כעת ? האם הקוד מובן נכון כעת מבחינה תחבירית ? 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
פורסם 2011 בפברואר 414 שנים אין סיבה לעשות את הלולאה הזו. תקרא את זה:http://www.w3schools.com/sql/sql_where.asp
פורסם 2011 בפברואר 414 שנים מחבר רשמתי את הביטוי הבא אך הוא עושה לי שגיאה עליה, מה לא נכון בקוד ?בקישור לא רשום כיצד בודקים 2 שדות ? האם יש לכתוב את הקוד פעמים (שורת קוד לכל שדה רצוי)?Set mdlDB.rs = oConn.Execute("select * FROM tblUsers WHERE username=txtUserName.Text&password=txtPass.Text")
פורסם 2011 בפברואר 414 שנים יש לך לחצן של NEXT בעמוש שמפנה אותך ל- http://www.w3schools.com/sql/sql_and_or.aspשים לב שאתה צריך לשרשר את שם המשתמש והסיסמא לשאילתא שאתה צריך עם " מסביבם.
פורסם 2011 בפברואר 514 שנים מחבר רשמתי את השורה הנ"ל והוא רושם לי שגיאה של חוסר התאמה בין הסוגים, למה ? מה הבעיה ?Set mdlDB.rs = oConn.Execute("select * FROM tblUsers WHERE username=txtUserName.Text And password=txtPass.Text")
פורסם 2011 בפברואר 614 שנים אתה צריך לשרשר את txtUserName.Text, ולא להכניס את השם שלו לשאילתא.בנוסף, יש בלינק שהבאתי דוגמא של נכון ולא נכון על שאילתא של מחרוזת.
פורסם 2011 בפברואר 814 שנים מחבר שיניתי את הקוד והקוד העדכני הינו: 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האם הקוד כעת תקין ?
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.