【问题标题】:SQL string in access VBA not behaving as expected访问 VBA 中的 SQL 字符串未按预期运行
【发布时间】:2020-12-02 22:51:46
【问题描述】:

我有一点 VBA 的访问权限,我这辈子都不知道哪里出了问题。

首先,这是有问题的代码部分,我将在下面解释我想要什么以及它在做什么。

        loguser = Environ$("USERNAME")
        sqlstr = "INSERT INTO bypass_logins ([timestamp], [selected_user], [logged_in_user]) VALUES (" & Format(Now(), "dd/MM/yyyy") & "," & gstrUser & "," & loguser & ")"
        Debug.Print sqlstr
        'runs sql string above to write back to db
        DoCmd.SetWarnings False
        DoCmd.RunSQL sqlstr
        DoCmd.SetWarnings True

第一行旨在捕获登录到运行代码的 PC 的用户名,它会执行此操作,并通过 debug.print 对其进行监控来确认。 sqlstr 的意思是写一个日期,从这个代码前面的表单上的一个框中选择的用户名(gstrUser)和上面的用户名到数据库表“绕过登录”中的各个字段。

但是,当计算此字符串时,我看到的是一个弹出框,其中 loguser 返回的用户名作为唯一文本,然后是一个带有确定按钮的输入框。 无论我在此弹出窗口的输入字段中输入什么,都将输入到 sqlstr 中,然后由 DoCmd.RunSQL sqlstr 处理并写回数据库。如果我将框留空并点击确定,则此字段中不会写入任何内容,字符串变为 INSERT INTO bypass_logins ([timestamp], [selected_user], [logged_in_user]) VALUES (13/08/2020,43,)(例如)

不太清楚这里发生了什么,或者我哪里出错了,但我想可能是字符串创建中使用的特殊字符来返回变量?

提前致谢

【问题讨论】:

    标签: sql vba ms-access ms-access-2016


    【解决方案1】:

    你不能没有文本和日期时间的分隔符,你的日期格式必须调整,所以试试:

    sqlstr = "INSERT INTO bypass_logins ([timestamp], [selected_user], [logged_in_user]) VALUES (#" & Format(Date(), "yyyy\/mm\/dd") & "#,'" & gstrUser & "','" & loguser & "')"
        D
    

    【讨论】:

    • 谢谢,已经解决了。奇怪的是 gstrUser 工作正常,但 loguser 却不行。 msaccess 的乐趣
    猜你喜欢
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 2019-12-23
    • 1970-01-01
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多