#sql-server #vba #ms-access
Вопрос:
Я создал интерфейс MS-Access с серверной частью SQL Express на отдельном сервере. Файл доступа находится на общем файловом сервере.
При открытии интерфейса и запуске первого sql INSERT INTO...
с использованием VBA доступ зависает и «не отвечает» примерно на 60-90 секунд.
После этого процесса инициализации запросы на вставку выполняются должным образом. С запросами ВЫБОРА или ОБНОВЛЕНИЯ проблем нет. Я протестировал код VBA, и сбой связан с запросом на ВСТАВКУ, независимо от того, какая форма или ВСТАВКА запускается первой после открытия интерфейса.
Первичные ключи в SQL Express являются int и индексируются.
Я пытался:
- Выполнение ВСТАВКИ sql с помощью DAO(rs.AddNew) и cmd.execute(«ВСТАВИТЬ В…»).
- Установите для доступа (Параметры>Настройки клиента>>Блокировка записей по умолчанию) значение «Без блокировок» и>>
отключено «Открывать базы данных с помощью блокировки на уровне записей». - Перемещение файла доступа локально и выполнение с рабочего стола.
- Восстановление и сжатие базы данных.
К сожалению, у меня закончились идеи.
Комментарии:
1. Это первая вставка или просто первая команда против серверной части (это подразумевает подключение)? Каково содержимое первой зависшей вставки? Вероятно, нам нужно увидеть какой-то код, чтобы помочь в диагностике.
2. Проблем с подключением нет — все запросы на ВЫБОР и ОБНОВЛЕНИЕ выполняются нормально. Проблема возникает при запуске первой вставки sql, и это может быть из любой формы. Доступ останавливается на DoCmd.RunSQL «ВСТАВИТЬ В dbo_tblUser (имя, возраст) ЗНАЧЕНИЯ (‘»amp; txtName amp; «‘, ‘» txtAge»‘)», но также с rs = CurrentDb.OpenRecordset(«dbo_tblUser», dbOpenDynaset, dbSeeChanges); С rs; .AddNew
3. Очень необычно. Интерфейс доступа должен быть локальным (для каждого пользователя), но вы уже протестировали это. — Проверьте Sql-сервер: есть ли какая-либо активность во время ожидания? Есть ли что — то в журналах Sql Server? Или журналы событий Windows?
4. Для полноты картины: это также происходит, когда вы вставляете запись в связанную форму или непосредственно в связанную таблицу?
5. SQL в комментарии показывает отсутствие объединения txtAge:
"', '" amp; txtAge amp; "')"
. Почему использование разделителей апострофа для возраста — это не поле числового типа? Зачем сохранять возраст вместо даты рождения?