ako*_*ako 9 permissions ms-access ms-access-2007 linked-tables
我有一个访问2003(mdb)数据库的住房项目我每季度更新一次我们当地的规划办公室.我们办公室的其他人可以从看到相同的数据中受益.我认为最简单的方法是给它们一个单独的访问数据库(无论是版本2003还是2007),从它链接到我更新的源表.但是,为了防止它们在查看时无意中更改源数据,我想使链接表只读.
有关如何限制Access 2007的链接表的访问权限的任何提示?
有了这个答案的游戏后期,但这是MS-Access开发人员偶尔需要做的事情......
...而且它是神秘的,因为我们将使用带有内部定义的连接字符串的只读查询,并且"查询属性"窗口不能完全按照您的预期执行操作.
实际上,我认为该窗口不会影响实现"源连接字符串"属性的Microsoft开发人员所做的任何事情.
但是,无论是否神秘,这里是如何做一些像另一个MS-Access数据库的只读链接表一样的东西:
__PRE__显然,您正在使用自己的数据库地址和表名; 你可能不需要密码条款.
不要错过连接字符串前面的那些双引号:当您粘贴连接字符串时,它们不会被内置属性对话框放在那里,而您确实需要它们.
你还没有完成:它仍然是读写:
你可以将查询重命名为表名,或者不是:它仍然可以在任何查询中使用,就好像它是一个表一样,如果你给它一个明确表明这不是一个名字,你可能只会保留一些混淆实际上是一张桌子 这在任何需要DAO TableDef对象的代码中都很重要,并且包含为您重新链接外部表的任何代码.
您将在"源连接字符串"下的查询属性窗口中注意到您的连接字符串(纯文本密码和所有).说真的,不要编辑它:如果你很幸运,它只会用一对单引号替换SQL中的两个双引号,查询仍然有效.但是,如果粘贴一个新的连接字符串,那么你可能会丢失这些引号,并且会破坏查询; 并且没有任何错误消息和帮助页面会告诉您在原始SQL中需要这些魔术引号.
我怀疑在对外部对象的查询中还有其他未记录的"陷阱"陷阱:如果你将这个黑客传递给你的同事,我强烈建议你传递警告' 你完成了查询窗口.不要在这里做任何其他事情 '因为这种类型的陷阱会浪费你的时间和他们的时间.
另外:请务必记录您所做的事情:用于重新连接链接表的大多数工具都不会接收带有外部源的查询,而这是一个等待试图在"DEV","测试"和"生产'数据库.
您可以将db文件存储在其他用户具有只读权限的共享文件夹中。这样,他们仍然应该能够查看(但不能更改)链接表中的数据。
如果该建议不令人满意,则可以使用查询将其限制为只读访问。在为用户提供的数据库中,请勿在其他数据库中包含指向源表的链接。而是给他们一个查询来查找没有链接的源表...形式为FROM TableName IN '[path to db file]'
这是一个经过测试的示例:
SELECT
u.UserID,
u.FName,
u.LName,
u.AccessLevelID
FROM tblUser AS u IN 'C:\share\Access\loginexample.mdb';
Run Code Online (Sandbox Code Playgroud)
但是,该查询结果仍然可以编辑。您可以使用字段表达式代替实际字段值使列值变为只读。
SELECT
u.UserID + 0 AS UserID,
u.FName + '' AS FName,
u.LName + '' AS LName,
u.AccessLevelID + 0 AS AccessLevelID
FROM tblUser AS u IN 'C:\share\Access\loginexample.mdb';
Run Code Online (Sandbox Code Playgroud)
这些是将值设为只读的简单转换。但是您可以酌情使用其他技术。例如,如果表包含日期/时间字段,则可以使用CStr()
或Format()
。
CStr(date_field) AS date_field_as_text
Format(date_field, 'yyyy-mm-dd hh:nn:ss ampm') AS date_field_as_text
Run Code Online (Sandbox Code Playgroud)
注意我使用的别名与那些函数的字段名称不同。在某些情况下,当您尝试重新使用字段名称作为别名时,Access会抱怨“递归别名”。但是,只需在查询设计器中测试您的别名选择,即可快速找出可接受的选项。
归档时间: |
|
查看次数: |
16843 次 |
最近记录: |