如何转义 Access Jet SQL 中的所有特殊字符?
我正在尝试使用 DDL 语句更改密码,例如:
CurrentProject.Connection.Execute "ALTER USER barney PASSWORD "[]!@#$%^ oldpassword"
是的,这是一个令人讨厌的密码,但有人尝试过类似的操作。请注意,密码的开头引号不是此处 sql 语法的一部分。我需要类似 mysql_real_escape_string()
但针对 VBA 的东西。有什么提示吗?
I'm trying to change a password with a DDL statement like:
CurrentProject.Connection.Execute "ALTER USER barney PASSWORD "[]!@#$%^ oldpassword"
Yes, that's a nasty password, but someone tried something like that. Notice the beginning quote of the password is not part of the sql syntax here. I need something like mysql_real_escape_string()
but for VBA. Any hints?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您似乎偶然发现了一些事情:您无法使用 SQL DDL 创建包含任何这些字符的(可用)密码(注意维基百科认为这是 SQL DCL)。
下面是一些重现测试场景的代码:
文件夹)
工作组
使用字母数字的密码和 PID
整个字符
用户
用户的凭据
表
发布的代码工作正常。但是,在这两个位置(创建用户时和打开测试连接时)编辑密码以添加非字母字符(例如引号)会在其中一个位置引发错误。
由于无法转义“特殊”字符,因此似乎无法使用 SQL DDL/DCL 来完成此操作,我认为这意味着根本无法使用 ADO 来完成此操作。
那么,有人有替代方案,例如 DAO 吗?
You seem to have hit upon something: you cannot create a (usable) password containing any of those characters using SQL DDL (note Wikipedia considers this to be SQL DCL).
Below is some code to reproduce a test scenario:
folder)
workgroup
password and PID using alphanumeric
characters throughout
user
user's credentials
table
The code as posted works fine. However, editing the password in both places (when the user is created and when the test connection is opened) to add a non-alpha character (e.g. a quote) raises an error in one of those places.
With no means to escape 'special' characters then it seems this can't be done using SQL DDL/DCL, which I think means it cannot be done using ADO at all.
So, anyone got an alternative e.g. DAO?
您应该能够使用 Chr(34) 连接字符串:
这是执行此类操作的常用方法。不过,这可能不起作用,因为用户级安全用户界面可能不接受引号(我还没有尝试过)。
You should be able to concatenate in a string using Chr(34):
That's the usual way to do this kind of thing. That may not do the trick, though, as the user-level security UI may not accept quotes (I haven't tried it).