2016-01-06 86 views
-3

我正在開發使用MS-ACCESS作爲後端的Windows應用程序。日期格式在保存記錄時得到更改

我有MS-ACCESS中有Datetime Type Column的表,它包含今天的日期。

我有以下代碼。 (代碼的形式)

   Dim oCoupon2 As New Coupon 
       oCoupon2.LoadByPK(oCoupon.ID) 
       oCoupon2.RedeemedDate = System.DateTime.Now 
       oCoupon2.IsRedeemed = "Yes" 
       oCoupon2.RedeemedCustomerID = .ID 
       Dim isSuccsess As Integer 
       isSuccsess = oCoupon2.Save() 

代碼保存實體(在業務層代碼)中(在數據層代碼)

Public Overrides Function Save() As Boolean 
      Try 

       Dim bSuccess As Boolean = False 
       SetColumn(IDColumnName, _ID) 
       SetColumn(CouponNoColumnName, _CouponNo) 
       SetColumn(ExpDateColumnName, _ExpDate) 
       SetColumn(IsRedeemedColumnName, _IsRedeemed) 
       SetColumn(RedeemedDateColumnName, _RedeemedDate) 
       SetColumn(RedeemedCustomerIDColumnName, _RedeemedCustomerID) 
       bSuccess = MyBase.Save() 
       ' Ensures that the _DepartmentID is updated with the new Identity value in case of Insert 
       If bSuccess Then _ID = MyBase.IdentityColumn 
       Return bSuccess 

      Catch ex As Exception 

      End Try 
     End Function 


    Protected Sub SetColumn(ByVal ColumnName As String, ByVal Value As Object) 
      Try 
       If Not _dict.ContainsKey(ColumnName) Then 
        _dict.Add(ColumnName, Value) 
       Else 
        If Value Is DBNull.Value Then Value = Nothing 
        _dict(ColumnName) = Value 
       End If 
      Catch ex As ArgumentException 
       ' Exception occurs when adding a key that already exists in dictionary. Try replace mode. 
       Try 
        _dict(ColumnName) = Value 
       Catch 
        _Error = ex 
        Throw ex 
       End Try 
      Catch ex As Exception 
       _Error = ex 
       Throw ex 
      End Try 
     End Sub 

代碼

Public Overridable Function Save() As Boolean 
     Dim bSuccess As Boolean = False 
     If _IsAddNew Then 
      bSuccess = Insert() 
      If bSuccess Then _IsAddNew = False 
     Else 
      bSuccess = Update() 
     End If 
     Return bSuccess 
    End Function 

其產生以下查詢同時節省,在VS 2012

UPDATE Coupon SET CouponNo = '262752325',ExpDate = '2/20/2016 00:00:00',IsRedeemed = 'Yes',RedeemedDate = '1/6/2016 20:28:31',RedeemedCustomerID = Null WHERE ID = 17 

其設定保存今天的數據,即1-JAN-16,但在保存記錄,它得到保存爲一個1日至16日,請檢查以下內容...

enter image description here

我已經檢查的時間我的機器顯示了完美的時間。即2016年1月1日 我必須檢查哪些設置?

+2

日期沒有格式。格式只是我們如何將它們展示給用戶。如果列*是* DateTime類型,則不應傳遞/存儲字符串值(這顯然是「RedeemedDate」是什麼,否則Option Strict不是)。訪問不顯示原始的,存儲的數據,但爲您(用戶)格式化。這就是說,它正在改變......你可以展示SaveData的功能嗎?也可以嘗試只存儲DateTime.Now而不用幫助格式 - 你可能會混淆它 – Plutonix

+0

請檢查更新的問題...我已經添加了查詢生成,同時保存... – bnil

+0

你明確地設置它爲''1/6/2016 20:28:31''這是文本,而不是日期時間類型的順便說一句,而不是'RedeemedDate'的值,如果你的文化是dd/mm,那麼值將指向6月1日像英國 – Plutonix

回答

0

您沒有說明您所使用的數據層(ADO,ADO.Net - OLEDB),我懷疑你是在訪問和不VB.Net使用VBA

這就是說,(Visual Studio中。)訪問更新將如下所示:

UPDATE a SET a.dt = #2016/3/2#; 

#的分隔日期字符串。 yyyy/m/d格式避免了本地化問題。

+0

標籤是vb.net應該是vba(Access VBA)。取決於什麼是IDE。 – rheitzman

+0

@Plutonix感謝您檢測問題,如果您告訴我在編寫代碼時我做了什麼樣的改變將會很好...查詢應該是什麼樣子?我想知道如何保存到目前爲止的正確日期.. 。? – bnil

+0

我們甚至不知道你在編程!它是使用Visual Studio標記爲VB.NET還是這是一個Access的東西? – Plutonix

0

問題是你SetColumn功能:

SetColumn(RedeemedDateColumnName, _RedeemedDate) 

它產生:

RedeemedDate = '1/6/2016 20:28:31' 

而它 - 爲訪問 - 應建立:

RedeemedDate = #1/6/2016 20:28:31# 
+0

好吧,但從今年它工作正常...它顯示問題,因爲新年...我沒有對我的電腦上的DateTime進行任何更改。 .. – bnil

+0

並非所有的錯誤都會在任何時候顯示他們醜陋的表情。 – Gustav

+0

@ user1650894 2016年6月1日的日期是01-06-2016 - 今天是06-01-16我懷疑您的日期格式與訪問數據中的日期格式不同。明天您的所有日期將顯示爲2016年7月1日。 –