Thảo luận Xin code đăng nhập csdl từ access trong vb.net

Thảo luận trong 'Access' bắt đầu bởi Stork, 18 Tháng mười một 2013.

  1. Offline

    Stork

    • Windows 95

    Số bài viết:
    98
    Đã được thích:
    13
    Điểm thành tích:
    110
    Mình đang làm 1 cái form đăng nhập cho 1 đồ án quản lý điểm sv.
    Bác nào có code này cho mình xin với
    XopMagic thích bài này.
  2. Offline

    hongoctrien

    • Friends

    Số bài viết:
    2.449
    Đã được thích:
    2.464
    Điểm thành tích:
    2.431
    Trong giáo trình có rồi đó bạn
    Mã:
    Imports System.Data.OleDb
    Public Class database
        'Kết nối đến file dữ liệu
        Dim gscon As String = "Provider = Microsoft.Jet.OLEDB.4.0; Data Source = data.mdb;"
        Public cnn As New OleDbConnection(gscon)
    End Class
  3. Offline

    Stork

    • Windows 95

    Số bài viết:
    98
    Đã được thích:
    13
    Điểm thành tích:
    110
    code form đăng nhập ấy bạn ơi >.<
  4. Offline

    hongoctrien

    • Friends

    Số bài viết:
    2.449
    Đã được thích:
    2.464
    Điểm thành tích:
    2.431
    ái chà, mình mới nhìn cái tiêu đề, ai ngờ nội dung nó khác :D.
    Trước hết, bạn tạo một lớp kết nối CSDL (chắc bạn đã tạo xong rồi)
    Tiếp theo, tạo một hàm thực hiện câu lệnh đếm và trả về số lượng bản ghi
    Mã:
     
    Public Function doCount(ByVal sqlStr) As Integer
    connect()
    cmd = New SqlCommand(sqlStr, _conn)
    Dim count as interger = cmd.ExecuteScalar()
    closeDb()
    Return count
    End Function
    Trong form đăng nhập, bạn tạo 2 textbox (username và password), 1 nút "Login". Double click lên nút Login để xử lý nút này.
    Tại đây, bạn khai báo 1 biến đếm, viết câu lệnh sql:
    sqlstr = "select count(username) from user where username = '" & txtusername.Text & "' and password = '" & password.Text & "'"
    dem = doCount(sqlstr)
    Khi biến dem đã nhận giá trị, bạn kiểm tra: Nếu biến đếm lớn hơn 0 (tức là thông tin đăng nhập đúng) thì ẩn cái form đăng nhập đi và cho hiện cái form main lên, ngược lại thì thông báo lỗi thông tin đăng nhập.

    Mình nói thế hi vọng bạn hiểu và tự làm được, còn đưa nguyên code lên đây chỉ là hạ sách. Có gì bạn cứ nói, mình giúp cho.

    Chúc thành công nhé!
  5. Offline

    Stork

    • Windows 95

    Số bài viết:
    98
    Đã được thích:
    13
    Điểm thành tích:
    110
    mình làm access chứ không phải sql >.<
  6. Offline

    hongoctrien

    • Friends

    Số bài viết:
    2.449
    Đã được thích:
    2.464
    Điểm thành tích:
    2.431
    :D cái đó gọi chung là câu lệnh truy vấn. Bạn dùng cho sql, mysql hay access đều được
  7. Offline

    Stork

    • Windows 95

    Số bài viết:
    98
    Đã được thích:
    13
    Điểm thành tích:
    110

    cái này mình viết nhưng tới đoạn màu đỏ ở trên nó bị lỗi
    Error2'System.Data.Sql' is a namespace and cannot be used as an expression.C:\Users\Admin\Desktop\QLDiemSV\QLDiemSV\DangNhap.vb1631QLDiemSV
  8. Offline

    hongoctrien

    • Friends

    Số bài viết:
    2.449
    Đã được thích:
    2.464
    Điểm thành tích:
    2.431
    Không, ở class CSDL thì mình không ý kiến gì, nhưng ở class DangNhap của bạn, mình có ý kiến xí, bạn xem rồi rút kinh nghiệm.
    Mã:
    Dim connstring As String = "provider = Microsoft.jet.oledb.4.0; data source = QlDiemSV.mdb"
    Dim mydata = New OleDbDataAdapter("select * from DANGNHAP where TenDN ='" + Me.txtTenDN.Text + "' and MatKhau= '" + Me.txtMatKhau.Text + "'", connstring)
    Mình không biết đoạn này đặt ở đây có tác dụng gì?

    Mã:
    If db.initDataset(sql as string) > 0 Then
    1. Thủ tục initDataset bạn tạo ở lớp CSDL có tham số truyền vào là một chuỗi, trong khi tham số của bạn truyền vào là sql as string (cái này thì khai báo biến cũng không phải, chuỗi càng không đúng)
    2. Thủ tục initDataset bạn tạo ở lớp CSDL có tác dụng điền dữ liệu lấy được sau khi thực hiện câu truy vấn vào một CSDL ảo (DataAdapter) - cái này thường hay sử dụng khi muốn lấy dữ liệu từ csdl đổ lên datagreatview, chứ khi dùng để đếm số lượng bản ghi, nó trở nên thừa và cồng kềnh.
    Nếu theo ý bạn, thì không phải là If db.initDataset(sql as string) > 0 Then mà là If mydata.row.count > 0 Then......
    Mình xin sửa lại một xí như sau (mình giải thích ngay trong code luôn cho tiện)

    Mã:
    Imports System.Data.OleDb
    Public Class CSDL
    'Khai báo đối tượng
    Public myconn As New OleDbConnection
    Public mycom As OleDbCommand
    Public mydata As OleDbDataAdapter
    Public mydataset As DataSet
    'Thủ tục kết nối CSDL
    Public Sub connectDB()
    Dim connstring As String = "provider = Microsoft.jet.oledb.4.0; data source = QlDiemSV.mdb"
    myconn.ConnectionString = connstring
    myconn.Open()
    If (myconn.State <> ConnectionState.Open) Then
    MsgBox("Kết nối không thành công") 'nếu kết nối không thành công thì báo ko thành công, còn kết nối thành công rồi thì không báo gì cả, tiếp tục làm mấy việc khác thôi
    End If
    End Sub
     
    ' Thủ tục đóng kết nối
    Public Sub closeDB()
    If (myconn.State <> ConnectionState.Closed) Then
    myconn.Close()
    End If
    End Sub
     
    Public Sub doSQL(ByVal sql As String)
    mycom = New OleDbCommand(Sql, myconn)
    mycom.ExecuteNonQuery()
    End Sub
     
    Public Sub initDataset(ByVal sql As String)
    mydata = New OleDbDataAdapter(sql, myconn)
    mydataset = New DataSet
    mydata.Fill(mydataset)
    End Sub
    End Class
     
    'tạo thêm một hàm, phương thức thực thi là ExecuteScalar, bạn xem lại công dụng của phương thức này trong giáo trình, có 3 phương thức đó. Hàm này có công dụng là đếm số lượng bản ghi truy vấn được và trả về giá trị, là số nguyên.
        Public Function doCount(ByVal sqlStr) As Integer
            connectDB()
            mycom = New OleDbCommand(sqlStr, myconn)
            Dim count As Integer = mycom.ExecuteScalar()
            closeDB()
            Return count
        End Function
    Mã:
    Imports System.Data.OleDb
     
    Public Class DangNhap
    Dim db As New CSDL
     
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    If ((txtTenDN.Text = "") Or (txtMatKhau.Text = "")) Then
    MsgBox("Yêu cầu nhập tên và mật khẩu")
    Else
    Dim str As String = "Select count(TenDN) from DANGNHAP where TenDN ='" & Me.txtTenDN.Text & "' and MatKhau= '" & Me.txtMatKhau.Text & "'"
    If db.doCount(str) > 0 Then
    MsgBox("Đăng nhập thành công")
    Me.Hide()
    Main.ShowDialog()
    Else : MsgBox("Sai tên truy cập hoặc mật khẩu")
    End If
    End If
    End Sub
    Mình code chay nên không biết chạy đúng không, nhưng nguyên tắc vẫn là thế. Bạn test xem, lỗi gì thì nói tiếp để mình giúp.
  9. Offline

    Stork

    • Windows 95

    Số bài viết:
    98
    Đã được thích:
    13
    Điểm thành tích:
    110
    If db.doCount(str) > 0 Then
    Conversion from string "Select * from DANGNHAP where Ten" to type 'Integer' is not valid.

    Vẫn bị lỗi chỗ này >.<
  10. Offline

    hongoctrien

    • Friends

    Số bài viết:
    2.449
    Đã được thích:
    2.464
    Điểm thành tích:
    2.431
    Bạn thay cái dấu "+" trong câu lệnh truy vấn thành dấu "&" xem
    Dim str As String = "Select * from DANGNHAP where TenDN ='" & Me.txtTenDN.Text & "' and MatKhau= '" & Me.txtMatKhau.Text & "'"
  11. Offline

    Stork

    • Windows 95

    Số bài viết:
    98
    Đã được thích:
    13
    Điểm thành tích:
    110
    Bạn xem giúp mình cái code đăng kí này luôn >.<
    đăng kí toàn thất bại :(
  12. Offline

    hongoctrien

    • Friends

    Số bài viết:
    2.449
    Đã được thích:
    2.464
    Điểm thành tích:
    2.431
    Code mình một đường bạn làm một nẻo :D, xem lại cái hàm của mình viết rồi so sánh
    Mã:
        Public Function doCount(ByVal sql As Integer) 'thiếu kiểu dữ liệu trả về, tham số truyền vào là chuổi chứ không phải là số nguyên
            connectDB()
            mycom = New OleDbCommand(Sql, myconn)
            Dim count As String = mycom.ExecuteScalar() 'biến count lưu giá trị số nguyên (số lượng kết quả trả về)
            closeDB()
            Return count
        End Function
    Sửa lại một xí ở câu lệnh truy vấn
    Dim str As String = "Select count(TenDN) from DANGNHAP where TenDN ='" & Me.txtTenDN.Text & "' and MatKhau= '" & Me.txtMatKhau.Text & "'"

    Mã:
    Me.Hide()
    Main.ShowDialog()
    Như thế này thì khi đăng nhập thành công nó hiện cáu form mail và vẫn hiện cái form đăng nhập, đảo ngược 2 cái này lại.
  13. Offline

    Stork

    • Windows 95

    Số bài viết:
    98
    Đã được thích:
    13
    Điểm thành tích:
    110
    đã sửa theo
    vẫn bị lỗi lúc nãy :(
  14. Offline

    hongoctrien

    • Friends

    Số bài viết:
    2.449
    Đã được thích:
    2.464
    Điểm thành tích:
    2.431
    Mã:
    'tạo thêm một hàm, phương thức thực thi là ExecuteScalar, bạn xem lại công dụng của phương thức này trong giáo trình, có 3 phương thức đó. Hàm này có công dụng là đếm số lượng bản ghi truy vấn được và trả về giá trị, là số nguyên.
        Public Function doCount(ByVal sqlStr) As Integer
            connectDB()
            mycom = New OleDbCommand(sqlStr, myconn)
            Dim count As Integer = mycom.ExecuteScalar()
            closeDB()
            Return count
        End Function
    
    Đúng rồi chứ
  15. Offline

    Stork

    • Windows 95

    Số bài viết:
    98
    Đã được thích:
    13
    Điểm thành tích:
    110
    Đã thành công :)
    Thank bạn :)

Chia sẻ trang này

Advertising: Linux system admin | nukeviet | nukeviet 4 | Upload ảnh miễn phí