这与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查询吗?
答案 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