链接表为只读



我有一个关于住房项目的2003年(mdb(数据库,我每季度为我们当地的规划办公室更新一次。我们办公室的其他人可以从看到相同的数据中受益。我认为最简单的方法是给他们一个单独的访问数据库(无论是版本 2003 还是 2007(,从它链接到我更新的源表。但是,为了防止它们在查看时无意中更改源数据,我想将链接表设置为只读。

有关如何限制 Access 2007 链接表的访问权限的任何提示?

这个

答案已经很晚了,但这是MS-Access开发人员偶尔需要做的事情......

。这很晦涩难懂,因为我们将使用带有内部定义的连接字符串的只读查询,而"查询属性"窗口并没有完全按照您的期望执行。

实际上,我认为该窗口也不会执行实现"源连接字符串"属性的Microsoft开发人员期望它执行的操作。

但是,无论是否晦涩难懂,下面是如何执行类似于另一个 MS-Access 数据库中的只读链接表的操作:

  1. 首先,在本地表上创建新查询。什么都无所谓表或哪些字段,无论如何您都会丢弃 SQL。
  2. 右键单击查询窗口的标题栏,然后选择">SQL"查看'
  3. 将此 SQL 粘贴到其中,覆盖那里的任何内容:

选择*  从 tbl客户    在 " [ MS 访问;PWD=WTF_En_Clair;DATABASE=\\MyServer\MyShare$\Subfolder\MyDB.accdb];
显然,您使用的是自己的数据库地址和表名;您可能不需要密码子句。

不要错过连接字符串前面的那些双引号:当你粘贴连接字符串时,内置属性对话框不会为你放置它们,你确实需要它们。

您尚未完成:它仍然是读写的:

  1. 右键单击查询窗口标题栏,然后选择">设计"查看'
  2. 右键单击上部窗格的背景区域 - MDI窗口显示表格 - 然后选择"属性...">
  3. 您可能会看到一个包含两个字段的"属性表"弹出窗口:"别名"和 Source' - 这是表的属性表,您需要查询的属性表...
  4. 。因此,再次在上部窗格的MDI背景中单击鼠标左键以获取查询的完整属性表。
  5. 将"记录集类型"属性设置为"快照">
  6. 右键单击查询窗口标题栏,然后点击"保存"。
  7. 查询窗口已完成。不要在这里做任何其他事情,只需关闭窗口即可。.

您可以将查询重命名为表名,也可以不重命名:它仍然可以在任何查询中工作,就好像它是一个表一样,如果你给它一个名称来明确表示这实际上不是一个表,你可能会省去一些混乱。这在任何需要 DAO TableDef 对象的代码中都很重要,其中包括为您重新链接外部表的任何代码。

你将在"源连接字符串"下的查询属性窗口中注意到连接字符串(纯文本密码和全部(。说真的,不要编辑它:如果幸运的话,它只会用一对单引号替换 SQL 中的两个双引号,查询仍然有效。但是,如果粘贴新的连接字符串,则可能会丢失这些引号,这会破坏查询;并且没有任何错误消息和帮助页面会告诉您在原始SQL中需要这些魔术引号。

我怀疑在对外部对象的查询中还有其他未记录的"陷阱"陷阱:如果您将此黑客传递给您的同事,我强烈建议您传递警告">您已完成查询窗口。不要在这里做任何其他事情,因为这种类型的陷阱可能会浪费您和他们的时间。

另外:请务必记录您所做的工作:大多数用于重新连接链接表的工具都不会使用外部源获取查询,这是一个等待咬任何试图在"DEV"、"测试"和"生产"数据库之间跳跃的人的错误。

您可以将数据库文件存储在其他用户具有只读权限的共享文件夹中。 然后,他们应该仍然能够查看(但不能更改(链接表中的数据。

如果该建议不令人满意,则可以使用查询将其限制为只读访问权限。 在提供给用户的数据库中,不要包含指向其他数据库中的源表的链接。 而是给他们一个查询,在没有链接的情况下查找源表......以FROM TableName IN '[path to db file]'的形式

下面是一个经过测试的示例:

SELECT
    u.UserID,
    u.FName,
    u.LName,
    u.AccessLevelID
FROM tblUser AS u IN 'C:shareAccessloginexample.mdb';

但是,该查询结果仍然可以编辑。 您可以使用字段表达式代替实际字段值将列值设置为只读。

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:shareAccessloginexample.mdb';

这些是使值只读的简单转换。 但您可以根据需要使用其他技术。 例如,如果表包含"日期/时间"字段,则可以使用 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

注意 我使用这些函数使用了与字段名称不同的别名。 在某些情况下,当您尝试将字段名称重新用作别名时,Access 将抱怨"递归别名"。 但是,只需在查询设计器中测试别名选择,即可快速找出可接受的别名。

相关内容

  • 没有找到相关文章

最新更新