1

データベースで日付を取得しようとしていますが、日が12未満の場合、月と日が入れ替わります

例:データベース2012-02-10(2012年10月2日)で、これを実行したときに取得する値は次のとおりです。

lastDateMill = Nz(DLookup("LastContactDate", "Mills", "MillID = " & lstMills.Column(0, i)), 0)

lastDateMill = "10/02/2012" 

だからそれはただのフォーマットだと思ったけど

Format(lastDateMill, "Long Date") 

「February-10-12」に相当します

これが私が日付を更新する方法です

DoCmd.RunSQL "UPDATE Mills SET LastContactDate = #" & SalesCallDate & "# WHERE MillID = " & lstMills.Column(0, i)

そして、SalesCallDate = "2/10/2012"とても良い日

では、なぜ日と月が入れ替わるのでしょうか。

フロントエンドms-access-2010はオンで、バックエンドはオンですSQL SERVER 2012

4

2 に答える 2

1

変数SalesCallDateには、テキストとして日付が含まれています。

SalesCallDate ="2012年2月10日"

どうやらあなたはその文字列の日付フォーマットを意図しているようですm/d/yyyyが、それはd/m/yyyyフォーマットとして解釈されます。

yyyy/mm/ddロケールの問題による混乱を避けるために、文字列値を形式で保存します...2012/02/10

SalesCallDateこれは実際には日付値を含むテキストボックスであることが判明したUPDATEため、ロケールによる日付の問題を回避するためにアプローチを変更してください。

Dim strUpdate As String
Dim db As DAO.Database
strUpdate = "UPDATE Mills SET LastContactDate = " & _
    Format(Me.SalesCallDate, "\#yyyy-m-d\#") & vbCrLf & _
    "WHERE MillID = " & Me.lstMills.Column(0, i)
Debug.Print strUpdate
Set db = CurrentDb
db.Execute strUpdate, dbFailonerror
Set db = Nothing
于 2012-10-02T16:37:19.390 に答える
1

フォーマットを明示的に指定して、これを試してください

DoCmd.RunSQL "UPDATE Mills SET LastContactDate = #" & _
    Format$(SalesCallDate,"yyyy/mm/dd") & "# WHERE MillID = " & _
    lstMills.Column(0, i)

更新

おそらく、フォーマットに依存しない、より良い方法があります。アイデアは、コンボ、リスト、またはテキストを間に挟まずに、テーブルからテーブルに日付を転送することです。したがって、日付型から文字列に変換してから日付フィールドに戻すことは避けられます。

テーブルを結合できる場合(MillIDがリストボックスのバインドされたフィールドであると想定):

DoCmd.RunSQL "UPDATE Mills " & _
  "INNER JOIN sourceTable ON Mills.MillID = sourceTable.MillID " & _
  "SET LastContactDate = sourceTable.SalesCallDate " & _
   "WHERE Mills.MillID = " & lstMills

さもないと

DoCmd.RunSQL "UPDATE Mills SET LastContactDate = " & _
  "(SELECT SalesCallDate FROM sourceTable WHERE ID = " & sourceID & ")" _
  "WHERE Mills.MillID = " & lstMills
于 2012-10-02T17:22:24.193 に答える