Access VBA模块无法从表单

时间:2019-02-04 13:09:32

标签: access-vba ms-access-2007 ms-access-2003 ms-access-2016

好,所以我的数据库最初是在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-我获得了会话的唯一ID

Access 2007和365-无法完成功能

让我知道更多代码是否有帮助。

1 个答案:

答案 0 :(得分:0)

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

您的代码看起来不错,我认为它可以编译。尽管您的2003数据库应该可以与Access 2007运行时一起使用,但是它却对我说您需要解决不兼容的问题。< / p>

您最好的选择:将您的应用升级到2007或更高版本,确保它可以在新版本中运行,然后在您的客户端计算机上安装匹配的运行时。

参考文献:

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

有关获取Access 2003运行时的文章: MS Access Runtime 2003