Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 Could not lock file. Виноват ConnectionString или Access?  [new]
Jammer
Member

Откуда:
Сообщений: 20
Дамы и господа,
Есть приложение на VB.NET которое обращается к .mdb файлу(Acces 2003). С жёсткого диска работает всё нормально, но вот при записи проекта(.exe + .mdb) на DVD и запуске приложения оттуда возникает Exception
System.Data.OleDb.OleDbException: Could not lock file.

Проблема в том, что нельзя создать .ldb файл в той же директории(на DVD) во время запроса к базе. Есть ли какой-нибудь способ решить эту проблему:
1)Создавать .ldb на HD пользователя
2)Поиграться с опциями базы Tools>Options>Advanced>Default open mode
-""- >Default record locking
-""- >Open databases using record-level blocking
3)Изменить метод доступа к базе в самой программе
MyOleDbConnection.ConnectionString = "Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Registry Path=;Jet OLEDB:Database Locking Mode=...;Mode=Read..."
4)Какой-нибудь другой вариант

Всё бы попробовал, но к сожалению на некоторое время лишён удовольствия писать CD/DVD.
3 июн 05, 18:21    [1596270]     Ответить | Цитировать Сообщить модератору
 Re: Could not lock file. Виноват ConnectionString или Access?  [new]
Victosha
Member

Откуда: Москва
Сообщений: 2620
монопольный доступ только на чтение.
(в строке подключения).

Mode=Read|Share Deny Read|Share Deny Write
(с выражением лица)

ldb при этом не должен создаваться
(может быть потребуется явный атрибут readonly на mdb-файле)
3 июн 05, 23:40    [1596761]     Ответить | Цитировать Сообщить модератору
 Re: Could not lock file. Виноват ConnectionString или Access?  [new]
Victosha
Member

Откуда: Москва
Сообщений: 2620
ado-код пишется так

  Dim cNN As ADODB.Connection
  Set cNN = New ADODB.Connection

  cNN.Provider = "Microsoft.Jet.OLEDB.4.0"
  cNN.Mode = adModeRead + adModeShareExclusive 'монопольный на чтение 
  'ldb не будет создан и просто при adModeShareExclusive, 
  ' более того, readonly-marked file тоже откроется, 
  ' а что будет дальше - проверяйте сами... 

  cNN.ConnectionString = "Data Source=Drive:\FullPath\YourMDB.mdb"

  cNN.Open
  ...
  cNN.Close
4 июн 05, 01:10    [1596799]     Ответить | Цитировать Сообщить модератору
 Re: Could not lock file. Виноват ConnectionString или Access?  [new]
Jammer
Member

Откуда:
Сообщений: 20
Victosha,

Не работают оба вариатна :(
Тот же Exception при первом варианте
Второй вариант непременим, т.к. использую ADO.NET и connection обьявлен как System.Data.OleDb.OleDbConnection
6 июн 05, 13:01    [1599317]     Ответить | Цитировать Сообщить модератору
 Re: Could not lock file. Виноват ConnectionString или Access?  [new]
Victosha
Member

Откуда: Москва
Сообщений: 2620
Jammer
Victosha,

Не работают оба вариатна :(
Тот же Exception при первом варианте
Второй вариант непременим, т.к. использую ADO.NET и connection обьявлен как System.Data.OleDb.OleDbConnection


примите мои глубоки соболезнования и извинения за
ранее мною сказанное.

ЗЫ
Переводить на ADO.NET не умею, в ближайшее время не собираюсь уметь.
И даже не интересуюсь, может ли это быть переведено.
6 июн 05, 13:50    [1599517]     Ответить | Цитировать Сообщить модератору
 Re: Could not lock file. Виноват ConnectionString или Access?  [new]
Shuhard
Member

Откуда:
Сообщений: 4998
Jammer
Victosha,

Не работают оба вариатна :(
Тот же Exception при первом варианте
Второй вариант непременим, т.к. использую ADO.NET и connection обьявлен как System.Data.OleDb.OleDbConnection

покажите не рабочие варианты,возможеы Вы не правильно пытаетесь использовать моду.
6 июн 05, 14:34    [1599679]     Ответить | Цитировать Сообщить модератору
 Re: Could not lock file. Виноват ConnectionString или Access?  [new]
Jammer
Member

Откуда:
Сообщений: 20
Victosha,
Прошу прощения за беспокойство.

Shuhard,

Me.MyOleDbConnection.ConnectionString = "Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Registry Path=;Jet OLEDB:Database L" & _
                    "ocking Mode=1;Data Source=" + Chr(34) + root + "\Project.mdb" + Chr(34) + ";Jet OLEDB:Engine Type=5;Provi" & _
                    "der=""Microsoft.Jet.OLEDB.4.0"";Jet OLEDB:System database=;Jet OLEDB:SFP=False;per" & _
                    "sist security info=False;Extended Properties=;Mode=Read|Share Deny Read|Share Deny Write;Jet OLEDB:Encrypt Databa" & _
                    "se=False;Jet OLEDB:Create System Database=False;Jet OLEDB:Don't Copy Locale on C" & _
                    "ompact=False;Jet OLEDB:Compact Without Replica Repair=False;User ID=Admin;Jet OL" & _
                    "EDB:Global Bulk Transactions=1"

Не нашёл хелпа по Mode :( но если не ошибаюсь, то можно и в численном представлении.

Me.MyOleDbConnection.ConnectionString = "Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Registry Path=;Jet OLEDB:Database L" & _
                    "ocking Mode=1;Data Source=" + Chr(34) + root + "\Project.mdb" + Chr(34) + ";Jet OLEDB:Engine Type=5;Provi" & _
                    "der=""Microsoft.Jet.OLEDB.4.0"";Jet OLEDB:System database=;Jet OLEDB:SFP=False;per" & _
                    "sist security info=False;Extended Properties=;Mode=12;Jet OLEDB:Encrypt Databa" & _
                    "se=False;Jet OLEDB:Create System Database=False;Jet OLEDB:Don't Copy Locale on C" & _
                    "ompact=False;Jet OLEDB:Compact Without Replica Repair=False;User ID=Admin;Jet OL" & _
                    "EDB:Global Bulk Transactions=1"

root - путь к базе

Может всётаки виноват LockingMode, или это аналог optimistic/pessimistic record locking?
6 июн 05, 17:12    [1600398]     Ответить | Цитировать Сообщить модератору
 Re: Could not lock file. Виноват ConnectionString или Access?  [new]
тень. (видимо, Shuhard'a)
Guest
А не приходило Вам в голову
Mode=Read|Share Deny Read|Share Deny Write

аккуратно разнести пробелами?

Mode=Read | Share Deny Read | Share Deny Write

ЗЫ
откуда Вы взяли такие строки подключения - провайдер в кавычках,
а путь к воркгрупп файлу - явно заданный пустой?

совет Вам такой - войдете в Акцесс. Откройте базу в нужном Вам режиме, в окне immediate наберите
? CurrentProject.Connection.ConnectionString

Аккуратно скопируйте строку с учетом возможных исправлений на пробелы.

ЗЫ2
тут будет просто многоточие...
......
6 июн 05, 17:56    [1600597]     Ответить | Цитировать Сообщить модератору
 Re: Could not lock file. Виноват ConnectionString или Access?  [new]
Jammer
Member

Откуда:
Сообщений: 20
Спасибо, завтра как до писалки доберуст, так попробую.
автор
ЗЫ
откуда Вы взяли такие строки подключения - провайдер в кавычках,
а путь к воркгрупп файлу - явно заданный пустой?

Visual Studio сгенерил :)
6 июн 05, 18:28    [1600714]     Ответить | Цитировать Сообщить модератору
 Re: Could not lock file. Виноват ConnectionString или Access?  [new]
GydruS
Member

Откуда:
Сообщений: 24
Victosha
монопольный доступ только на чтение.
(в строке подключения).
Mode=Read|Share Deny Read|Share Deny Write
(с выражением лица)
ldb при этом не должен создаваться
(может быть потребуется явный атрибут readonly на mdb-файле)


Столкнулся с той же проблемой, что и Jammer!
Совет от Victosha - заработал с первого раза. Единственное, что mode в connection string менял уже в рантайме, а то в IDE такие параметры присвоить не получилось (в ADOConnection в Дельфи).
Спасибо!!!
24 мар 06, 18:01    [2487914]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить