Как известно, прямые запросы в модуле документа при использовании VFOledb появляется ошибка
Цитата: FAILED! ICommandText::Execute(): File is in use by another user
что не позволяет использовать прямые в модуле документа.
uzhast даже исправлял драйвер для этого
http://uzhast.fatal.ru/vfpoledb/Между тем, при подключении драйвера обычно стоит "Exclusive = No;" и 1С работает в разделенном режиме -
т.е. по идее - не должно по идее быть блокировок.
Причина оказалась достаточно банальной.
В FoxPro есть параметр
Цитата:SET TABLEVALIDATE TO [nLevel]
По умолчанию стоит nLevel = 3 (+1+2).
+1 означает "При проверке блокируется заголовок таблицы (.dbf). " во время открытия таблиц.
Т.е. действующая установка по умолчанию велит(!) блокировать заголовок при первом открытии таблиц.
Кстати, если хоть один запрос(к нужной таблице) выполнился успешно - проблем дальше нет.
Вся проблема решается установкой этого параметра в 0 после создания OLEDBDATA - не проводить проверку при открытии таблиц.
Или в коде 1С
ОледбКоманда=глОлеДБ.СоздатьКоманду();// После создания и подключения глОлеДБ
ОледбКоманда.Выполнить("Exec('SET TABLEVALIDATE TO 0')");// Отключили блокировки
Также по сообщению hogik
http://infostart.ru/profile/2905/blogs/482/index.php?p=2&cp=all&id=482%2F%3Fcp%3...сообщение 28
Цитата:Но, пока, мне не удаётся нормально запустить “патченный драйвер”. Несколько раз запрос успешно выполнился. Потом я стал запускать запрос с параллельным обновлением таблицы. И с какого то момента стало вылетать сообщение:
…FAILED! ICommandText::Execute(): Undefined critical error!
Вернулся на исходный драйвер – работает. Базу данных восстановил – не помогло…
т.е. использование патченного драйвера может привести к критическим ошибкам, если другой пользователь
производит обновление таблицы, при использовании родного драйвера все ОК.