【问题标题】:Compare dates in VBA Access在 VBA Access 中比较日期
【发布时间】:2020-09-09 15:07:00
【问题描述】:

我有一个数据库,其中包含一个表,其中包含当前的面试预约 tblSchedule,其中包含以下列 RNName、Apttime、Aptdate、PtID。

我正在尝试不允许重复约会。

我想在 VBA 中运行一个 sql 代码,所以当在表单上输入新的约会日期时,我可以检查日期是否已经在表中,如果它在表中,它将限制时间可供选择。

我在进行日期比较时遇到问题。它适用于 Access 中保存的 sql 查询,但是当我在 VBA 中尝试相同的查询时,我没有得到任何结果。

VBA 代码

Private Sub Apt_date_AfterUpdate()
Dim check As DAO.Recordset
Dim time_sql As String
Dim count_sql As Long
Dim sql_1 As String
Dim Aptday As Date
Aptday = DateValue(Forms("booking_clerk").Apt_date.Value)

Forms("booking_clerk").Apt_time.RowSourceType = "Table/Query"
Forms("booking_clerk").Apt_time.RowSource = ""

Set check = CurrentDb.OpenRecordset("Select DateValue(tblSchedule.Aptdate) From tblSchedule WHERE DateValue(tblSchedule.Aptdate)" & " = (" & Aptday & "); ")

count_sql = check.RecordCount

MsgBox (Str(count_sql))

If check.RecordCount = 0 Then
    time_sql = "SELECT Field1 FROM [Pam Availability];"
Else: time_sql = ("SELECT Field1 FROM [Pam Availability]WHERE [Pam Availability].Field1 Not In  (Select tblSchedule.Apttime from tblSchedule WHERE DateValue(tblSchedule.Aptdate) = (" & Aptday & "));")

End If

Forms("booking_clerk").Apt_time.RowSource = time_sql

End Sub  

保存的sql代码。我在这里输入日期作为参数:

SELECT DateValue(tblSchedule.Aptdate) AS Expr1
FROM tblSchedule
WHERE DateValue(tblSchedule.Aptdate) = DateValue([new_date]);

【问题讨论】:

    标签: sql vba ms-access


    【解决方案1】:

    您必须使用正确的语法在 Access SQL 中连接日期值:

    Set check = CurrentDb.OpenRecordset("Select DateValue(tblSchedule.Aptdate) From tblSchedule WHERE DateValue(tblSchedule.Aptdate) = #" & Format(Aptday, "yyyy\/mm\/dd") & "#")
    

    【讨论】:

      【解决方案2】:

      虽然 Gustav 确实指出了您的错误,但您做的工作太多,无法尝试解决一个简单的查找问题。我尽量避免使用记录集,但这可能是由于我多年来的教学/培训方式。无论哪种方式,质疑为什么要以自己的方式处理某项任务是一个好习惯。记录集对这种情况有什么好处?我的意思是说实话,它只是创造了比它价值更多的工作。

      不管怎样,我现在就离开我的肥皂盒。

      Private Sub Apt_date_AfterUpdate()
          Dim time_sql As String
      
          Forms("booking_clerk").Apt_time.RowSourceType = "Table/Query"
          Forms("booking_clerk").Apt_time.RowSource = ""
          
          IF Dcount("DateValue(tblSchedule.Aptdate)", "tblSchedule", "DateValue(tblSchedule.Aptdate)=#" & DateValue(Forms("booking_clerk").Apt_date.Value) & "#;") = 0 Then
              time_sql = "SELECT Field1 FROM [Pam Availability];" 
          Else
              time_sql = "SELECT Field1 "
              time_sql = time_sql & "FROM [Pam Availability] "
              time_sql = time_sql & "WHERE [Pam Availability].Field1 "
              time_sql = time_sql & "Not In  (Select tblSchedule.Apttime from tblSchedule "
              time_sql = time_sql & "WHERE DateValue(tblSchedule.Aptdate) = #" & DateValue(Forms("booking_clerk").Apt_date.Value) & "#); "    
          End if
          
          Forms("booking_clerk").Apt_time.RowSource = time_sql    
          
      End Sub  
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-12-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多