2016-04-14 2 views
0

Я попытался выполнения этого кода:VBA Execute ошибка Access Query: База данных или объект только для чтения

Dim cn As ADODB.Connection 
Set cn = New ADODB.Connection 
Dim rs As ADODB.Recordset 
Set rs = New ADODB.Recordset 
Dim strConn As String 
Dim strAcc As String 

'Connecting to the DB 
cn.ConnectionTimeout = 7200 
cn.CommandTimeout = 7200 
strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=d:\Documents\proof.accdb;Mode=Share Deny None; Persist Security Info=False" 
cn.Open strConn 

'Creating the query string 
strAcc = "SELECT * " _ 
& " INTO Table1 " _ 
& " FROM [Excel 8.0;HDR=YES;DATABASE=D:\Documents\database.xlsm].[Sheet1$];" 

'Executing the query 

rs.Open strAcc, cn, adOpenDynamic 

При выполнении он получает сообщение об ошибке: «Не удается обновить базы данных или объект только для чтения» на линия:

rs.Open strAcc, cn, adOpenDynamic 

Я не знаю, как исправить эту проблему. Любопытно, что при выполнении другого запроса (выбор из существующей таблицы) он отлично работает. Вот почему, я думаю, проблема связана с тем, что создается новая таблица с помощью команды SELECT INTO. Я также попытался написать «Режим = Share Deny None» (как вы можете видеть) в соединении, но не решил проблему.

ответ

0

У вас эта проблема, скорее всего, потому, что каталог базы данных на заднем плане. Расположен по адресу: «d: \ Documents \ proof.accdb» находится в каталоге, в котором у вас нет разрешений на запись. Таким образом, вы можете читать только DB/File, а не «Write», т. Е. Выполнять INSERTS или UPDATES. Как вы сейчас пытаетесь сделать.

Перейдите в нужную директорию и щелкните ее правой кнопкой мыши, выберите «Свойства». Если вы в состоянии, посмотрите на вкладку «Безопасность», назначьте себе разрешения для этого каталога.