vba - 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 - 无法完成功能
如果更多代码有帮助,请告诉我。
解决方案
使用 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
推荐阅读
- c++ - 结构/方法不起作用
- java - 创建通用对象的缓存
- html - 如何获得彩色输入标签?
- amazon-web-services - 使用 CloudWatch 安排 API Gateway 请求?
- python - 仅 1 个标量的张量板摘要标量错误
- node.js - 要使用新的解析器,请将选项 { useNewUrlParser: true } 传递给 MongoClient.connect
- amazon-web-services - aws 圣杯忽略代理配置
- python - 如何在 Dict{key:List} 中找到最小值?
- javascript - jQuery未定义的ajax函数
- haskell - 在使用 Haskell 实现 Eratosthenes 筛法中,为什么 3,5,7.. 的倍数没有从列表中删除?