กระทู้เก่าบอร์ด อ.Yeadram
4,256 3
URL.หัวข้อ /
URL
การทำระบบ log in กับ access
ผมลองทำระบบ log in ดูครับ ไม่แน่ใจว่าถูกป่าว แต่พอรันแล้วและรองใส่รหัสผ่าน ชื่อผู้ใช้ที่ถูกต้องแล้วมันฟ้องว่า รหัสไม่ถูฏต้อง ไม่ทราบว่าเขียนอะไรผิดครับ ปล ผมเปนมือใหม่นะครับ ยังไงช้วยแนะนำหน่อย
Private Sub cmdEnter_Click()
Dim con As ADODB.Connection
Dim rs As ADODB.Recordset
Dim user As String
Dim pwd As String
Dim rsCount As Integer
On Error Resume Next
user = txtname.Value
pwd = txtpwd.Value
If IsNull(user) And IsNull(pwd) Then
MsgBox "กรอกชือและรหัสด้วย"
Else
If Len(user) And Len(pwd) < 6 Then
MsgBox "ชื่อผู้ใช้และรหัสผ่านต้องมี 6 ตัว", vbCritical, "µÃǨÊͺ¡ÒÃà¢éÒÃкº"
Else
Set con = New ADODB.Connection
con.Open "Provider = Microsoft.Jet.OLEDB.4.0;" & _
"Data Source = \counter_ask.mdb "
Set rs = New ADODB.Recordset
SQL = "SELECT a.username, a.password from authen a where a.username = 'user' AND a.password = 'pwd'"
rsCount = rs.RecordCount
If rsCount = 0 Then
MsgBox "รหัสผ่านไม่ถูกต้อง"
End If
End If
End If
rs.Close
Exit Sub
End Sub
Private Sub cmdEnter_Click()
Dim con As ADODB.Connection
Dim rs As ADODB.Recordset
Dim user As String
Dim pwd As String
Dim rsCount As Integer
On Error Resume Next
user = txtname.Value
pwd = txtpwd.Value
If IsNull(user) And IsNull(pwd) Then
MsgBox "กรอกชือและรหัสด้วย"
Else
If Len(user) And Len(pwd) < 6 Then
MsgBox "ชื่อผู้ใช้และรหัสผ่านต้องมี 6 ตัว", vbCritical, "µÃǨÊͺ¡ÒÃà¢éÒÃкº"
Else
Set con = New ADODB.Connection
con.Open "Provider = Microsoft.Jet.OLEDB.4.0;" & _
"Data Source = \counter_ask.mdb "
Set rs = New ADODB.Recordset
SQL = "SELECT a.username, a.password from authen a where a.username = 'user' AND a.password = 'pwd'"
rsCount = rs.RecordCount
If rsCount = 0 Then
MsgBox "รหัสผ่านไม่ถูกต้อง"
End If
End If
End If
rs.Close
Exit Sub
End Sub
3 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R06133
แก้ไข
If rsCount > 0 Then
msgbox "login successfully"
else
MsgBox "รหัสผ่านไม่ถูกต้อง"
End If
If rsCount > 0 Then
msgbox "login successfully"
else
MsgBox "รหัสผ่านไม่ถูกต้อง"
End If
3 @R06148
ไม่เข้าใจว่าทำไมต้องใช้ ADODB ด้วยละครับ หรือว่าตัว Database กับตัวโปรแกรมเรียกใช้งานเป็นคนละไฟล์กัน ถ้าเป็นเช่นนั้นจริงก็มีข้อผิดพลาดหลายประการเลยคือ
1. SQL = "SELECT a.username, a.password from authen a where a.username = 'user' AND a.password = 'pwd'"
ตรงบรรทัดนี้คุณควรกำหนดไว้ตั้งแต่แรกว่าเป็น string เช่น Dim SQL as string
2. = 'user' AND a.password = 'pwd'" ตรงนี้ก็คงไม่ work ละครับ ลองเปลี่ยนเป็น
= '" & user & "' AND a.password = '" & pwd & "'"
3. ก่อนบรรทัด rsCount = rs.RecordCount คุณยังไม่ได้สั่งให้มีการ query ข้อมูล ซึ่งคุณต้องใส่
rs.Open SQL,con,1,1,2
ตรง 1,1,2 นี่อาจต้องปรับปลี่ยนตามความต้องการของคุณนะครับ
แต่ถ้าทั้งหมดอยู่ในไฟล์เดียวกันก็แค่เขียน code สั้นๆง่ายๆ
Private Sub cmdEnter_Click()
if DCount("fieldx","A","Username=FORM.ชื่อฟอร์ม.user AND password = FORM.ชื่อฟอร์ม.pwd")>0 then
ใส่เงื่อนไขที่อยากให้ทำต่อ
Else
MsgBox "รหัสผ่านไม่ถูกต้อง"
End If
End sub
ลองดูนะครับ
1. SQL = "SELECT a.username, a.password from authen a where a.username = 'user' AND a.password = 'pwd'"
ตรงบรรทัดนี้คุณควรกำหนดไว้ตั้งแต่แรกว่าเป็น string เช่น Dim SQL as string
2. = 'user' AND a.password = 'pwd'" ตรงนี้ก็คงไม่ work ละครับ ลองเปลี่ยนเป็น
= '" & user & "' AND a.password = '" & pwd & "'"
3. ก่อนบรรทัด rsCount = rs.RecordCount คุณยังไม่ได้สั่งให้มีการ query ข้อมูล ซึ่งคุณต้องใส่
rs.Open SQL,con,1,1,2
ตรง 1,1,2 นี่อาจต้องปรับปลี่ยนตามความต้องการของคุณนะครับ
แต่ถ้าทั้งหมดอยู่ในไฟล์เดียวกันก็แค่เขียน code สั้นๆง่ายๆ
Private Sub cmdEnter_Click()
if DCount("fieldx","A","Username=FORM.ชื่อฟอร์ม.user AND password = FORM.ชื่อฟอร์ม.pwd")>0 then
ใส่เงื่อนไขที่อยากให้ทำต่อ
Else
MsgBox "รหัสผ่านไม่ถูกต้อง"
End If
End sub
ลองดูนะครับ
Time: 0.3428s
On Error Resume Next เปลี่ยนเป็น On Error GOTO ErrTrap
แล้วไปต่อท้าย ด้านล่าง Exit Sub ด้วย
ErrTrap:
Msgbox Err.Description,VBOKONLY,Err.Number
Exit sub
2 If IsNull(user) And IsNull(pwd) Then
MsgBox "กรอกชือและรหัสด้วย"
ความหมายคือ อะไร ในที่นี้ ถ้า ค่า user และ pwd เป็นค่าว่าง
จะให้เตือน msgbox ขึ้นมา แล้วต้องการ ทำอะไรต่อไป ไม่แจ้งหรือควบคุมให้เป็นไปตามที่เราอยากให้เป็น เช่น
ถ้า ค่า user และ pwd เป็น?่าว่าง ทั้งคู่ แล้วถ้าเป็นค่าว่างค่าเดียวละ
จะให้ทำอะไรหรือปล่อยผ่าน ถ้าผ่านแล้ว SQL Statement คุณเขียนไว้ว่า
ให้ตรวจสอบค่า =user และ =pwd
ถ้าต้องการแก้คำสั่ง ควรเปลี่ยนจาก and เป็น or นั่นคือถ้า ค่าใดค่าหนึ่งเป็นค่าว่าง ให้เตือน ด้วย msgbox แล้วต้องการให้ออกจาก sub procedure ให้ต่อด้วย exit sub หรือก่อนออก จะให้ cursor focus ไปที่ control ตัวไหน ก็ set focus ก่อน ก็ได้ครับ user.setfocus หรือ pwd.setfocus
มาที่
If Len(user) And Len(pwd) < 6 Then
ฟังชั่นก์ Len ใช้ตรวจสอบความยาวของสายอักขระ แล้ว เครื่องหมายเปรียบเทียบ กับตัวเลขหายไป จะไปใช้ ร่วมกับตัวหลังไม่ได้หรอก
และเช่นเดิม หลังเตือนด้วย msgbox ไม่ได้ แจ้งให้มันทำอะไร มันก็ไหลไปตามคำสั่งต่อไป
3 "Data Source = \counter_ask.mdb "
ตรวจสอบการเขียน path ให้ถูก ทั้ง drive และ folder
4 ยังไม่ได้เปิด recordset แค่ สร้าง instance set rs=new adodb.recordset เท่านั้น)
ต้องเปิด recordset ก่อน
rs.open ... ค้นหาดูนะครับ
5 เนื่องจากตอนแรก ไม่ได้ดัก Error (On Error Resume Next)
เมือไหลมาถึงคำสั่ง ที่ต้องการแสดงผล มันจึงไม่รู้ error
ผมชอบให้แสดง ตรงข้ามมากกว่า
If rsCount = > Then
msgbox "login successfully"
else
MsgBox "รหัสผ่านไม่ถูกต้อง"
End If