Проблема с обновлением записи в базе данных Access 2007 из Excel Excel - PullRequest
0 голосов
/ 06 ноября 2010

В моей книге Excel есть макрос, который обновляет определенную запись в базе данных доступа, связанную с электронной таблицей.

Все работает нормально, если база данных доступа закрыта.Проблемы возникают, если база данных открыта, и пользователь редактирует конкретную запись, к которой относится электронная таблица Excel. Я получаю следующее сообщение об ошибке:

Error Number 2147467259: 
The database has been paced in a state by user 'ADMIN' on
'LAPTOP' that prevents it from being opened or locked.

Я установил для блокировки формы в базе данных значение «Нет».Record Locks », но это не помогло.

Любой совет или помощь очень ценятся.

Приветствия Ноэль

Public Sub updateAccessRecord()
On Error GoTo ProcError
Dim subFuncName As String
subFuncName = "updateAccessRecord"

Dim conn As ADODB.Connection
Dim cmd As ADODB.Command
Dim rst As ADODB.Recordset

Dim dbName As String
Dim dbPath As String
Dim strCon As String
Dim recID As Long
Dim fieldVal As Double
Dim strSQL As String

fieldVal = Worksheets("House Claim").Cells(593, 10).Value
dbName = "claim-db.mdb"
dbPath = ThisWorkbook.Path & "\..\..\..\..\"
dbPath = dbPath & "\" & dbName

strSQL = "UPDATE tblInsClaimDet SET propSet=" & fieldVal & " WHERE ID=" & recID & ""

   Set conn = New ADODB.Connection
   With conn
    .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
       "Data Source=" & dbPath
       .Open
   End With
   Set cmd = New ADODB.Command
   With cmd
      .ActiveConnection = conn
      .CommandText = strSQL
   End With
   Set rst = cmd.Execute
   Set rst = Nothing
   conn.Close
   Set conn = Nothing

ExitProc:

   Exit Sub

ProcError:

   MsgBox "Error " & Err.Number & ": " & Err.Description, _
         vbCritical, "Error in procedure in " & subFuncName
   Resume ExitProc
End Sub 

Ответы [ 3 ]

1 голос
/ 08 ноября 2010

Похоже, что вы не разбили базу данных на фронтэнд и бэкэнд. Проблема исчезнет, ​​если вы это сделаете. Ctrl + S не для сохранения записи, то есть Shift + Enter, это для сохранения объекта базы данных, и поэтому кажется, что это приводит к переводу базы данных в состояние проектирования или разработки.

0 голосов
/ 06 ноября 2010

Проблема, вероятно, не в вашем коде. Ошибка:

База данных находится в состоянии на

Указывает, что база данных была открыта в монопольном режиме. Вы должны проверить, как вы открываете базу данных.

0 голосов
/ 06 ноября 2010

на стороне макроса;Вы пытались открыть свое соединение только для чтения?Даже если ваш пользователь Access не блокирует запись, у него есть «блокировка чтения» для записи, что исключает исключительную блокировку Excel.Я думаю, что если оба пользователя только пытаются получить доступ только для чтения, вы должны быть в порядке;но если кто-либо из них выполняет чтение / запись, он потерпит неудачу.

В вашей форме доступа вы также должны иметь:

Me.AllowAdditions = True

Me.AllowDeletions = False

Me.AllowEdits = False

...