我有一个记录集,在我的Microsoft Access实例中工作正常,但是当我在另一台计算机上尝试该记录集时,它失败了。
我的Access应用程序的两个版本中都已经有很多记录集正在运行。两者都在Access 2010上,但是它们可能具有不同的驱动程序。
代码如下:
Set rsWeek = CurrentDb.OpenRecordset("SELECT * FROM [Timecards]
WHERE employeeID = " & empID & " AND workDate BETWEEN #" & Me.Text23
& "# AND #" & Me.Text25 & "#", dbOpenSnapshot)
我使用了一个MsgBox来确认我所有的变量工作正常。该代码可在我的第一台计算机上按计划工作,但是第二个代码只是失败,并出现一般的“单击时”错误。
这似乎是BETWEEN部分的问题,因为这是我唯一一次使用BETWEEN。
第二台计算机是否需要某种SQL驱动程序才能运行带有BETWEEN的查询?
答案 0 :(得分:2)
您必须将日期值设置为文本表示形式:
Set rsWeek = CurrentDb.OpenRecordset("SELECT * FROM [Timecards]
WHERE employeeID = " & empID & " AND workDate BETWEEN #" & Format(Me!Text23.Value, "yyyy\/mm\/dd") & "# AND #" & Format(Me!Text25.Value, "yyyy\/mm\/dd") & "#", dbOpenSnapshot)
编辑:
如果您遵循了Albert的建议,但仍然失败,请尝试:
Set rsWeek = CurrentDb.OpenRecordset("SELECT * FROM [Timecards]
WHERE employeeID = " & empID & " AND workDate BETWEEN #" & Format(DateValue(Me!Text23.Value), "yyyy\/mm\/dd") & "# AND #" & Format(DateValue(Me!Text25.Value), "yyyy\/mm\/dd") & "#", dbOpenSnapshot)
或者,如果文本框可以为空:
Set rsWeek = CurrentDb.OpenRecordset("SELECT * FROM [Timecards]
WHERE employeeID = " & empID & " AND workDate BETWEEN #" & Format(Nz(Me!Text23.Value, Date()), "yyyy\/mm\/dd") & "# AND #" & Format(Nz(Me!Text25.Value, Date()), "yyyy\/mm\/dd") & "#", dbOpenSnapshot)
答案 1 :(得分:1)
如@ErikA在评论中所建议的那样,使用参数而不是在SQL语句中并置表单值将避免由于区域差异而引起的所有问题,并且还可以保护代码免受SQL injection的影响。
根据当前代码的内容考虑以下示例:
With CurrentDb.CreateQueryDef _
("", "select * from timecards t where t.employeeid = @id and t.workdate between @from and @to")
.Parameters("@id") = empID
.Parameters("@from") = DateValue(Me.Text23)
.Parameters("@to") = DateValue(Me.Text25)
With .OpenRecordset(dbOpenSnapshot)
If Not .EOF Then
.MoveFirst
Do Until .EOF
Debug.Print .Fields(0)
.MoveNext
Loop
End If
.Close
End With
End With
上面只是显示记录集中第一个字段的值,只是为了演示该方法。
答案 2 :(得分:0)
请尝试这种方式,根据我的经验,效果更好。
Set rs = CurrentDb.OpenRecordset("query string", dbOpenDynaset, dbSeeChanges)
答案 3 :(得分:0)
ComputerVersteher通过指向to this issue指向了正确的方向。我尝试了“压缩和修复数据库”,这在第二台计算机上引发了错误。事实证明,我的第二台计算机“ Microsoft Windows公共控件6.0(SP6)”上缺少参考。之后,我执行了“压缩和修复”功能,然后再次对其进行了测试,然后它开始工作。我不能说我知道为什么它仅在一个查询中崩溃,但是问题现在消失了。