我的用户之一(运行Windows 7 64bit)报告说,启动我的应用程序时她会收到以下错误消息:
basapplicationtitle.setstartupproperty在第410行错误(3027)上。无法更新。数据库或对象仅读取
有问题的代码是:
Private Function SetAppTitle(pstrRpValue As String) As Boolean
390 On Error GoTo PROC_ERR
Dim dbsDb As DAO.Database
Dim prp As DAO.Property
400 Set dbsDb = CurrentDb()
405 SetAppTitle = False
' Set the Application Title property value.
410 dbsDb.Properties("AppTitle") = pstrRpValue '<= the line that triggers the error
420 SetAppTitle= True
PROC_EXIT:
430 Set dbsDb = Nothing
440 ProcPop
450 Exit Function
PROC_ERR:
460 Select Case Err.Number
Case 3270 'Property not found; create it and try again.
470 Set prp = dbsDb.CreateProperty("AppTitle", dbtest, pstrRpValue )
480 dbsDb.Properties.Append prp
490 Resume
500 Case Else
510 SetStartupProperty = False
520 LogError 'Report the error
530 End Select
540 Resume PROC_EXIT
550 Resume
End Function
我假设她无法访问更新后端或前端数据库之一,在打开前端并连接后端时,我需要对此进行测试。
问题1:属性currentdb()。可更新检查前端和后端是否需要独立测试?
问题2:CurrentDB()。可更新的测试吗?
问题2:我可以在错误消息中提供什么指导 - 我假设检查只读属性的文件是一回事。有用户帐户特权的问题吗?还是锁定文件?我需要考虑其他任何东西?
CurrentDB.Updatable
会告诉您前端是否仅阅读。为了检查您是否可以更新测试的应用程序标题应该足够。
至于为什么前端可能只读,而某些可能的原因是:
-
可以在前端文件上设置文件系统的"仅读取"属性(如您提到的)。
-
前端文件可能位于用户仅读取的文件夹中。例如,普通用户仅对
%ProgramFiles%
只读访问(例如," C: Program Files ...")。 -
多个并发用户打开相同的访问文件可能会迫使某些用户在某些情况下仅阅读。但是,对于共享访问数据库应用程序的前端,这不是问题,因为每个用户必须都有自己的前端文件本地副本。(也就是说,多个同意用户从共享位置打开前端文件的相同副本是一件非常糟糕的事情。)
编辑回复:评论
(1)测试后端访问:
要验证用户可以写入后端数据库,您只需让您的启动代码尝试执行不会更改任何数据的测试更新,例如,
Dim cdb As DAO.Database
Set cdb = CurrentDb
cdb.Execute "UPDATE LinkedTbl SET Field1=Field1 WHERE ID=1", dbFailOnError
如果仅读取后端,则您将获得错误3073"操作必须使用可更新查询"。
(2)前端访问注意事项:
至于在用户没有写入前端访问权限的情况下进行的阴谋,我不会打扰。除了最琐碎的访问应用程序以外,任何其他方法都需要对(前端)数据库对象进行一些更改,以便用户确实需要对前端文件进行写入访问。
我首选的方法是使用安装程序或前端更新程序,将前端文件放置在普通用户可以期望具有读取/写入访问的位置,特别是他们自己的本地文件空间驱动器(例如" C: Users Gord ...")。