VB.net Msaccess检索数据,其中DATE比今天的日期差

时间:2016-10-09 07:01:55

标签: vb.net ms-access

我正在创建一个项目,以便在下周就健身房管理系统进行辩护。问题是,我不能通知用户是否有过期的促销。我使用了这些查询,但没有显示正确的数据

If Not con.State = ConnectionState.Open Then
  con.Open()
End If

Try
  Dim da As New OleDb.OleDbDataAdapter("SELECT MemberID,Nickname,PromoStatus,PromoStart,PromoEnd FROM Members WHERE PromoEnd < now() AND PromoStatus = 'Active'", con)
  Dim dt As New DataTable
  da.Fill(dt)
  MembersDataGridView.DataSource = dt
  con.Close()
Catch ex As Exception
  MsgBox(ex.Message)
End Try

我尝试了这些代码并且没有显示PromoEnd比今天少的数据/ PromoEnd落后于今天的日期。我也试过了

SELECT MemberID,Nickname,PromoStatus,PromoStart,PromoEnd FROM Members WHERE PromoEnd < '"& dateandtime.today.date &"' AND PromoStatus = 'Active'", con

仍然没有检索到正确的数据。谢谢你的帮助和任何建议。 ps:短期格式是我使用的日期。 (0/0/0000)

3 个答案:

答案 0 :(得分:0)

如果您没有提供样本数据集或预期结果,则很难理解您的要求。但是,now()不是有效的SQL,在MS Access中,查询中的日期由#字符分隔。试试这样的事(航空代码):

Dim da As New OleDb.OleDbDataAdapter(" SELECT MemberID,Nickname,PromoStatus,PromoStart,PromoEnd"
                                   + " FROM Members"
                                   + " WHERE PromoEnd < #" + DateTime.Now.ToString("m/d/yyyy") + "#"
                                   + " AND PromoStatus = 'Active'", con)

答案 1 :(得分:0)

  

我应该在msaccess中将其更改为dateandtime吗?

是,始终将日期和时间存储为数据类型DateTime。

然后您的SQL可以简化为:

"SELECT MemberID, Nickname, PromoStatus, PromoStart, PromoEnd FROM Members WHERE PromoEnd < Date() AND PromoStatus = 'Active'"

答案 2 :(得分:0)

    Try
        Dim da As New OleDb.OleDbDataAdapter("SELECT MemberID,Nickname,PromoStatus,PromoStart,PromoEnd FROM Members WHERE PromoEnd < now() AND PromoStatus = 'Active'", con)
        Dim dt As New DataTable
        da.Fill(dt)
        MembersDataGridView.DataSource = dt
        con.Close()
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try

我的系统现在正如它应该的那样工作。我做了什么先生gustav和mjh说。