根据MS Access数据库

时间:2017-03-16 11:08:52

标签: vb.net ms-access-2013

我正在尝试使用MS Access作为数据库建立酒店管理系统。我能够创建登录,注册,签到,签出表单,但我正在尝试新的东西。

在我的MS Access数据库中,我有一个名为rooms的表,其内部是Roomnumber(“数字”包含以下内容:201,202,203)  Roomtype(由以下内容组成的简短文字:标准,双人,家庭) 和Status(由以下内容组成的简短文本:可用,已占用,保留)。

在我的表单中,我有一个名为btn201btn202btn203的按钮。

我希望我的按钮背面颜色根据数据库的值而改变。

示例:

If the Status of Roomnumber "201" is "available" btn201 backcolor = green
If the Status of Roomnumber "201" is "Occupied" btn201 backcolor = red

这是我的代码:

Imports System.Data.OleDb

Public Class Homepageform

Dim provider As String
Dim datafile As String
Dim connString As String
Dim myConnection As OleDbConnection = New OleDbConnection

Private Sub Homepageform_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load


 provider = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source ="

    'access location
    datafile = "C:\Users\RM\Desktop\GPSinVS\GuestProSystem\GuestProSystem\guestprosystemdatabase.accdb"
    connString = provider & datafile
    myConnection.ConnectionString = connString


    myConnection.Open()
    Dim cmd As New OleDbCommand("Select  [Roomnumber],[Status] FROM [rooms]", myConnection)
    Dim dt As New DataTable
    dt.Load(cmd.ExecuteReader)

    For Each row As DataRow In dt.Rows

        Select Case row("Roomnumber").ToString()

            Case "201"
                Select Case row("Status").ToString().ToLower()

                    Case "Available"
                        btn201.BackColor = Color.Green

                    Case "Occupied"
                        btn201.BackColor = Color.Red

                    Case Else
                        btn201.BackColor = Color.Black

                        cmd.ExecuteNonQuery()

                End Select
        End Select
    Next
    myConnection.Close()

End Sub

编辑。

我已根据@Bugs的回答实现了代码。

没有错误,但btn201背面颜色变黑,但在我的MS Access数据库Roomnumber=201Status=Available中,所以它应该是绿色。

我尝试删除Case Else并运行它,但颜色没有变化。

1 个答案:

答案 0 :(得分:3)

我个人更喜欢使用DataTable来处理我的数据,因此我的代码将倾向于基于此的解决方案。

首先,我会将您的SELECT语句更改为不使用通配符*。这是不好的做法。而是指定您希望包含的列。我也会删除过滤器:

"Select [Roomnumber], [Roomtype], [Status],  FROM [rooms]"

我们现在可以查看将此数据转换为DataTable并循环浏览Rows集合:

Dim dt As New DataTable
dt.Load(cmd.ExecuteReader)

For Each row As DataRow In dt.Rows

    Select Case row("Roomnumber").ToString()

        Case "201"
            Select Case row("Status").ToString().ToLower()

                Case "available"
                    btn201.BackColour = Color.Green

                Case "occupied"
                    btn201.BackColour = Color.Red

            End Select

        Case "202"
            Select Case row("Status").ToString().ToLower()

                Case "available"
                    btn202.BackColour = Color.Green

                Case "occupied"
                    btn202.BackColour = Color.Red

            End Select

    End Select

Next

我会将常量用于“可用”和“占用”,并在Case语句中使用这些常量。

这样做的缺点是声明可能会越来越长,具体取决于你有多少按钮。可能有另一种方法来管理这个,但希望这应该有所帮助。