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