проблема-запрос блокирует mdb файл

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
vancho
Сообщения: 4
Зарегистрирован: 13 июн 2013, 12:01

Привет, у меня следующая проблема:
В exel файле с помощью запроса подключается mdb файл

SELECT Measure_bas.Value
FROM `file_mdb`.Measure_bas Measure_bas
WHERE (Measure_bas.ID_Param=3)
ORDER BY Measure_bas.Value DESC

но данный запрос блокирует этот mdb файл, из-за чего в mdb файл нельзя потом осуществить запись.

Может надо закрыть запрос (типа коммандой close или end) или что-то другое?

или как изменить запрос, чтоб он открывал mdb файл только для чтения без блокировки?
Подскажите пожалуйста.

строка подключения такая DSN=MS Access Database; DBQ=\\сервер\папка\file.mdb; DefaultDir=\\сервер\папка; DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;UID=admin;
Аватара пользователя
AiK
Сообщения: 2287
Зарегистрирован: 13 фев 2004, 18:14
Откуда: СПб
Контактная информация:

Я так подозреваю, пока не выполнится запрос и не будет извлечён (выфетчен :) ) весь резалтсет драйвер не освободит файл.
Соответственно нужно резалтсет высвобождать.

Коннекция на чтение открывается строкой READONLY=true; после айди драйвера, но не факт что при этом не будет блокировки :)
Даже самый дурацкий замысел можно воплотить мастерски
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Непонятно, каким образом вызывается этот запрос: VBA или формулы?
Также непонятно, что значит "но данный запрос блокирует этот mdb файл, из-за чего в mdb файл нельзя потом осуществить запись." Каким образом Вы пытаетесь осуществить запись в этот файл?

Кстати, поищите, нельзя ли в строке подключения ODBC для Access явно указывать режим доступа: эксклюзивный или разделяемый.
SELECT не должен фатально блокировать даже записи в таблице.
Один .mdb можно одновременно открывать (по умолчанию режим разделяемый (shared)) несколькими экземплярами Access. Режимы блокировки, кстати, настраиваются в формах. Т.е. форма может блокировать таблицу, а может только записи.
vancho
Сообщения: 4
Зарегистрирован: 13 июн 2013, 12:01

Naeel Maqsudov писал(а):Непонятно, каким образом вызывается этот запрос: VBA или формулы?
Также непонятно, что значит "но данный запрос блокирует этот mdb файл, из-за чего в mdb файл нельзя потом осуществить запись." Каким образом Вы пытаетесь осуществить запись в этот файл?

Кстати, поищите, нельзя ли в строке подключения ODBC для Access явно указывать режим доступа: эксклюзивный или разделяемый.
SELECT не должен фатально блокировать даже записи в таблице.
Один .mdb можно одновременно открывать (по умолчанию режим разделяемый (shared)) несколькими экземплярами Access. Режимы блокировки, кстати, настраиваются в формах. Т.е. форма может блокировать таблицу, а может только записи.

1. Запрос вызывается VBA
2. В файл mdb ежеминутно на сервере происходит запись данных с помощью другой программы.
А пользователи просматривают со своих компьютеров эти данные с помощью запроса в МС Екселе
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

Так сам код VBА мы здесь увидим или нет?
It's a long way to the top if you wanna rock'n'roll
vancho
Сообщения: 4
Зарегистрирован: 13 июн 2013, 12:01

somewhere писал(а):Так сам код VBА мы здесь увидим или нет?

Извиняюсь, ошибся, я не силен в программировании. Имеется только строка подключения и сам запрос указанные выше.
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Тогда и говорить не о чем. Наверняка всё дело в коде.
Небось определили глобальную переменную, в процедуре ей присваивают экземпляр Connection или Database и привет... База занята до закрытия Excel-я...
Без исходного кода, которым открывается база, бессмысленно что-либо обсуждать.
Ответить