Sql VBA无法识别用于查询的未绑定文本框的值

Sql VBA无法识别用于查询的未绑定文本框的值,sql,vba,ms-access,Sql,Vba,Ms Access,我有两个未绑定的文本框,用户在其中设置查询的开始和结束日期。然后用户点击按钮生成报告 除了Access之外,所有功能都可以正常工作。弹出一个对话框,询问开始和停止日期,即使变量myStartDate和myEndDate具有正确的值 我怀疑我错过了一些简单的东西 Private Sub PrintReport_Click() Dim myForm As Form Dim myTextBox As TextBox Dim myStartDate As Date, myEndD

我有两个未绑定的文本框,用户在其中设置查询的开始和结束日期。然后用户点击按钮生成报告

除了Access之外,所有功能都可以正常工作。弹出一个对话框,询问开始和停止日期,即使变量myStartDate和myEndDate具有正确的值

我怀疑我错过了一些简单的东西

Private Sub PrintReport_Click()
    Dim myForm As Form
    Dim myTextBox As TextBox
    Dim myStartDate As Date, myEndDate As Date

    myStartDate = CDate(Forms![Data Entry - Ammonia and Alkalinity]![StartDate])
   myEndDate = CDate(Forms![Data Entry - Ammonia and Alkalinity]![EndDate])

   Dim whereString As String
   whereString = "LabDate Between myStartDate And myEndDate"
   DoCmd.OpenReport "Ammonia and Alkalinity Report", acViewPreview, , whereString

End Sub

您需要转义字符串才能使用这些变量

你想要的是:

whereString = "LabDate Between #" & myStartDate & "# AND #" & myEndDate & "#"
如果您(我也这么认为)已将日期格式应用于两个文本框,则不需要进行大部分转换,但必须将日期值的格式化字符串表达式传递给SQL代码:

Private Sub PrintReport_Click()

    Dim myForm As Form
    Dim myTextBox As TextBox
    Dim myStartDate As String
    Dim myEndDate As String
    Dim whereString As String

    myStartDate = Format(Forms![Data Entry - Ammonia and Alkalinity]![StartDate], "yyyy\/mm\/dd")
    myEndDate = Format(Forms![Data Entry - Ammonia and Alkalinity]![EndDate], "yyyy\/mm\/dd")

    whereString = "LabDate Between #" & myStartDate & "# And #" & myEndDate & "#"
    DoCmd.OpenReport "Ammonia and Alkalinity Report", acViewPreview, , whereString

End Sub
确定字符串的位置:-

whereString = "LabDate Between " & _
"#" & Format (myStartDate, "mm/dd/yyyy")  & " #" & _
 " And " & _
"#" & Format (myEndDate, "mm/dd/yyyy") & "#"

您没有在字符串中连接VBA变量。因此,该报告正在其范围内寻找未从VBA传递的
myStartDate
myEndDate
。感谢Gustav,@OpiesDad在您之前一点就得到了答案,但我感谢您的贡献。嗯,没那么简单。如果不按所示格式化,则查询将在非美国环境中失败。这对你来说可能不是一个问题,但这里有一个世界。没错,但我在提供日期的文本框上贴了一个日期掩码。谢谢你的帮助。如果你指的是输入掩码,那没有区别,文本框的格式也没有区别。当连接您必须修改的SQL代码时,它是原始代码中的两倍转换,不受控制地转换为文本,如图所示。在其中,字符串VBA请求使用mm/dd/yyyy日期格式,但(大多数情况下)不是相同的用户日期格式。