使用Access和Excel需要注意的2000問題
發(fā)布時間:2008-08-14 閱讀數(shù): 次 來源:網(wǎng)樂原科技
Microsoft Access
(1) Access未曾考慮Windows控制面板中的短日期設(shè)置,使用了短日期輸入掩碼的形式,以對日期輸入的位數(shù)進(jìn)行控制。另外,用戶的輸入掩碼設(shè)置可能不允許輸入4位數(shù)的年,這顯然存在2000年問題;同樣,缺乏輸入掩碼設(shè)置控制的輸入規(guī)則將由控制面板的設(shè)置來確定,這也關(guān)系到2000年問題。
(2)由于Access是一個數(shù)據(jù)庫,所以有可能將日期/時間數(shù)據(jù)存儲在文本或數(shù)字字段中,這將引發(fā)2000年問題。為避免這類問題,Access提供了日期/時間數(shù)據(jù)類型,可以支持正確的日期。
(3)使用Format函數(shù)以確保數(shù)據(jù)表單、查詢結(jié)果、窗體和報表中所顯示的日期都使用長日期格式,這樣就保證了總是顯示4位數(shù)的年。
(4) Access 2.0、95和97裝載的日歷控制僅能存儲1900~2100年。Access 2.0也接受兩位數(shù)的年,在Access 95和97中,Year的性質(zhì)不像其他Access那樣可以進(jìn)行轉(zhuǎn)換,所以,當(dāng)Year的性質(zhì)<1900時被認(rèn)為是無效的。這樣做的優(yōu)點(diǎn)在于,使用Year的性質(zhì)時就可以迫使你使用4位數(shù)的年。但是,這一控制對Value的性質(zhì)不起作用,在Value的性質(zhì)中可以接受兩位數(shù)的年,所以,必須使用日歷控制Year的性質(zhì),以防止?jié)撛诘?000年問題。
(5)如果你正在使用Access 95,可能會碰到這樣一種情況:用戶還不知道更新他們的OLE Automation Library,以改變對世紀(jì)的假定規(guī)則。
(6)檢查所有用于日期/時間字段的有效規(guī)則,以確保它們在21世紀(jì)都能按4位年份工作。
(7)表索引可以由日期/時間字段生成,鑒別所有與這類可能存在不正確世紀(jì)信息的字段有關(guān)的潛在問題很重要。
(8)查詢可以按日期/時間字段分類和排序,這些也需要檢查。查詢還支持可以對日期/時間字段操作的集合和函數(shù),如Sum、Avg、Min、Max、Count、StDev、Var、First、Last等。
(9) Access中的Domain Aggregate函數(shù)可以對日期/時間字段操作,如Davg、Dcount、Dlookup、Dfirst、Dlast、Dmin、Dmax、DstDev、DstDevP、Dsum、Dvar、DvarP等。
(10)報表可以按日期/時間字段來分類和排序。
(11) Microsoft Jet數(shù)據(jù)庫引擎的數(shù)據(jù)查詢對象(DAO)程序接口提供LastUpdate和DateCreated屬性來顯示結(jié)構(gòu)何時進(jìn)行了修改。這些字段存儲時使用的是與日期/時間一致的字段。
(12)如果在多版本的環(huán)境下使用Access,那么,還要考慮一些其他問題,如:應(yīng)用程序是在兩個數(shù)據(jù)庫上開發(fā)的,一個"應(yīng)用程序"的數(shù)據(jù)庫包括所有的查詢、窗體、報表、宏和模塊,而另一個"數(shù)據(jù)"的數(shù)據(jù)庫則存放在網(wǎng)絡(luò)上。問題的復(fù)雜性在于應(yīng)用程序的數(shù)據(jù)庫安裝在本地的用戶機(jī)器上,并通過鏈接/聯(lián)接表提供對網(wǎng)絡(luò)上數(shù)據(jù)庫的查詢,那些用戶的機(jī)器上安裝了不同的Access版本,由于每個版本之間的差異,這時對世紀(jì)的確定起作用的有三種不同規(guī)則,在這種情況下幾乎都會引發(fā)2000年問題。所以,如果是在一個混合版本的環(huán)境下運(yùn)行,則必須了解每個版本的Access是如何解釋世紀(jì)的,然后,檢查應(yīng)用程序的邏輯,以確保"應(yīng)用程序"數(shù)據(jù)庫的每個版本之間是同步的。
(13) Access通過File、Export菜單條及TransferText操作提供了輸入/出功能,使用這些功能,可以指定所使用的文件和不同的選項,其中選項有"四位數(shù)的年"項,如果這一選項被關(guān)閉了,那么,所輸入/出的日期將去除世紀(jì)信息。更糟的是,這一選項的默認(rèn)值是關(guān)閉的。為了解決這一問題,需要確保用戶永遠(yuǎn)無法看到這一用戶界面,即利用將輸入/出設(shè)置存儲為規(guī)范的性能:應(yīng)用程序的開發(fā)人員必須建立規(guī)范,并且保證"四位數(shù)年"的選項是打開的,而且應(yīng)用程序在進(jìn)行輸入/出時必須使用所存儲的規(guī)范;另外,還需要檢查每一個存儲的輸入/出規(guī)范,以確定"四位數(shù)年"的選項是打開的。
(14)當(dāng)Access的輸入文本數(shù)據(jù)包含日期時,它將使用該版本認(rèn)為正確的規(guī)則來識別日期/時間字段,并且將源文件MM/DD/YY中的兩位數(shù)年轉(zhuǎn)換為四位數(shù)。例如,當(dāng)你使用Acc ess 2.0版輸入一個文件,而數(shù)據(jù)包含2位數(shù)年的日期時,結(jié)果是日期數(shù)據(jù)的前面全都加上了19;如果用Access 97輸入完全一樣的數(shù)據(jù),結(jié)果是日期數(shù)據(jù)前面根據(jù)源文件中2位數(shù)年的值而分別加上了19或20(滑動窗口算法);同樣的問題也存在于日期的輸出操作。問題的復(fù)雜性在于,輸入/出文本文件時,"四位數(shù)年"選項的默認(rèn)值是關(guān)閉的,這意味著,輸出時所有從Access源表中出來的日期字段的世紀(jì)信息都會丟失;輸入時所有源文件中的世紀(jì)信息也丟失了,而由Access使用它自己的規(guī)則來確定該年屬于哪個世紀(jì)。
(15) Access的宏和模塊代碼中所使用的TransferText操作也潛藏著2000年問題,當(dāng)使用該操作輸出文本數(shù)據(jù)時,所有的世紀(jì)信息都置為20世紀(jì),即使當(dāng)源文本文件中是四位數(shù)年。這是因為如果沒有指定已命名并存儲的"四位數(shù)年"選項打開的輸入/出規(guī)范,那么,數(shù)據(jù)的世紀(jì)信息將會改變。Access 2.0沒有使用Windows控制面板中的短日期設(shè)置,所以,這時即使將短日期設(shè)置為顯示四位數(shù)年,將只會輸出兩位數(shù)年。Access 95和97則以另一種方式處理,它們都采用控制面板中的短日期設(shè)置,在這種情況下,當(dāng)計算機(jī)采用短日期設(shè)置顯示四位數(shù)年,用TransferText將輸出四位數(shù)年。
Microsoft Excel
(1) Excel將1900年當(dāng)作閏年(實際上不是),這可能是為了與Lotus 1-2-3兼容,因為后者就錯誤地將1900當(dāng)作是閏年。
(2) Excel中最普遍的格式是由Windows的控制面板定義的短日期格式,這種格式在顯示四位數(shù)年時是不可靠的。
(3) Excel 5.0、Excel 95 7.0版、Excel 97 8.0版在兩位數(shù)年時用于假定世紀(jì)的規(guī)則是不一樣的,在不同版本的Excel共存的環(huán)境中使用共享日期將會出現(xiàn)問題。
(4)如果記錄下了一個包括日期的宏,那么,這個宏將只能按照Windows控制面板中短日期信息記錄下日期,這將導(dǎo)致宏在回放時只有兩位數(shù)年。
(5)如果使用Format函數(shù)來規(guī)定日期格式為諸如"Dec 98",當(dāng)2001年到來時這種規(guī)定將提供錯誤的日期。
(6) Excel支持VBA,而VBA使用OLEAUT32.DLL來確定兩位數(shù)年的世紀(jì),由于Excel不使用OLE Automation庫,這可能引起在Excel和VBA之間的兩位數(shù)年不匹配,所以,在此類應(yīng)用中最好采用四位數(shù)年。