【问题标题】:US date format stuck on me on ms access美国日期格式在 ms 访问时卡在我身上
【发布时间】:2014-12-18 07:44:39
【问题描述】:

我使用以下代码添加、编辑表格中的数据。一切正常,但有一个字段是日期格式。我在带有日期选择窗口的表单中选择日期,但是当它导入表格时,它会将日期格式从英国日期格式更改为美国。

例如,我在表单的日期提取窗口中选择 01/11/2014 (1-nov-2014),当我将记录添加到表中时,(我也可以在子表单中看到)它显示 @987654322 @(2014 年 1 月 11 日)。当我用相同的表格编辑相同的记录时,它仍然显示11/01/2014。所以基本上它改变了日期和月份。

我尝试输入29/11/2014,然后它没有交换日期和月份。我检查了控制面板中的区域设置,它显示UK,我尝试在我的子表单中制作格式,我将mm-dd-yyyy 格式添加到sql,但它们都没有帮助。

知道如何设置吗?

感谢您的帮助

Option Compare Database

Private Sub cmdAdd_Click()
If Me.txtName.Tag & "" = "" Then
        CurrentDb.Execute "INSERT INTO [import]([product name], [QtyImport], [ImportDate])" & _
        " VALUES('" & Me.txtName & "'," & Me.txtOrderedQty & ",#" & Me.txtDate & "#)"

    Else
        CurrentDb.Execute "UPDATE import " & _
        " SET [product name] = '" & Me.txtName & "'" & _
        ", [QtyImport] = " & Me.txtOrderedQty & "" & _
        ", [ImportDate] = #" & Me.txtDate & "#" & _
        " WHERE [product name] = '" & Me.txtName.Tag & "'"
    End If

    cmdClear_Click
    importSubform.Form.Requery
End Sub

Private Sub cmdClear_Click()
    Me.txtName = ""
    Me.txtOrderedQty = ""
    Me.txtDate = ""

    Me.txtName.SetFocus
    Me.CmdEdit.Enabled = True
    Me.CmdAdd.Caption = "Add"
    Me.txtName.Tag = ""
End Sub

Private Sub CmdEdit_Click()
  If Not (Me.importSubform.Form.Recordset.EOF And Me.importSubform.Form.Recordset.BOF) Then
        With Me.importSubform.Form.Recordset
            Me.txtName = .Fields("product name")
            Me.txtOrderedQty = .Fields("QtyImport")
            Me.txtDate = .Fields("ImportDate")

            Me.txtName.Tag = .Fields("Product Name")
            Me.CmdAdd.Caption = "Update"
            Me.CmdEdit.Enabled = False
        End With
    End If
End Sub

Private Sub cmdExit_Click()
    DoCmd.Close
End Sub

【问题讨论】:

  • 停止将您的 SQL 连接为字符串,并使用参数化查询。然后你可以只为参数分配一个 DateTime 并让数据库正确格式化它,而不是处理这种转换问题。它还避免了 SQL 注入。如果您搜索它们,这里有几十个帖子处理参数化查询。

标签: sql-server forms vba date


【解决方案1】:

首先将输入的日期值解析为日期时间对象,然后将其值传递给数据库。 再次绑定时,从数据库中的值获取日期时间对象,然后对其进行解析以获取“dd-mm-yy”格式的值。

或者,您也可以使用 convert 方法从输入的日期值中获取日期对象,该日期值采用“dd-mm-yy”格式,即

convert(date, @inputed, 103)

它将给出日期对象,其中@inputed 是您输入的日期值。

然后将其存储在数据库中,并在再次显示时使用以下函数将其转换回“dd-mm-yy”格式。

convert(varchar, @savedDate, 103)

此行将修改如下:

CurrentDb.Execute "INSERT INTO [import]([product name], [QtyImport], [ImportDate])" & _
        " VALUES('" & Me.txtName & "'," & Me.txtOrderedQty & ",convert(date, '" & Me.txtDate & "',103)"

我希望上面这行是正确的,如果我在 C# 中工作时出错,请纠正。

【讨论】:

  • 嗨它看起来不错,但我不知道我应该如何使用它。例如,在我的 VBA ode 中,我该如何使用这个转换方法?还有我应该在哪里包含以及如何转换 varchar 函数?谢谢
  • 您好,对您有帮助吗?或者你仍然面临一些问题
  • 不幸的是,它没有帮助,只是格式不正确,或者我觉得我应该在 Windows 或 Microsoft Office 中的某个地方设置正确的日期格式,但我找不到在哪里。 .. :/ 太烦人了!
【解决方案2】:

好的所以最后我发现了如何在 VBA 中格式化日期。我已经更改了 cmd 中的“值”行添加点击到以下内容:

" VALUES('" & Me.txtName & "'," & Me.txtOrderedQty & ",#" & Format(Me.txtDate, "mm/dd/yyyy") & "#)"

所以这是实际工作以将所有内容保持为英国日期格式的代码,bcs 我在某处读到 VBA 总是使用美国日期格式,无论您是否设置了您的区域等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-30
    • 2011-08-21
    • 1970-01-01
    • 2022-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多