Форма Ms Access, связанная с SQL Server, не отвечает

Не уверен, что для этого есть определенный ответ, но у меня есть приложение Ms Access с SQL Server 2008, так как хранилище данных, все таблицы связаны с SQL Server из приложения Access, приложение размещено на сервере Citrix. Все формы в приложении являются связанными формами. Существует одна конкретная форма, которая в последнее время вызывает проблемы, когда я пытаюсь отредактировать или сохранить данные, форма зависает навсегда, и мне приходится завершать сеанс. Форма связана с таблицей на сервере SQL, и таблица имеет столбец Identity в качестве первичного ключа, что мне кажется странным, так это то, что эта форма даже не так активно используется, как любые другие формы, и в таблице нет даже половины записей, как в любой другие интенсивно используемые таблицы. В форме всего 4 поля, и только одно из них — Nvarchar, в других формах гораздо больше полей Nvarchar с гораздо большим использованием и данными, и они, похоже, не вызывают никаких проблем. Я исключаю проблемы с сетью, поскольку это повлияет на все приложение, а не только на одну форму, а индексы на сервере SQL создаются ежедневно, поэтому я не думаю, что это проблема индексации. Кто-нибудь знает, почему это произойдет.


person Irfarino    schedule 03.08.2012    source источник
comment
Это происходит, даже когда я запускаю приложение локально со своего ПК.   -  person Irfarino    schedule 03.08.2012


Ответы (2)


Если вы подозреваете, что форма повреждена, вы можете использовать методы SaveAsText и LoadFromText, чтобы сохранить определение формы в виде текстового файла, а затем перезагрузить его с другим именем.

Application.SaveAsText acForm, "frmMainMenu", "frmMainMenu.txt"
Application.LoadFromText acForm, "frmMainMenu_new", "frmMainMenu.txt"

Эти методы не являются всеобъемлющими, как предлагает Эрик, но они быстрые и простые. Вы также можете попробовать декомпилировать, чтобы исправить повреждение. См. 2 ответа по этой ссылке: КАК декомпилировать и перекомпилировать

Если повреждение не является причиной проблемы, вы можете попробовать выполнить код формы в режиме прерывания (отладки). Поместите временную точку останова в первую исполняемую строку процедуры открытия формы. Если у вас нет процедуры для открытия формы, добавьте ее. Если вы не знакомы с установкой временных точек останова, вы можете просто добавить слово Stop:

Private Sub Form_Open(Cancel As Integer)
    Stop

Затем, после того как вы откроете форму, вы можете выполнять код по одной строке за раз с помощью клавиши F8. Надеюсь, вы сможете определить строку, из-за которой код зависает.

person HansUp    schedule 03.08.2012
comment
Я прошел через код довольно много раз, у меня даже включен ключ реестра для трассировки ODBC ссылка. Когда форма открывается, она фильтруется для записи, но когда я смотрю на трассировку ODBC, она загружает 10 записей за сценой каждую минуту, пока я не угадаю, что все записи будут извлечены из таблицы, но то же самое верно для всех форм, которые связаны, у них гораздо больше записей, все записи удаляются за сценой. как я уже сказал, загружаются дополнительные данные, которые не нужны - person Irfarino; 03.08.2012
comment
Итак, источник записей вашей формы — это большой набор записей, но вы фильтруете этот набор до одной? Это может помочь показать нам свойство источника записи формы. - person HansUp; 03.08.2012
comment
Форма привязана к таблице, источником записи является таблица (имя таблицы) в свойствах формы. Извините, забыл упомянуть, что свойство компактности при закрытии базы данных также включено, поэтому каждый раз, когда кто-либо закрывает приложение, база данных сжимается. - person Irfarino; 03.08.2012
comment
Я попытаюсь декомпилировать/перекомпилировать базу данных, чтобы избавиться от нежелательного кода. - person Irfarino; 03.08.2012
comment
Для всех таблиц вам нужен pk, и вы должны ТАКЖЕ включить столбец меток времени для всех таблиц. Access использует эту информацию, чтобы понять, как и когда обновлять таблицу. - person Albert D. Kallal; 04.08.2012

Попробуйте перестроить внешний интерфейс Access. Создайте новую базу данных, установите соответствующие параметры базы данных (поведение поля, автоматическое отслеживание имен, уровень синтаксиса SQL и т. д.), затем импортируйте все формы, отчеты, макросы, код vb и данные из старого доступа. базу данных в новую. Установите параметры запуска правильно и посмотрите, не станет ли что-то лучше.

Базы данных Access могут быть слегка повреждены, и полная перестройка иногда является единственным способом их исправить.

Обязательно сохраните резервную копию.

person ErikE    schedule 03.08.2012
comment
Я переписал форму, которая вызывает проблему, вместо того, чтобы привязывать ее к таблице, я извлекаю данные с помощью кода, а также обновляю их с помощью кода. Форма предназначена только для редактирования одной записи за раз на основе фильтра из другой формы, поэтому привязка ее к таблице и доступ к скрытой за сценой вытягиванию всей таблицы не требуется. Я думаю, что это решит проблему, но мне было просто любопытно, почему это произошло, поскольку эта форма никогда не вызывала проблем в течение многих лет, возможно, ваше право на форму может быть повреждено по какой-то причине. - person Irfarino; 03.08.2012