Nhờ sửa code kiểm tra user, password form đăng nhập
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 . 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
Bạn phải tập viết code cẩn thận, khai báo đúng kiểu dữ liệu.
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.
Ô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 😀
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.
Nên viết theo kiểu này:
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.
www.giaiphapexcel.com/diendan/threads/nh%E1%BB%9D-s%E1%BB%ADa-code-ki%E1%BB%83m-tra-user-password-form-%C4%91%C4%83ng-nh%E1%BA%ADp.156763/
Khóa học Power PI – Ứng dung trong Nhân sự
TỔNG QUAN KHÓA HỌC: POWER BI CHO NGÀNH NHÂN SỰ Khóa học Power BI cho Nhân sự được thiết kế dành riêng cho các...
Xem khóa học