Nhờ sửa code kiểm tra user, password form đăng nhập

Liên hệ QC

thuypt18

Thành viên mới
Tham gia
14/6/16
Bài viết
4
Được thích
0
Gửi Các Anh/ Chị
em đang tập tành học vba kết nối với database là SQL, ở đây em tạo form đăng nhập kiểm tra user pass tồn tại trong CSDL thì bế tắc ạ
nhờ các Anh/Chị sửa giúp em với ạ. em cám ơn.
Private Sub btLogin_Click()
Dim conn As Object
Dim sRun As Object
Dim strConn As Object
Set conn = CreateObject("ADODB.Connection")
Set rst = CreateObject("ADODB.Recordset")
Set strConn = CreateObject("ADODB.Connection")
strConn = "Provider=SQLOLEDB;Data Source=.\SQLEXPRESS; Initial Catalog=DVC;User ID=sa;Password=123456;"
conn.Open strConn
Ma_NV = txtUser.Text
M_K = txtMatkhau.Text
Sql = "Select Count(*)from [dbo].[DSNV] where Ma_NV = '" & Ma_NV & "' and M_K = '" & M_K & "'"
Set rst = conn.Execute(Sql)
If rst = 1 Then
MsgBox "valid", vbInformation
Else
MsgBox "Invalid", vbCritical
End If
conn.Close
Set conn = Nothing
End Sub
 
Gửi Các Anh/ Chị
em đang tập tành học vba kết nối với database là SQL, ở đây em tạo form đăng nhập kiểm tra user pass tồn tại trong CSDL thì bế tắc ạ

Bạn phải tập viết code cẩn thận, khai báo đúng kiểu dữ liệu.

Mã:
Private Sub btLogin_Click()
Dim conn As Object
Dim rst As Object
Dim strConn As String
Set conn = CreateObject("ADODB.Connection")
Set rst = CreateObject("ADODB.Recordset")

strConn = "Provider=SQLOLEDB;Data Source=.\SQLEXPRESS; Initial Catalog=DVC;User ID=sa;Password=123456;"
conn.Open strConn
Ma_NV = txtUser.Text
M_K = txtMatkhau.Text
Sql = "Select Count(*) As RowCount From [dbo].[DSNV] where Ma_NV = '" & Ma_NV & "' and M_K = '" & M_K & "'"
Set rst = conn.Execute(Sql)
If rst!RowCount = 1 Then
MsgBox "valid", vbInformation
Else
MsgBox "Invalid", vbCritical
End If
conn.Close
Set conn = Nothing
End Sub
 
Nói chuyện ngoài lề cho các bạn tập tễnh muốn theo kiểu này:

SQL Server Express thì bảo mật thấp. Chơi kiểu này không sao.

SQL Server chính bản mà chơi kiểu này bọn hắc-cơ chúng chận đường (intercept), phá (inject) cho nát mặt.
 
Nói chuyện ngoài lề cho các bạn tập tễnh muốn theo kiểu này:

SQL Server Express thì bảo mật thấp. Chơi kiểu này không sao.

SQL Server chính bản mà chơi kiểu này bọn hắc-cơ chúng chận đường (intercept), phá (inject) cho nát mặt.
Ông chú có chiêu gì chỉ dạy "các bạn tập tễnh" không nào? --=0
 
SQL Server chính bản mà chơi kiểu này bọn hắc-cơ chúng chận đường (intercept), phá (inject) cho nát mặt.

Bác nói đúng. Đối với bạn này thì kết nối được, kiểm tra User/Pass là mừng rồi, chưa tính tới việc bị SQL injection :D
Tôi thì chỉ dùng store procedure để kiểm tra đăng nhập và lưu log file, cùng lắm là dùng SQL động để truyền tham số chứ không truyền trực tiếp vào câu lệnh SQL như vậy.
 
Gửi Các Anh/ Chị
em đang tập tành học vba kết nối với database là SQL, ở đây em tạo form đăng nhập kiểm tra user pass tồn tại trong CSDL thì bế tắc ạ

Nên viết theo kiểu này:

Mã:
Private Sub btLogin_Click()
    
    Dim oConn As Object
    Dim oCmd As Object
    Dim oParam As Object
    Dim oRst As Object
    Dim sConnString As String, sSQL As String, Ma_NV As String, M_K As String
    
    Set oConn = CreateObject("ADODB.Connection")
    Set oRst = CreateObject("ADODB.Recordset")
    Set oCmd = CreateObject("ADODB.Command")
    Set oParam = CreateObject("ADODB.Parameter")
    
    sConnString = "Provider=SQLOLEDB;Data Source=.\SQLEXPRESS; Initial Catalog=DVC;User ID=sa;Password=123456;"
    oConn.Open sConnString
    
    Ma_NV = txtUser.Text
    M_K = txtMatkhau.Text
    sSQL = "Select Count(*) As stt From [dbo].[USERS] Where Ma_NV = ? And M_K =?;"
    
    With oCmd
        .ActiveConnection = oConn
        .CommandText = sSQL
        .CommandType = 1 'adCmdText
        .Prepared = True
        
        'Truyen tham so
        .Parameters.Append .CreateParameter("", 200, 1, 20, Ma_NV)
        .Parameters.Append .CreateParameter("", 200, 1, 20, M_K)
        Set oRst = .Execute
    End With
    
    If oRst!Stt = 1 Then
        MsgBox "Success", vbInformation, "Login"
    Else
        MsgBox "Invalid username or password", vbCritical, "Login"
    End If
    
    oConn.Close
    Set oConn = Nothing
    Set oCmd = Nothing
  
  End Sub

Đúng ra là có cái hàm con thực hiện kết nối tới SQL SV, kiểm tra hiện trạng kết nối trước khi kết nối tới Database. Hàm đóng kết nối. Để vô mắc công tẩu hoả nhập ma. :)
 
Nên viết theo kiểu này:

Mã:
Private Sub btLogin_Click()
   
    Dim oConn As Object
    Dim oCmd As Object
    Dim oParam As Object
    Dim oRst As Object
    Dim sConnString As String, sSQL As String, Ma_NV As String, M_K As String
   
    Set oConn = CreateObject("ADODB.Connection")
    Set oRst = CreateObject("ADODB.Recordset")
    Set oCmd = CreateObject("ADODB.Command")
    Set oParam = CreateObject("ADODB.Parameter")
   
    sConnString = "Provider=SQLOLEDB;Data Source=.\SQLEXPRESS; Initial Catalog=DVC;User ID=sa;Password=123456;"
    oConn.Open sConnString
   
    Ma_NV = txtUser.Text
    M_K = txtMatkhau.Text
    sSQL = "Select Count(*) As stt From [dbo].[USERS] Where Ma_NV = ? And M_K =?;"
   
    With oCmd
        .ActiveConnection = oConn
        .CommandText = sSQL
        .CommandType = 1 'adCmdText
        .Prepared = True
       
        'Truyen tham so
        .Parameters.Append .CreateParameter("", 200, 1, 20, Ma_NV)
        .Parameters.Append .CreateParameter("", 200, 1, 20, M_K)
        Set oRst = .Execute
    End With
   
    If oRst!Stt = 1 Then
        MsgBox "Success", vbInformation, "Login"
    Else
        MsgBox "Invalid username or password", vbCritical, "Login"
    End If
   
    oConn.Close
    Set oConn = Nothing
    Set oCmd = Nothing
 
  End Sub

Đúng ra là có cái hàm con thực hiện kết nối tới SQL SV, kiểm tra hiện trạng kết nối trước khi kết nối tới Database. Hàm đóng kết nối. Để vô mắc công tẩu hoả nhập ma. :)
Hi hi. Cám ơn Anh, cám ơn mọi người đã hỗ trợ ạ, em làm được rồi ạ.
em mới chỉ ở bước tập tành hiểu code thôi ạ, sau này mong mọi người giúp đỡ thêm ạ.
Em cám ơn, chúc cả nhà ngày mới làm việc tràn đầy năng lượng.
 
Web KT
Back
Top Bottom