2011-04-28 53 views
1

我有一個奇怪的現象,我無法解釋,也沒有重現,我希望你有一個想法如何有可能爲用戶輸入一個無效的值。MS Access 2003:用戶能夠輸入無效值;怎麼樣?

我有一個表單包含一個編輯字段,應該只接受沒有任何日期信息的時間值的Access-MDB。

該編輯字段的相關屬性如下:

  • 綁定到一個日期/時間數據庫值(因爲訪問知道有沒有時間,只有數據類型)
  • 格式:「時間,24小時」
  • 輸入格式:「99:99」

(我用訪問的德國版本,所以屬性名稱可能會略有不同,但你看到的圖案)

現在我發現用戶能夠在該字段中輸入日期值。我幾乎100%確定這是一次意外事故,並且沒有以直接打開表格和編輯相應的日期/時間字段的形式出現「巧妙的破解」。自從2009年進入該項目以來(沒有人發現錯誤),我沒有機會詢問用戶它是如何完成的。

我發現兩個錯誤的日期爲「01.06.2000」和「01.07.2000」的條目,我猜想用戶想輸入時間「06:00」和「07:00」。

我想盡輸入我能想象(如「6.0」,「6; 0」,「6,0」,複製粘貼&),但我無法欺騙接入和進入,除了數字和冒號什麼。

您是否瞭解正在進行的操作以及用戶如何能夠意外輸入這些日期?

+0

來解決這個問題是改爲使用未綁定的最簡單的方法控制並使用它的BeforeUpdate字段來驗證輸入內容,然後使用AfterUpdate事件寫入基礎字段。 – 2011-04-29 02:18:24

回答

0

幾種可能性:看原始表

    • 開發人員(?你)這樣做是偶然的客戶端訪問軟件就瞬間瘋狂和損壞的條目。這發生在我們身上(幸運的是非常少見),我們的Access表將以字符串字段中的非ASCII字符結束。
    • Access運行時中的一個錯誤允許過去出現該問題,但已在Service Pack中得到糾正。

    最後,如果你放了90個小時,它會溢出到4天嗎?這可能會做到。

  • +0

    23:59之後的所有內容都會給出錯誤。 – VVS 2011-04-28 17:49:58

    1

    Jet/ACE日期/時間值永遠不會「沒有任何日期信息」存儲。如果您試圖只存儲時間分量,它實際上將在第零天(1899年12月30日)的同一時間存儲。

    我們只能推測在2009年如何添加不正確的數據。如果您希望數據庫引擎要求日期/時間值作爲日期組件存儲,則可以添加表級別驗證規則。從表屬性表,嘗試一下本作驗證規則:如果你想允許空值your_date_field

    DateValue([your_date_field])=CDate("1899/12/30") 
    

    ,試試這個版本:

    IsNull([your_date_field]) Or DateValue([your_date_field])=CDate("1899/12/30")