2010-11-06 90 views
0

我在我的Excel工作簿中有一个宏,用于更新与电子表格相关的访问数据库中的特定记录。从Excel工作表更新Access 2007数据库中的记录

所有工作正常,如果访问数据库关闭。出现问题如果在数据库打开和用户正在编辑的Excel电子表格涉及to.` 特定记录我得到以下错误信息:

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

我已经设置了数据库表格的记录锁定为“无记录锁',但这并没有帮助。

任何意见或帮助,不胜感激。

干杯 诺尔

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 
+1

在尝试此操作之前是否保存了所有代码和查询?这是将ADO与未保存的结构化数据(表单,查询,代码等)一起使用时产生的标准错误。 – Fionnuala 2010-11-07 10:52:17

+0

@Remou是的,我保存了所有的表格代码等......我认为当用户在窗体上输入数据并保存记录(例如使用'ctrl + S')并保持记录打开时会出现问题。如果用户避免这样做,这似乎不成问题。 – noelmcg 2010-11-07 11:57:40

+0

Ctrl-S不保存记录 - 它保存了FORM,这会引起@Remou建议的问题。唯一的例外就是如果你用自定义动作覆盖了Ctrl-S的默认定义。 – 2010-11-08 01:25:57

回答

1

看来你还没有将数据库分成前端和后端。如果你这样做,问题就会消失。 Ctrl + S不用于保存记录,即Shift + Enter,它用于保存数据库对象,因此它似乎具有将数据库引入设计或开发状态的效果。

+0

我还没有拆分数据库,刚刚这样做,问题已经消失。好的一个Remou – noelmcg 2010-11-08 10:37:14

+0

@glinch只是好奇,为什么这不再是你接受的答案?您可能会注意到,David在我回答几个小时后发布了消息。 – Fionnuala 2010-11-08 15:57:34

+0

对不起,代表我的错误,这仍然是我接受的答案。 – noelmcg 2010-11-08 16:55:58

0

在宏观面;您是否尝试以只读方式打开连接?即使你的Access用户没有锁定记录,他在记录上有一个“读取锁定”,从而防止了excel独占锁定。我在想,如果两个用户都只尝试读取访问权限,那么您应该没问题;但是如果其中一个正在读/写,那么它将会失败。

您的访问形式,你也应该有:

Me.AllowAdditions =真

Me.AllowDeletions =假

Me.AllowEdits =假

+0

@RichO欢呼声回复。我正在寻找能够读/写。 Access进行此操作时没有问题,只有当电子表格尝试写入打开的记录时才会出现问题。您是否说过要同时将Access和Excel写入同一记录是不可能的? – noelmcg 2010-11-06 14:47:58

+0

我明白了......这是个好问题;我的直觉告诉我,你不能这样做,因为你依靠两个独立的数据库引擎(内部访问引擎和ADO驱动程序)在记录锁定级别上进行协作。你有没有考虑从访问使用ole自动化?至少可以让所有的东西在同一个数据库引擎下运行......而不是你想听到这个,但这听起来像一个数据库后端,如SQL服务器的工作.. – RichO 2010-11-06 17:40:43

+0

最后一个想法...你有没有尝试设置ActiveConnection什么也没有设置rst到什么都不? – RichO 2010-11-06 18:47:35

0

的问题可能不在你的代码中。错误:

The database has been paced in a state by

指示数据库已经以独占模式打开。你应该检查你是如何打开数据库的。

+0

我不太确定这是否是问题。我没有以独占模式打开数据库。数据库打开后,可以通过Excel文件写入数据库。尝试使用数据库表单和Excel电子表格写入相同记录时出现问题。 – noelmcg 2010-11-06 20:03:11

相关问题