selectedIndex的问题?

时间:2015-06-30 16:14:47

标签: vb.net vba ms-access

所以我有这个Select Case,它在所选索引为0时有效,但如果我将索引更改为1,则不会。目前代码是相同的,它的想法是它将运行不同的查询,但我需要先让它工作。

是的,当我让这部分程序正常运行时,我计划使用参数化查询,直到那时我坚持使用我的通用连接查询文本,除非它特定于问题。

因此,当索引为0时,它运行查询正常,当索引不是0时,它不起作用。

Select Case (cmbSearchBy.SelectedIndex)
        Case (cmbSearchBy.SelectedIndex = 0)
            Try
                'Sql = "SELECT * FROM Devices WHERE (((Devices.[Asset Number]) =" &  & "));"
                Dim SearchAsset As Integer = Convert.ToInt32(txtValue.Text)
                Dim AccessDataAdapter = New System.Data.OleDb.OleDbDataAdapter
                AccessDataAdapter.SelectCommand = New System.Data.OleDb.OleDbCommand("SELECT * FROM Devices WHERE (((Devices.[Asset Number]) =" & SearchAsset & "));", dbConn)
                Dim AccessDataset = New DataSet
                AccessDataAdapter.Fill(AccessDataset, "Asset Query")
                MyDataGrid.DataSource = AccessDataset.Tables("Asset Query")
            Catch
                MsgBox("Please insert a valid Asset Number")
            End Try
        Case (cmbSearchBy.SelectedIndex = 1)
            Try
                'Sql = "SELECT * FROM Devices WHERE (((Devices.[Asset Number]) =" &  & "));"
                Dim SearchAsset As Integer = Convert.ToInt32(txtValue.Text)
                Dim AccessDataAdapter = New System.Data.OleDb.OleDbDataAdapter
                AccessDataAdapter.SelectCommand = New System.Data.OleDb.OleDbCommand("SELECT * FROM Devices WHERE (((Devices.[Asset Number]) =" & SearchAsset & "));", dbConn)
                Dim AccessDataset = New DataSet
                AccessDataAdapter.Fill(AccessDataset, "Asset Query")
                MyDataGrid.DataSource = AccessDataset.Tables("Asset Query")
            Catch
                MsgBox("Please insert a valid Asset Number")
            End Try

我只是不明白为什么相同的代码无效。

1 个答案:

答案 0 :(得分:6)

您不需要将测试变量放在每个Case语句中;只是Select声明。编译器将按顺序将该表达式与Case列出的每个表达式进行比较,直到找到匹配为止。

当值为0时,表达式(cmbSearchBy.SelectedIndex = 0)的计算结果为True,该值也等于0.当值为1时,(cmbSearchBy.SelectedIndex = 0)False( - 1 ),所以检查下一个案例。但是,(cmbSearchBy.SelectedIndex = 1) = True = 0,但是cmbSearchBy.SelectedIndex(这是Select命令告诉编译器要比较的)= 1,0不等于1,所以编译器查找下一个Case行。由于它没有找到,所以没有任何反应。

改为输入:

Select Case cmbSearchBy.SelectedIndex
    Case 0
        'code
    Case 1
        'code
End Select