首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VB Dotnet >

初学vb.net开发 尝试开发一个进销存软件 有很多步骤不熟悉 求指正和帮助 (连载1 登录窗口)

2014-01-22 
初学vb.net开发 尝试开发一个进销存软件 有很多方法不熟悉 求指正和帮助 (连载1 登录窗口)然后建数据库表

初学vb.net开发 尝试开发一个进销存软件 有很多方法不熟悉 求指正和帮助 (连载1 登录窗口)


然后建数据库
表名 UserLog 用来保存登录的历史记录 结构如下
初学vb.net开发 尝试开发一个进销存软件 有很多步骤不熟悉 求指正和帮助 (连载1 登录窗口)

表名 管理员 结构如下
初学vb.net开发 尝试开发一个进销存软件 有很多步骤不熟悉 求指正和帮助 (连载1 登录窗口)

然后下面奉上Login.vb的代码


Public Class Login

    Private daLogin As OleDb.OleDbDataAdapter
    Private cbLogin As OleDb.OleDbCommandBuilder
    Private dtLogin As DataTable

    Private Sub btnExit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExit.Click
        '点击退出按钮
        Me.Close()
    End Sub

    Private Sub btnLogin_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLogin.Click
        '点击登录按钮
        CheckLogin()
    End Sub

    Private Sub CheckLogin()
        '核对账号和密码
        Dim Found As Boolean
        Dim i As Integer
        Dim errMessage As String = "该账号不存在"
        cboUser.Focus()
        cboUser.SelectAll()
        For i = 0 To dtAdmin.Rows.Count - 1
            If dtAdmin.Rows(i)("用户名").ToString = cboUser.Text Then
                If dtAdmin.Rows(i)("密码").ToString = txtPassword.Text Then
                    Found = True
                    AdminIndex = i
                    Exit For
                Else
                    errMessage = "密码错误"
                    txtPassword.Focus()
                    txtPassword.SelectAll()
                End If
            End If
        Next i
        If Found Then '登录成功
            AddUserLog(i) '添加登录历史记录
            mdiMain.Show() '载入主界面
            LoginOk = True
            Me.Close()
        Else
            MessageBox.Show(errMessage, "错误提示")
        End If
    End Sub

    Private Sub AddUserLog(ByVal Index As Integer)
        '添加到登录记录
        Dim loginIndex As Integer = cboUser.FindStringExact(cboUser.Text)
        If loginIndex > -1 Then
            dtLogin.Rows(loginIndex)("password") = dtAdmin.Rows(Index)("密码")
            dtLogin.Rows(loginIndex)("lasttime") = Now
            dtLogin.Rows(loginIndex)("savepass") = chkRemember.Checked
            dtLogin.Rows(loginIndex)("autolog") = chkAutoLog.Checked
        Else
            Dim NR As DataRow = dtLogin.NewRow()
            NR("UserName") = dtAdmin.Rows(Index)("用户名")


            NR("PassWord") = dtAdmin.Rows(Index)("密码")
            NR("LastTime") = Now
            NR("SavePass") = chkRemember.Checked
            NR("AutoLog") = chkAutoLog.Checked
            dtLogin.Rows.Add(NR)
        End If
        daLogin.Update(dtLogin)
    End Sub

    Private Sub Login_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        '窗体关闭
        dtLogin.Dispose()
        cbLogin.Dispose()
        daLogin.Dispose()
        If Not LoginOk Then '如果未登录
            dtAdmin.Dispose()
            cbAdmin.Dispose()
            daAdmin.Dispose()
            Conn.Dispose()
        End If
    End Sub

    Private Sub Login_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        OpenConn() '连接数据库
        ListLastUsers() '列出最后登录的用户列表
        If Not LoginOk Then LoadAdmin() '装入管理员数据
        Conn.Close() '关闭数据库
        If chkAutoLog.Checked And Not LoginOk Then CheckLogin() '如果自动登录则登录
    End Sub

    Private Sub ListLastUsers()
        '列出最后一次登录的用户
        Sql = "select * from UserLog order by LastTime desc"
        daLogin = New OleDb.OleDbDataAdapter(Sql, Conn)
        cbLogin = New OleDb.OleDbCommandBuilder(daLogin)
        '========对Access数据库保留字的处理===========
        cbLogin.QuotePrefix = "["
        cbLogin.QuoteSuffix = "]"
        '=====================================
        dtLogin = New DataTable
        daLogin.Fill(dtLogin)
        If dtLogin.Rows.Count > 0 Then
            For i = 0 To dtLogin.Rows.Count - 1
                cboUser.Items.Add(dtLogin.Rows(i)("UserName"))
            Next i
            cboUser.SelectedIndex = 0
        End If
    End Sub

    Private Sub cboUser_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cboUser.SelectedIndexChanged
        '当用户改变时 根据数据库改变控件状态
        chkRemember.Checked = CBool(dtLogin.Rows(cboUser.SelectedIndex)("savepass"))
        If chkRemember.Checked Then
            chkAutoLog.Checked = CBool(dtLogin.Rows(cboUser.SelectedIndex)("autolog"))
            txtPassword.Text = dtLogin.Rows(cboUser.SelectedIndex)("Password").ToString
        End If
    End Sub

    Private Sub chkRemember_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkRemember.CheckedChanged
        '如果选了记住密码才显示自动保存
        If chkRemember.Checked Then
            chkAutoLog.Enabled = True
        Else
            chkAutoLog.Enabled = False
        End If
    End Sub



    Private Sub btnRemove_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRemove.Click
        '点击移除当前登录记录
        dtLogin.Rows(cboUser.SelectedIndex).Delete()
        cboUser.Items.RemoveAt(cboUser.SelectedIndex)
        btnRemove.Enabled = False
        txtPassword.Text = ""
        chkRemember.Checked = False
        chkAutoLog.Checked = False
        daLogin.Update(dtLogin)
    End Sub

    Private Sub cboUser_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles cboUser.TextChanged
        '文字改变时调整相应控件
        If cboUser.FindStringExact(cboUser.Text) > -1 Then
            btnRemove.Enabled = True
        Else
            btnRemove.Enabled = False
            txtPassword.Text = ""
            chkRemember.Checked = False
            chkAutoLog.Checked = False
        End If
    End Sub
End Class



有一些变量或过程写在module里

    Public LoginOk As Boolean '登录成功
    Public AdminIndex As Integer '管理员索引

    Public Conn As OleDbConnection
    Public daAdmin As OleDbDataAdapter
    Public cbAdmin As OleDbCommandBuilder
    Public dtAdmin As DataTable
    Public Sql As String

    Public Sub OpenConn()
        Conn = New OleDbConnection
        Conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Application.StartupPath & "\Data.mdb"
        Conn.Open()
    End Sub

    Public Sub LoadAdmin()
        Sql = "select * from 管理员"
        daAdmin = New OleDbDataAdapter(Sql, Conn)
        cbAdmin = New OleDbCommandBuilder(daAdmin)
        dtAdmin = New DataTable
        daAdmin.Fill(dtAdmin)
        AddHandler daAdmin.RowUpdated, New OleDbRowUpdatedEventHandler(AddressOf OnRowUpdated)
    End Sub

    Private Sub OnRowUpdated(ByVal sender As Object, ByVal args As OleDbRowUpdatedEventArgs)
        Dim newID As Integer = 0
        Dim idCMD As OleDbCommand = New OleDbCommand("SELECT @@IDENTITY", Conn)
        If args.StatementType = StatementType.Insert Then
            newID = CInt(idCMD.ExecuteScalar())
            args.Row("ID") = newID
        End If
    End Sub


我个人感觉 对登录这样简单的操作用dataTable感觉很不爽 但我真的不知道怎么去写 另外我用循环遍历dataTable取符合条件的记录感觉非常傻和没有效率 求一般应该怎么写比较好
[解决办法]

你该不会就这样 一个窗口 一个功能的 要别人贴代码吧!
[解决办法]
做这种东西不要愤青。做完了就封装控件调用,然后暂时不要去纠结它了。
------解决方案--------------------


有本事“不爽这个不爽那个”的,那么下一个任务点时去另外设计一种机制。不要在以前的东西上纠扯“不刷这个不爽那个”。这是两种态度,一种是不断开发新的组件,一种是刚做了一个组件就以为自己高级了、再也不用开发新的组件的、就该负责批评以前的组建了。后者是很不好的,你的探索精神完全可以在下一个组件的设计中体现,而不用纠缠于非要重写已经开发出来、而且目前还在正常运行的组件。
[解决办法]
如果你用过VB6的RecordSet,你可以用用DataReader对象。
[解决办法]

引用:
以前都是用的那个 ado 到了ado.net完全不会用

以前都是什么 set rs=adodb.recordset 类似这样写的... 现在很不习惯的说.. 我自己再去找找资料吧

ado.net肯定比ado强大好用的多。
有个详细对比看一下 就ok了

热点排行