Ms access 保存到数据库时日期和月份颠倒

Ms access 保存到数据库时日期和月份颠倒,ms-access,vba,ms-access-2010,dao,Ms Access,Vba,Ms Access 2010,Dao,我在表单上使用DatePicker和textfield供用户选择日期,默认情况下,它在textfield中显示为dd/mm/yyyy。因此,当我编写代码时,我使用这种格式来保持一致性。但当我保存一个日期,比如2015年10月3日(10月3日),它会被保存为3月10日。给定以下代码,我需要更改什么才能正确保存到数据库 Private Sub cmdSave_Click() ... Dim StartDate As String Dim EndDate As String Dim S

我在表单上使用DatePicker和textfield供用户选择日期,默认情况下,它在textfield中显示为dd/mm/yyyy。因此,当我编写代码时,我使用这种格式来保持一致性。但当我保存一个日期,比如2015年10月3日(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查询中使用的格式。 所以你应该改变:

SDate = CDate(Format(StartDate, "mm\/dd\/yyyy hh:mm"))
EDate = CDate(Format(EndDate, "mm\/dd\/yyyy hh:mm"))

这件事完全搞混了

如果您的文本框应用了日期/时间格式,则它们将保存日期值的有效日期表达式,并且必须将其格式化为有效的字符串表达式,以便与SQL代码连接

此外,将日期/时间值按原样与SQL连接将首先强制使用默认Windows设置将该值转换为字符串,这将在非美国环境中失败,日期为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