我是VBA编程新手。我设计了一个表格,里面有一个按钮。单击此按钮后,我想在具有一个日期列的表中插入记录。虚拟记录的数量应该等于当月的天数。如果月份是2016年5月,则记录将插入日期为2016年5月1日, 2/5/2016 ....... 2016年5月31日那样。
提前致谢。
Private Sub Command0_Click()
Dim strQuery As String
Dim currDateTime As Date
currDateTime = Now()
strQuery = "INSERT INTO tbl_ShipOrders (IDate ) VALUES (" & currDateTime & " )"
CurrentDb.Execute (strQuery)
End Sub
答案 0 :(得分:2)
以下表达式将为您提供一个整数,即当月的天数:
Day(DateSerial(Year(Date()), Month(Date())+1, 0))
这是下个月的第二天,也就是当月的最后一天。如果从12月搬到1月,这个表达式仍然有效。
将其存储在变量中,例如lastDay
,然后使用循环For x = 1 To lastDay
执行插入。
在循环中,这个表达式
DateSerial(Year(Date()), Month(Date()), x)
将为您提供日期2016年5月5日,2016年2月5日,2016年5月31日。
插入时,您还应该使用日期分隔符#围绕日期。将其与日期yyyy-mm-dd
的ISO格式相结合(这样几个月就不会被解释为几天):
VALUES (#" & Format(dtValue, "yyyy-mm-dd") & "#)"
其中dtValue是您刚使用之前的DateSerial表达式形成的日期。
答案 1 :(得分:1)
您可以创建一个包含每个可能日期数的表
[DayOfMonth]
dd
--
1
2
3
...
30
31
然后只使用这样的查询为当月的每一天生成一行
SELECT DateSerial(Year(Date()), Month(Date()), dd) AS IDate
FROM DayOfMonth
WHERE Month(DateSerial(Year(Date()), Month(Date()), dd)) = Month(Date())
将其用作INSERT查询
INSERT INTO tbl_ShipOrders (IDate)
SELECT DateSerial(Year(Date()), Month(Date()), dd) AS IDate
FROM DayOfMonth
WHERE Month(DateSerial(Year(Date()), Month(Date()), dd)) = Month(Date())
答案 2 :(得分:0)
请参阅下面的代码并阅读评论:
Option Explicit
Sub Command0_Click()
Dim startDate As Date
Dim endDate As Date
Dim curDate As Date
'get first day from current date
startDate = GetFirstDayInMonth(Date)
'get last day from startDate
endDate = GetLastDayInMonth(startDate)
'loop through the dates
For curDate = startDate To endDate
'here call the procedure to insert data
Next
End Sub
'function to return first date in the month
Function GetFirstDayInMonth(dCurDate As Date) As Date
GetFirstDayInMonth = DateSerial(Year(dCurDate), Month(dCurDate), 1)
End Function
'return last date in the month
Function GetLastDayInMonth(dCurDate As Date) As Date
GetLastDayInMonth = DateSerial(Year(dCurDate), Month(dCurDate) + 1, 1 - 1)
End Function
答案 3 :(得分:0)
这是一个花哨的查询,它将返回一个月的日期:
SELECT DISTINCT
10 * Abs([Deca].[id] Mod 10) + Abs([Uno].[id] Mod 10) AS Id,
DateAdd("d",[Id], DateSerial(Year(DateOfMonth), Month(DateOfMonth), 1)) AS [Date]
FROM
msysobjects AS Uno,
msysobjects AS Deca
WHERE
(10*Abs([Deca].[id] Mod 10) + Abs([Uno].[id] Mod 10)) < Day(DateSerial(Year(DateOfMonth), Month(DateOfMonth)+1, 0))
那就是说,我会写一个循环,使用VBA将记录添加到记录集,而不是你的慢速SQL调用。