保存到数据库时颠倒了日期和月份
day and month reversed when saving to database
我在表单上使用 DatePicker 和文本字段供用户 select 日期,默认情况下它在文本字段中显示为 dd/mm/yyyy。因此,当我编写代码时,我使用这种格式来保持一致。但是当我保存像 03/10/2015(这是 10 月的第 3 天)这样的日期时,它被保存为 3 月 10 日。鉴于下面的代码,我需要更改什么才能正确保存到数据库?
Private Sub cmdSave_Click()
...
Dim StartDate As String
Dim EndDate As String
Dim SDate As Date
Dim EDate As Date
...
StartDate = Me.txtStartDate.Value & " " & Me.txtStartTime.Value
EndDate = Me.txtEndDate.Value & " " & Me.txtEndTime.Value
SDate = CDate(Format(StartDate, "dd\/mm\/yyyy hh:mm"))
EDate = CDate(Format(EndDate, "dd\/mm\/yyyy hh:mm"))
If Me.txtOtherDetails.Value = "" Then
query1 = "INSERT INTO Shifts (Schedule_ID,Start_Date_Time,End_Date_Time,Location)" & _
" VALUES (" & ScheduleID & ",#" & SDate & "#,#" & EDate & "#," & LocationID & ")"
Else
query1 = "INSERT INTO Shifts (Schedule_ID,Start_Date_Time,End_Date_Time,Location,Other_Details)" & _
" VALUES (" & ScheduleID & ",#" & SDate & "#,#" & EDate & "#," & LocationID & ",'" & Me.txtOtherDetails.Value & "')"
End If
'Debug.Print query1
ShiftID = ExecuteInsert(query1)
End Sub
您应该将查询中的日期格式更改为 mm/dd/yyyy
,因为这是 MS Access 查询中使用的 format。
所以你应该改变:
SDate = CDate(Format(StartDate, "mm\/dd\/yyyy hh:mm"))
EDate = CDate(Format(EndDate, "mm\/dd\/yyyy hh:mm"))
这已经完全搞混了。
如果您的文本框应用了 date/time 格式,它们将包含日期值的有效日期表达式,并且这些必须格式化为有效的 string 表达式才能与 SQL 代码连接。
此外,将 date/time 值 按原样 与 SQL 连接将最初使用默认 [=25] 强制将值强制转换为字符串=] 1 日到 12 日在非美国环境中将失败的设置。
因此,这就是您所需要的:
Private Sub cmdSave_Click()
...
Dim StartDate As String
Dim EndDate As String
...
StartDate = Format(Me!txtStartDate.Value & " " & Me!txtStartTime.Value, "yyyy\/mm\/dd hh\:nn")
EndDate = Format(Me!txtEndDate.Value & " " & Me!txtEndTime.Value, "yyyy\/mm\/dd hh\:nn")
If Me!txtOtherDetails.Value = "" Then
query1 = "INSERT INTO Shifts (Schedule_ID,Start_Date_Time,End_Date_Time,Location)" & _
" VALUES (" & ScheduleID & ",#" & StartDate & "#,#" & EndDate & "#," & LocationID & ")"
Else
query1 = "INSERT INTO Shifts (Schedule_ID,Start_Date_Time,End_Date_Time,Location,Other_Details)" & _
" VALUES (" & ScheduleID & ",#" & StartDate & "#,#" & EndDate & "#," & LocationID & ",'" & Me!txtOtherDetails.Value & "')"
End If
'Debug.Print query1
ShiftID = ExecuteInsert(query1)
End Sub
我在表单上使用 DatePicker 和文本字段供用户 select 日期,默认情况下它在文本字段中显示为 dd/mm/yyyy。因此,当我编写代码时,我使用这种格式来保持一致。但是当我保存像 03/10/2015(这是 10 月的第 3 天)这样的日期时,它被保存为 3 月 10 日。鉴于下面的代码,我需要更改什么才能正确保存到数据库?
Private Sub cmdSave_Click()
...
Dim StartDate As String
Dim EndDate As String
Dim SDate As Date
Dim EDate As Date
...
StartDate = Me.txtStartDate.Value & " " & Me.txtStartTime.Value
EndDate = Me.txtEndDate.Value & " " & Me.txtEndTime.Value
SDate = CDate(Format(StartDate, "dd\/mm\/yyyy hh:mm"))
EDate = CDate(Format(EndDate, "dd\/mm\/yyyy hh:mm"))
If Me.txtOtherDetails.Value = "" Then
query1 = "INSERT INTO Shifts (Schedule_ID,Start_Date_Time,End_Date_Time,Location)" & _
" VALUES (" & ScheduleID & ",#" & SDate & "#,#" & EDate & "#," & LocationID & ")"
Else
query1 = "INSERT INTO Shifts (Schedule_ID,Start_Date_Time,End_Date_Time,Location,Other_Details)" & _
" VALUES (" & ScheduleID & ",#" & SDate & "#,#" & EDate & "#," & LocationID & ",'" & Me.txtOtherDetails.Value & "')"
End If
'Debug.Print query1
ShiftID = ExecuteInsert(query1)
End Sub
您应该将查询中的日期格式更改为 mm/dd/yyyy
,因为这是 MS Access 查询中使用的 format。
所以你应该改变:
SDate = CDate(Format(StartDate, "mm\/dd\/yyyy hh:mm"))
EDate = CDate(Format(EndDate, "mm\/dd\/yyyy hh:mm"))
这已经完全搞混了。
如果您的文本框应用了 date/time 格式,它们将包含日期值的有效日期表达式,并且这些必须格式化为有效的 string 表达式才能与 SQL 代码连接。
此外,将 date/time 值 按原样 与 SQL 连接将最初使用默认 [=25] 强制将值强制转换为字符串=] 1 日到 12 日在非美国环境中将失败的设置。
因此,这就是您所需要的:
Private Sub cmdSave_Click()
...
Dim StartDate As String
Dim EndDate As String
...
StartDate = Format(Me!txtStartDate.Value & " " & Me!txtStartTime.Value, "yyyy\/mm\/dd hh\:nn")
EndDate = Format(Me!txtEndDate.Value & " " & Me!txtEndTime.Value, "yyyy\/mm\/dd hh\:nn")
If Me!txtOtherDetails.Value = "" Then
query1 = "INSERT INTO Shifts (Schedule_ID,Start_Date_Time,End_Date_Time,Location)" & _
" VALUES (" & ScheduleID & ",#" & StartDate & "#,#" & EndDate & "#," & LocationID & ")"
Else
query1 = "INSERT INTO Shifts (Schedule_ID,Start_Date_Time,End_Date_Time,Location,Other_Details)" & _
" VALUES (" & ScheduleID & ",#" & StartDate & "#,#" & EndDate & "#," & LocationID & ",'" & Me!txtOtherDetails.Value & "')"
End If
'Debug.Print query1
ShiftID = ExecuteInsert(query1)
End Sub