Вычисленный элемент управления текстового поля не показывает значение в Access 2007, но показывает в 2003 - PullRequest
2 голосов
/ 14 февраля 2012

У меня есть форма доступа с текстовым полем, которое используется в качестве выражения в качестве элемента управления для вычисления отображаемого значения. Хотя приведенное ниже выражение отлично работает в Access 2003, оно не отображается в Access 2007 автоматически. Только когда я нажимаю на поле, значение отображается. Что он делает, это проверяет базу данных на значение, основанное на других полях в форме. Если значение равно NULL, в поле отображается «N / A». Если значение не равно NULL, отображается значение, найденное в базе данных.

Кто-нибудь знает, что я могу делать не так?

=IIf
(
    IsNull( DLookUp("SomeField","SomeTable","SomeField = Forms!frm_FormName!cboSomeCombobox")),
    "N/A",
    LookUp("SomeField","SomeTable","SomeField = Forms!frm_FormName!cboSomeCombobox")
)

Ответы [ 2 ]

2 голосов
/ 14 февраля 2012

Проблемы, исправленные в Access 2007 с помощью пакета Microsoft Office 2007 с пакетом обновления 1

On a Windows Vista-based computer, fields that are bound to time-intensive 
expressions are blank in Access 2007

Fields that are bound to time-intensive expressions are blank in Access 2007. 
These fields are empty until you click the text box or until you click anything
outside of Access 2007 if the following conditions are true:
The Control Source property of a text box uses the DLookup() function.
The query that is called by the DLookup() function references a control on 
a form.

http://support.microsoft.com/kb/942378

0 голосов
/ 05 июля 2018

Я сталкивался с этим раньше. Ранее я обнаружил упоминания об этом на нескольких разных форумах Access VBA после поиска в Google, но теперь не могу найти ни одного из этих обращений.

Я возился с этим часами сегодня. Я пробовал разные биты кода в различных событиях, но, как известно любому из нас, столкнувшись с этой проблемой, Report View имеет значительно меньше триггеров событий, чем Print Preview. Тем не менее, я нашел обходной путь и пару важных открытий в отношении этой раздражающей ошибки:

  1. TextBox не нужно получать фокус; простого доступа к свойству .Value достаточно, чтобы дать ему толчок в штанах, которые необходимы для правильного отображения его содержимого. Таким образом, метод .SetFocus не является необходимым.
  2. Для этого достаточно события Section_Paint.

Следующий фрагмент кода работал для меня. Конечно, измените имена разделов и элементов управления так, чтобы они совпадали с именами в вашем собственном отчете.

Справедливое предупреждение: это вызывает мерцание экрана в моей системе при прокрутке отчета. Я пытался отключить обновления экрана с помощью Application.Echo, но это только усиливало мерцание. Казалось, что каждая строка кода, добавленная к событию, независимо от того, что это было, усиливала мерцание; похоже, проблема с синхронизацией:

Private Sub GrpGlacctFooter_Paint()
    Dim DummyVar As Variant
    'DummyVar can be reused for each control. We just need somewhere (anywhere) to
    'stuff each .Value. Simply accessing .Value in any way is enough to trigger the
    'TextBoxes to display their contents.
    DummyVar = txtAcctSubtotalMessage.Value
    DummyVar = txtAcctTotalSpent.Value
    DummyVar = txtAcctRemainder.Value
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...