在 Microsoft Access 2013 中,如何访问当前 ODBC 连接的用户名?

Posted

技术标签:

【中文标题】在 Microsoft Access 2013 中,如何访问当前 ODBC 连接的用户名?【英文标题】:In Microsoft Access 2013, how do I access the username of the current ODBC connection? 【发布时间】:2013-08-30 14:41:52 【问题描述】:

我正在 Microsoft Access 2013 中构建一个使用 mysql 作为后端的系统。我想要一个表单,其中当前登录到 MySQL 数据库的用户的用户名是输入字段的默认值。我尝试使用 CurrentUser() 函数来执行此操作,但这似乎总是返回“Admin”。

所以我想这里真的有两个问题:

    有没有办法从 Access 2013 中访问登录到 MySQL 服务器的用户的用户名?

    如果不是,如何控制 CurrentUser() 的用户名?在这个系统中,我能够区分系统的不同用户并且不是每个人都简单地显示为“管理员”,这一点非常重要。

可能有更好的方法来完成我的要求,我什至不知道要问的正确问题,如果是这种情况,请告诉我。

谢谢!

【问题讨论】:

您为什么要专门寻找 ODBC 连接的用户名?如果只想知道windows用户名,可以试试msgbox (Environ$("Username")) 我在想我会为我的用户设置不同的用户名/密码来连接到 MySQL 服务器,并根据他们的用户名和相应的权限自定义 Access DB。基本上,我想弄清楚某种形式的用户管理,它不依赖于 SharePoint,我正在尝试设置它,但由于缺乏经验和资源,它被证明是极其困难的。 【参考方案1】:

在使用 ODBC 连接到 MySQL 的 Access 中创建一个“直通”查询,并询问 MySQL 当前用户的名称。

SELECT CURRENT_USER();

该查询将在服务器上按原样执行(意味着不涉及 Access db 引擎),然后查询的结果在 Access 中可用。

VBA CurrentUser() 函数检索 Access 安全帐户名称。除非您使用 ULS(用户级安全),它仅适用于较旧的 MDB 数据库格式,否则安全帐户将始终为 “Admin”。所以它通常不是很有用,而且对于你在这里需要的东西绝对没有用处。

【讨论】:

非常感谢!我觉得我已经很接近了,并且我像您描述的那样创建了传递查询。但是,每次我运行它时,它都会提示我选择数据源,然后我必须输入我的用户名和密码。当我这样做时,它只返回我当时用来登录的用户名,但我真正想做的是让它返回最初用于启动与链接表的连接的用户名。有没有办法做到这一点?我希望这是有道理的。 在设计视图中打开传递,然后打开查询的属性表。检查“ODBC Connect Str”属性,并将其与您的 ODBC 链接表进行比较。如果它们相同,我不明白为什么会反复要求您提供该信息。 越来越近了。 ODBC Connect Str 与我的链接表中列出的完全不同,因此我对其进行了更新以将所有内容都包含在端口信息中,现在它不再提示我输入连接信息。我的直通查询称为 CurrentUser,SQL 是“SELECT CURRENT_USER() AS Expr1;”,在我的表单中,我将默认值设置为“=[CurrentUser]![Expr1]”,但是当我尝试添加一条新记录,它只是显示为#Error。知道我现在做错了什么吗?非常感谢您迄今为止的帮助! 查看DLookup(),或许=DLookup("Expr1", "the name you gave your pass thru query") DLookup 对我也不起作用。我还尝试创建一个本地查询,该查询从传递查询中获取值,然后将其引用为默认值,但失败了。我是否必须以某种方式指定应将哪一行视为默认值?如果我将文本框更改为组合框并使用传递查询作为行源,这些值就会出现。我可以取消绑定该组合框,创建一个绑定到所需字段的新文本框,并通过执行默认值“=[combobox].ItemData[0]”使其获得默认值,但我无法弄清楚如何直接做到这一点。

以上是关于在 Microsoft Access 2013 中,如何访问当前 ODBC 连接的用户名?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 SQL 在 Microsoft Access 2013 中创建查找字段?

Microsoft Access 2013 数据库中的用户管理

使用传递查询中的数据更新 Microsoft Access 2013 表

将 VB.NET 代码从 Visual Studio Express 复制到 Microsoft Access 2013

在 Microsoft Access 2013 中的数据表子窗体上单击一行时运行 VB

Microsoft Access Runtime 2013 - 从 Excel 导入