Страница 1 из 1

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

Добавлено: 11 сен 2013, 09:56
vancho
Привет, у меня следующая проблема:
В 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;

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

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

Коннекция на чтение открывается строкой READONLY=true; после айди драйвера, но не факт что при этом не будет блокировки :)

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

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

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

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

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

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

1. Запрос вызывается VBA
2. В файл mdb ежеминутно на сервере происходит запись данных с помощью другой программы.
А пользователи просматривают со своих компьютеров эти данные с помощью запроса в МС Екселе

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

Добавлено: 12 сен 2013, 16:23
somewhere
Так сам код VBА мы здесь увидим или нет?

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

Добавлено: 12 сен 2013, 16:56
vancho
somewhere писал(а):Так сам код VBА мы здесь увидим или нет?

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

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

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