基于复选框条目创建SQL SELECT语句 - Visual Basic

时间:2017-10-23 06:44:26

标签: sql visual-studio ms-access

我对编程很新!我正在使用Visual Basic Studio 2017来制作Windows窗体

我有一个带有2个单选按钮,6个复选框和1个组合框的表单。我在访问数据库中有数据。关键是当选择其中一个单选按钮时,只有来自数据库的某些数据才会在组合框中填充。

我的数据库有8列,第一列是id列。例如,它有这样的数据。汉堡-FR001。汉堡-GR001。汉堡-GR002。三明治-FR001等。所以单选按钮可以过滤汉堡包或三明治。我在Like

中使用了一个SQL语句
If optBurger.Checked = True Then

SQLa = "SELECT FROM Menu WHERE MENU_ID Like '%Burger%'"

例如,如果一个单选按钮显示Burger和另一个三明治,通过选择Burger,组合框只显示与汉堡有关的数据。

  • Burger-FR001
  • Burger-GR001
  • 汉堡-GR002

复选框充当过滤器,如果我为GR选中一个复选框,它应该只显示带有FR的条目,并且可以选择多个复选框。这可以通过选择数据库中的“类型”列来完成。

if chkGR.Checked = True Then
SQLa = SQLa & "AND Type= 'GR'"

我知道这可以使用if .. else if语句来完成,但是有6个复选框并且可以添加更多,这会变得乏味和大!我需要为每个复选框制作36 if else语句!

我尝试循环遍历控件,如果选中任何一个框,它将删除名称的前三个字母(chk)并将名称添加到SQL select语句,因为这是它们在数据库中的命名方式

但我似乎无法使其发挥作用!到目前为止我已经花了这么多时间。如果有人可以提供帮助,我会很感激!我认为循环是正确的(或者它可能是一团糟,我是新手......)

代码如下:

If optBurger.Checked = True Then
        cboSelect.Items.Clear()

SQLa = "SELECT FROM Menu WHERE MENU_ID Like '%Burger%'"

            Dim strChk As String = ""
            Dim chk As CheckBox
            ' Loop through each control on the form, we are looking for checkboxes
            For Each ctl As Control In grpSubsystem.Controls
                If TypeOf ctl Is CheckBox Then
                    chk = DirectCast(ctl, CheckBox)
                    If chk.Checked = True Then
                        SQLa = SQLa & "AND Type ='" & Microsoft.VisualBasic.Mid(chk.Text, 1) & "'"

                    End If
                End If
            CallAccess()
            RSa.MoveFirst()
            Do Until RSa.EOF()
                cboSelect.Items.Add(RSa.Fields("MENU_ID").Value)
                RSa.MoveNext()
            Loop
            CloseAccess()
end if

我正在尝试使用checkChanged事件

提前致谢

1 个答案:

答案 0 :(得分:1)

只需将复选框值插入某个字符串

即可
        Dim MenuList As String = ""
        Dim Menu_List As List(Of [String]) = New List(Of String)

        If CheckBox1.Checked Then
            Menu_List.Add("colomn1")
        Else
            Menu_List.Remove("colomn1")
        End If
        If CheckBox2.Checked Then
            Menu_List.Add("colomn2")
        Else
            Menu_List.Remove("colomn2")
        End If
        ... 
        MenuList = [String].Join(", ", Menu_List.ToArray())

然后您可以使用

运行查询
Select " + MenuList + " from MENU

MenuList = [String].Join("%' AND Menu_ID like %' ", Menu_List.ToArray())

,查询是

select * from MENU where Menu_ID like '%" + MenuList +"%'

我希望这会对你有所帮助,对不起,如果这段代码有轻微的错误,我没有在编译器上编写这段代码