Доступ к неограниченному управлению подчиненным элементом #Error

У меня есть подчиненная форма, встроенная в мою основную форму в виде таблицы. Данные подформы заполняются после выбора некоторых критериев фильтрации и нажатия кнопки "Поиск". Все работает отлично, за исключением одного элемента управления, который у меня есть в этой подформе. Это несвязанный элемент управления, и я поставлю его источник управления в событие subform 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 за его полезное обсуждение со мной. Это помогает мне разобраться в проблеме моей текущей реализации и возможном ее решении.

Вот причина для #ERROR, отображаемого в моем несвязаном текстовом поле text_root_cause_field. Это текстовое поле привязано к вызову функции в моей подформе Load Event с двумя другими полями из моего источника записи подформы в качестве параметров. Первоначально это даст мне значение в текстовом поле text_root_cause_field, потому что источник записи моей подформы был установлен в свойстве формы одним из моих запросов Shipment_cycle_time.

Это отлично работает, пока программа не ударит по моей основной форме Open Event. В открывшемся событии я установил источник записи подформы как NULL, потому что я не хочу отображать какие-либо данные при запуске формы. Поскольку основная форма Open Event происходит после события загрузки подформы, у меня больше нет поля, присутствующего в подформате. Таким образом, функция, с которой связано мое text_root_cause_field, - это получение значений из двух несуществующих полей. Это дает #ERROR.

Решение довольно просто после выяснения причины. Я могу включить вывод SQL моей функции в SQL моего источника записи подформата. Таким образом, источник записи подформы становится похожим на

SELECT s.*, (SELECT TOP 1 root_cause FROM Shipment_Remark as r 
 WHERE r.plant = s.plant
 AND r.shipment_no = s.shipment_no 
 ORDER BY r.update_time DESC) as root_cause 
 FROM shipment_cycle_time AS s WHERE TRUE

В дополнение ко всем полям в запросе shipment_cycle_time другой поле root_cause выбирается из другой таблицы на основе двух полей shipment_cycle_time. Это точно так же, как то, что возвращается от функции. Вместо использования функции я устанавливаю источник управления текстового поля text_root_cause_field в поле root_cause.

Задача решена!


Поскольку вы устанавливаете значение в событии Form_Load, почему бы просто не проверить, есть ли нулевые записи, и если да, то не устанавливайте значение - пусть оно будет пустым.

licensed under cc by-sa 3.0 with attribution.