首页 > 解决方案 > Access VBA 模块无法从表单获取数据

问题描述

好的,所以我的数据库最初是在 Access 2003 中设计的。在其中一台机器上,我使用的是 Access 2007 Runtime,因为这台机器没有任何风格的 Office。我正在尝试使用 Office 365 中最新版本的 Access 找到解决方案。我无法直接访问在 Access 2003 或 Access 2007 Runtime 上运行的实时版本。我无法更改其他机器上的版本,因为它们位于监狱中并且没有互联网。这在 2003 年运行没有问题,只有 2007 年是问题。由于我不在那里并且只有 365,我需要一个适用于所有版本的解决方案。

正在使用的功能位于单独的模块中,而不是实际形式。该表单设置为具有访问对象所需的模块。功能是为囚犯添加一个会话来访问图书馆。必须对此进行验证,以确保在所选时间和星期几有空间,以及个别会话限制。

我正在处理的问题是 2007 和 365 版本无法从列表框(时间作为字符串)和选项组(DayofWeek 作为数字)中获取选定的数据来完成 SQL 查询,而不是插入任何内容并且 SQL 失败声称我的代码中有一个额外的 ) 。然后使用 SQL 来创建 DAO 记录集。这是数据验证的一部分,以确保未达到限制。

我已经三次检查了发送到 CO_GetSessionDetail 的字符串,以确保我没有多余的 )。它认为它确实如此,因为字符串中 my = 的右侧没有任何内容。我检查了对表单的引用和未绑定的字段,它们都匹配。它编译没有问题。

2003 年没有问题...

代码贴在下面。

Function CO_NewCallout() As Boolean
...
    ' Get Session ID --------------------------------- '
    With Form_f_COs_IM
        iSession = CO_GetSessionDetail( _
            "SessionID", _
            "(((t_CO_Sess.DayOfWeek) = " & .CO_Add_DayOfWeek & ") AND " & _
            "((t_CO_Sess.tSession) = '" & .CO_Add_tSession & "'))" _
            )
        If iSession = 0 Then
            GoTo CO_NewCallout_Exit
        End If
    End With
...
End Function

Function CO_GetSessionDetail(stfield As String, stwhere As String) As Variant
'On Error Resume Next

' Variable Declerations -------------------------- '
    Dim db As Database
    Dim rst As DAO.Recordset
    Dim stSQL As String

' Set Variables ---------------------------------- '
    Set db = CurrentDb
    If stwhere <> "" Then
        stwhere = "WHERE " & stwhere
    End If
    stSQL = _
        "SELECT * " & _
        "FROM t_CO_Sess " & stwhere
    Set rst = db.OpenRecordset(stSQL, dbOpenDynaset)

' Get Session ID --------------------------------- '
    With rst
        If Not .EOF Then
            CO_GetSessionDetail = .Fields(stfield)
        Else
            CO_GetSessionDetail = 0
        End If
    End With

' Close Recordset t_CO_Sess ---------------------- '
    rst.Close
    Set rst = Nothing

End Function

Access 2003 - 我得到了 Session 的唯一 ID

Access 2007 和 365 - 无法完成功能

如果更多代码有帮助,请告诉我。

标签: vbams-access

解决方案


使用 Office 365 编译的 Access 应用程序将与 Access 2007 运行时或 Access 2003 不兼容。您必须在较早或等于您选择的运行时的版本上进行编译。不幸的是,很难获得 Access 2003 运行时,因为它不能免费下载。2007 运行时免费提供(这可能解释了您选择安装更高版本的原因)。

你的代码看起来不错,我假设它可以编译。尽管您的 2003 数据库应该与 Access 2007 运行时一起使用,但它并没有告诉我您需要解决的不兼容问题。

您最好的选择:将您的应用程序升级到 2007 或更高版本,确保它在新版本中运行,并在您的客户端机器上安装匹配的运行时。

参考:

Access 版本兼容性的一般讨论: Access 2016/2010 兼容性、Access 2016

关于获取 Access 2003 Runtime 的文章: MS Access Runtime 2003


推荐阅读