【问题标题】:Access Bookmark works with Access Backend but not SQL BackendAccess 书签适用于 Access 后端,但不适用于 SQL 后端
【发布时间】:2020-12-03 07:29:47
【问题描述】:

我最近将 Access 后端数据库升级到 SQL Server 后端和 Access 前端。大多数事情都在工作,但我遇到了表单上的书签问题。该表单显示 3 个日期列,我使用 VBA 转到其中一个列的第一个日期,该日期是今天或大于今天的打开事件。

这是仍在 Access 前端和后端数据库中工作的代码

Private Sub Form_Open(Cancel As Integer)
' Find the record that matches the control.
 
  Dim rst As DAO.Recordset
  Dim strCriteria As String
 
  strCriteria = "[PayPeriodPaidDate] >=Date()"
  Set rst = Me.RecordsetClone
  rst.FindFirst strCriteria
  Me.Bookmark = rst.Bookmark

Set rst = Nothing
End Sub

现在我已将其转换为 SQL Server Express,当表单打开时没有任何反应。它只是直接进入表单的第一条记录。任何帮助将不胜感激。

【问题讨论】:

  • 尝试在数字或文本字段而不是日期/时间字段上进行测试搜索。问题可能与日期的存储方式有关。
  • 双重、三重检查该列在链接表中是否显示为日期时间。如果不是,则要么将 sql server 上的数据类型更改为 datetime(从 datetime2),要么使用更新的 ODBC 驱动程序重新链接。如果将 sql 日期列修改为 datetime(从 datetime2 开始),请确保重新链接 Access 表,然后重试。

标签: sql ms-access sql-server-express bookmarks


【解决方案1】:

很可能,您已将日期字段转换为 DateTime2,ODBC 驱动程序会将其读取为文本。如果是这样,请将数据类型更改为 DateTime

试试看有没有发现:

strCriteria = "[PayPeriodPaidDate] >=Date()"
Set rst = Me.RecordsetClone
rst.FindFirst strCriteria
Debug.Print rst.NoMatch

【讨论】:

  • 非常同意这是一种可能性。默认情况下,迁移向导使用 datetime2。我建议用户在设计模式下检查链接表 - 确保日期/时间列被视为日期时间 - 如果错过了这个简单的问题,那么用户将连续几天发布问题并尝试修复错误 -当需要零代码更改时。
  • 您是正确的,因为日期设置为 DateTime2。当我更改并重新链接时,它最初不起作用。我不得不在 3 个日期字段的开头放置一个 CDate 格式,它终于可以正常工作了。非常感谢您的所有意见:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 2012-10-04
  • 2014-10-27
  • 2015-01-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多