Доступ не остановится «Вычисление ...», пока вы не наведите курсор мыши на определенный элемент управления - PullRequest
2 голосов
/ 21 января 2011

Мы испытываем эту ошибку на сайте клиента.

На одной рабочей станции (Access2K3, возможно, имеет сенсорный экран) в одной из ключевых форм пользователь сообщил, что он завис или зависает, когда в нижнем левом углу отображается «Вычисление ...».

Мы посмотрели и обнаружили, что это правда, за исключением того, что мы заметили, что вы можете снова «отпустить» экран, слегка покачивая мышью. Затем сузился до одного конкретного текстового поля. Пока вы наводите курсор мыши на это текстовое поле, вы можете отпустить экран, и все будет работать как обычно.

В текстовом поле отображаются некоторые данные только для чтения. Естественно, текстовое поле остается пустым до момента его освобождения, после чего оно показывает правильные данные.

Для этого элемента управления , а также для любого другого элемента управления нет события MouseMove, MouseDown или MouseUp. Источник управления Textbox, по общему признанию, не тривиален, он состоит из IF и также использует функцию VBA. Однако подобные типы сложных элементов управления повторяются в другом месте приложения и не вызывают проблем, и даже этот конкретный элемент управления не вызывает проблем на других машинах.

Кто-нибудь еще испытывал это?

Также для целей отладки - есть ли способ выяснить, что именно происходит, шаг за шагом, когда Access сообщает, что он "Расчет ..." в течение нескольких минут подряд?

Ответы [ 6 ]

4 голосов
/ 29 января 2011

У меня были похожие проблемы при использовании условного форматирования.Когда я столкнулся с проблемой, я решил ее, используя два разных подхода:

  1. Отключите условное форматирование и примените формат вручную через код (то есть, через событие Form_Current, After_Updateсобытие зависимого контроля и т. д.).Очевидно, это не сработает, если вы пытаетесь дифференцировать элементы управления в непрерывно связанной форме.В этих случаях я выбираю другой вариант

  2. Добавление и удаление условного формата вручную.Я не совсем уверен, почему это работает, но это работает.Я дам вам быстрый пример функции, которая показывает технику:

.

Private Const DefaultHLColor As Long = 10092543 'RGB(255, 255, 153); Light Yellow

'---------------------------------------------------------------------------------------
' Procedure : HighlightRow
' DateTime  : 2/22/2008 3:27
' Author    : Mike
' Purpose   : Highlight the detail section of a continuous form.
' Usage     : 1) Add a textbox bound to a unique field (preferrably the primary key)
'                to a form set to continuous view.
'             2) Set Enabled = No, Locked = Yes, BackColor = {Detail Section BackColor},
'                    BackStyle = Normal, SpecialEffect = Flat, ForeColor = BackColor
'             3) Expand the textbox to fill the entire detail section, Send to Back.
'             4) Move it down one pixel ([Ctrl] + [{down arrow key}])
'             5) Add the following to the form's OnCurrent event:
'                =HighlightRow([{TextBoxName}])
' Notes     : We could simply Refresh the form in the OnCurrent event, but Access
'             (2002, at least) does not have a rock solid implementation of conditional
'             formatting.  The problem with Refreshing the form occurs when we select
'             a record (which gets highlighted), then we scroll the form so the
'             highlighted record is no longer visible, then select a new record, and
'             scroll back to the previous record to see that, sadly, it is still
'             highlighted.
'---------------------------------------------------------------------------------------
'
Function HighlightRow(Ctl As TextBox, Optional HLColor As Long = DefaultHLColor) 'vv
    On Error GoTo Err_HighlightRow

    Application.Echo False
    With Ctl
        .FormatConditions.Delete
        If Ctl.Parent.CurrentRecord <> 0 Then
            If Not IsNull(.Value) And Not IsEmpty(.Value) Then
                If IsNumeric(.Value) Then
                    .FormatConditions.Add acFieldValue, acEqual, .Value
                Else
                    .FormatConditions.Add acFieldValue, acEqual, """" & .Value & """"
                End If
                .FormatConditions(0).BackColor = HLColor
                .FormatConditions(0).ForeColor = HLColor
                .FormatConditions(0).Enabled = False
            End If
        End If
    End With

Exit_HighlightRow:
    Application.Echo True
    Exit Function
Err_HighlightRow:
    LogError Err.Number, Err.Description, "HighlightRow"
    Resume Exit_HighlightRow
End Function
1 голос
/ 10 июля 2014

У меня есть именно эта проблема (Access 2010).У меня есть форма и подчиненная форма.Подформа имеет условное форматирование для выделения выбранной записи, но у меня есть форматирование для каждого поля.На форме есть кнопка [edit], которая выполняет subform.allowedits = true

Когда я нажимаю кнопку и не перемещаю мышь над подчиненной формой, нет проблем.Когда я нажимаю кнопку «Правка» и мгновенно перемещаю мышь над условно отформатированным полем в подчиненной форме, он продолжает мигать / обновляться, пока я не переместлю мышь из подчиненной формы или в неформатированное поле в подчиненной форме.

Кажется, что вышеприведенное работает, но недостатком этого метода (использование одного элемента управления для отображения выбранного состояния) является то, что когда вы устанавливаете цвет элемента управления на черный, а другие элементы управления имеют черный текст, вы не можете прочитатьтекст.

Конечно, простое решение состоит в том, чтобы не делать фон черным, но другая «проблема» состоит в том, что когда вы фокусируете текстовое поле, фон больше не виден через текстовое поле, и это не выглядит хорошо.

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

1 голос
/ 29 ноября 2013

Я знаю, что на этот вопрос был дан ответ, но я нашел странный обходной путь, который может помочь людям.

В моем большом отчете в Access 2007 условное форматирование вызывало его зависание при открытии с помощью просто«Расчет ...» в строке состояния, аналогично проблеме выше.Однако я обнаружил, что это происходит только при попытке открыть отчет, выбрав его на боковой панели.

Я создал форму, выполняющую роль искусственной панели инструментов, с кнопкой + встроенным макросом, запускающим команду OpenReport.При открытии таким способом отчет открывается мгновенно!Это действительно странная вещь, но она позволила мне сохранить условное форматирование.

Надеюсь, что это может помочь другим, только не забывайте, когда вы находитесь в режиме разработки, что если вы попытаетесь переключиться в режим отчета, он зависнет.Закройте его и используйте кнопку искусственной панели инструментов.

РЕДАКТИРОВАТЬ: Исходя из вышеизложенного, я понял, что это работает, потому что кнопка открывает его в режиме предварительного просмотра.Он висит в режиме отчета.

0 голосов
/ 19 марта 2018

Создать ссылку со следующей целью: yourdatabase.accdb / decompile Затем запустите вашу базу данных по этой ссылке. Эта операция очистит ваш код VBA от старых компиляций.

0 голосов
/ 08 мая 2014

Похоже, это новое в Access 2013. Я применил все условия условного форматирования, и проблема была решена.

0 голосов
/ 21 января 2011

Вы можете установить статус строки текста на что угодно.Попробуйте использовать эту строку в конце задачи обработки

Application.Echo True “Your Text Goes Here”

Не знаю, почему она будет очищаться при наведении мыши!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...