检查Combobox RowSource是否有效

时间:2012-07-12 22:10:07

标签: ms-access ms-access-2007

这与this question有些相关,但我希望有一个比定义用户定义函数更优雅/更简单的解决方案。

背景

本质上,这是一个常见问题:我需要在Access窗体上动态修改组合框控件的RowSource查询。扭曲的是,生成的查询有可能在执行时抛出异常。这是因为查询的源表存在于动态定义的不同数据库文件中,可能不存在,或者即使文件存在,也可能不存在所需的表或列。

理想情况下,我希望能够在进行分配时捕获此问题,以便组合框将被禁用,并且用户无法调用无效查询,从而允许最终用户知道没有可用的数据。字段。

例如我想要这样的东西:

Private Sub UpdateComboRows(src as String)
On Error Goto InvalidQueryError
    cmbBox.RowSource = "SELECT [colName] FROM [dBase III;DATABASE=K:\" & src & "].[tblName];"
    ' Something here to invoke RowSource query and throw error
    cmbBox.Enabled = True
Exit Sub

InvalidQueryError:
    cmbBox.RowSource = ""
    cmbBox.Enabled = False
End Sub

或使用if-then语句的东西。

问题

是否有任何“光滑”的方法,或者我是否坚持尝试填充虚拟DAO记录集?除了Dropdown事件之外,还有一些方法可以调用Combobox RowSource查询吗?

1 个答案:

答案 0 :(得分:0)

为什么不退后一步检查数据库是否与Dir一起存在,然后检查该列是否存在于函数中。非常粗略。

Function IsDBOk() As Boolean
   On Error GoTo Err_Trap

   ''The default for boolean is false, so 
   ''IsDBOK=False at this point

   sFile=Dir("K:\" & src)

   If sFile<>"" Then
      Dim rs As DAO.Recordset
      Set rs = CurrentDB.OpenRecordset("SELECT [colName] " _
          & "FROM [dBase III;DATABASE=K:\" _
          & src & "].[tblName];")
      If Not rs.Eof() Then
          ''The selection is only okay if the recordset 
          ''contains records, however, you could return
          ''a different error for each problem
          ''file missing, column missing, empty recordset
          IsDBOk = True
      End If
   End If

   Exit Function

   Err_Trap:
     ''A missing column will give error 3061
     ''IsDBOk is already set to false
End Function