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

Blue Softs epl Liên hệ QC

thuypt18

Thành viên mới
Tham gia
14/6/16
Bài viết
3
Đượ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
 

ongke0711

Thành viên tích cực
Tham gia
7/9/06
Bài viết
1,097
Được thích
1,314
Giới tính
Nam
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
 

VetMini

Chuyên gia GPE
Tham gia
21/12/12
Bài viết
12,564
Được thích
16,261
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.
 

Vô danh Tiểu tốt

Thành viên thường trực
Tham gia
22/1/14
Bài viết
375
Được thích
464
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
 

ongke0711

Thành viên tích cực
Tham gia
7/9/06
Bài viết
1,097
Được thích
1,314
Giới tính
Nam
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.
 

ongke0711

Thành viên tích cực
Tham gia
7/9/06
Bài viết
1,097
Được thích
1,314
Giới tính
Nam
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. :)
 

thuypt18

Thành viên mới
Tham gia
14/6/16
Bài viết
3
Được thích
0
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
Top Bottom