我的一位用户(正在运行Windows 7 64bit)报告说,启动我的应用程序时,她收到以下错误消息:
410行上的basApplicationTitle.SetStartupProperty错误(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()。updatable是否同时检查前端和后端,还是需要独立测试?
问题2:currentdb()。updatable是否足够?
问题2:我可以在错误消息中提供什么指导-我假设检查文件的只读属性是一回事。是否有用户帐户特权的问题?还是锁定文件?我还有什么需要考虑的吗?
CurrentDB.Updatable
会告诉您前端是否为只读。为了检查您是否可以更新应用程序标题,该测试应该足够了。
至于为什么前端可能以只读方式打开,可能的原因是:
文件系统的“只读”属性可能在前端文件上设置(如您所述)。
前端文件可能位于用户具有只读访问权限的文件夹中。例如,普通用户仅具有只读访问权限%ProgramFiles%
(例如,“ C:\ Program Files \ ...”)。
在某些情况下,多个并发用户打开同一Access文件可能会迫使某些用户为只读。但是,这对于共享Access数据库应用程序的前端应该不是问题,因为每个用户都必须拥有自己的前端文件本地副本。(也就是说,多个并发用户从共享位置打开前端文件的相同副本是一件很糟糕的事情。)
(1)测试后端访问:
为了验证用户可以写入后端数据库,您可以让启动代码尝试执行不更改任何数据的测试更新,例如,
Dim cdb As DAO.Database
Set cdb = CurrentDb
cdb.Execute "UPDATE LinkedTbl SET Field1=Field1 WHERE ID=1", dbFailOnError
如果后端是只读的,则会出现错误3073“操作必须使用可更新的查询”。
(2)前端访问注意事项:
至于在用户没有对前端的写访问权的情况下如何进行欺骗,我不会打扰。除了最简单的Access应用程序之外,所有其他应用程序都需要对(前端)数据库对象进行一些更改,因此用户确实确实需要对前端文件的写权限。
我的首选方法是使用安装程序或前端更新程序,将前端文件放置在普通用户可以期望具有读/写访问权限的位置,特别是本地硬盘上自己的文件空间(例如, “ C:\ Users \ Gord ...”)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句