我的主窗体中嵌入了一个子窗体作为数据表 . 在我选择一些过滤条件并单击“搜索”按钮后,将填充子表单的数据 . 一切正常,除了我在这个子表单中的一个控件 . 这是一个未绑定的控件,我将在子窗体的onLoad事件中设置其控制源,并从我的子窗体的其他控件输入值 . 当我第一次加载主窗体并在选择任何内容之前或单击“搜索”按钮时,子窗体将显示一个空行记录 . 但是,在我的未绑定控件的列上,它显示为“#ERROR”,而其他都是空白 . 我知道在我进行搜索后这会正常工作并且我的未绑定控制数据会被填充,但无论如何我可以避免在我的子表单中显示丑陋的“#ERROR”吗?
我的部分代码在这里 .
Private Sub Form_Load()
Me.text_root_cause_field.ControlSource = "=getLatestRemark([plant], [shipment_no])"
End Sub
Public Function getLatestRemark(plant_code As String, shipment_no As String) As String
Dim db As Database
Dim srRS As Recordset
Set db = CurrentDb
Set srRS = db.OpenRecordset("SELECT TOP 1 root_cause FROM Shipment_Remark" _
& " WHERE plant = '" & plant_code & "'" _
& " AND shipment_no = '" & shipment_no & "'" _
& " ORDER BY update_time DESC", dbOpenDynaset)
If Not srRS Is Nothing Then
If Not srRS.EOF Then
getLatestRemark = srRS!root_cause
srRS.Close
Set srRS = Nothing
End If
Else
getLatestRemark = ""
End If
db.Close
Set db = Nothing
End Function
这些是我的子表单的代码 . text_root_cause_field是我正在谈论的未绑定字段 . 它的控制源取决于另外两个绑定字段 - [plant]和[shipment_no] . 但是,字段[plant]和[shipment_no]仅在用户单击主窗体中的搜索按钮并且设置了子窗体的记录源后才在运行时绑定 .
谢谢您的帮助 .
2 回答
谢谢@Wayne G. Dunny与我的有益讨论 . 这有助于我找出当前实现的问题以及可能的解决方案 .
以下是我的未绑定文本框text_root_cause_field中显示#ERROR的原因 . 此文本框绑定到子表单的Load Event中的函数调用,其中包含来自子表单的记录源的两个其他字段作为参数 . 这最初会在text_root_cause_field文本框中给出一个值,因为我的子表单的记录源已在表单属性中设置为我的查询之一Shipment_cycle_time .
这工作正常,直到程序命中我的主窗体's Open Event. In the Open Event, I set the subform' s记录源为NULL,因为我不想在窗体上显示任何数据's startup. As the main form' s打开事件发生 after 子窗体的加载事件,子窗体中没有任何字段更多 . 所以我的text_root_cause_field绑定的函数是从两个不存在的字段中检索值 . 这给了#ERROR .
找出原因后,解决方案非常简单 . 我可以将函数的SQL输出包含到子表单的记录源的SQL中 . 所以子窗体的记录源就像
除了shipment_cycle_time查询中的所有字段之外,还基于两个shipment_cycle_time字段从不同的表中选择其他字段root_cause . 这与从函数返回的内容完全相同 . 我没有使用函数,而是将文本框text_root_cause_field的controlsource设置为root_cause字段 .
问题解决了!
由于您在Form_Load事件中设置了值,为什么不检查是否有零记录,如果是,则不要设置值 - 让它为空 .