การทำระบบ log in กับ access
กระทู้เก่าบอร์ด อ.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

3 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R06132
1) เพื่อดักจับ Error ที่เกิดจากการเขียน program
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

    
2 @R06133
แก้ไข
   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

ลองดูนะครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3428s