我正在尝试使用MS Access作为数据库建立酒店管理系统。我能够创建登录,注册,签到,签出表单,但我正在尝试新的东西。
在我的MS Access数据库中,我有一个名为rooms
的表,其内部是Roomnumber
(“数字”包含以下内容:201,202,203)
Roomtype
(由以下内容组成的简短文字:标准,双人,家庭)
和Status
(由以下内容组成的简短文本:可用,已占用,保留)。
在我的表单中,我有一个名为btn201
,btn202
和btn203
的按钮。
我希望我的按钮背面颜色根据数据库的值而改变。
示例:
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=201
和Status=Available
中,所以它应该是绿色。
我尝试删除Case Else
并运行它,但颜色没有变化。
答案 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
语句中使用这些常量。
这样做的缺点是声明可能会越来越长,具体取决于你有多少按钮。可能有另一种方法来管理这个,但希望这应该有所帮助。