VC與Access時間資料互動修正方法

2021-04-13 08:45:59 字數 2581 閱讀 5133

介紹:細處著手,巧處用功。高手和菜鳥之間的差別就是:高手什麼都知道,菜鳥知道一些。電腦小技巧收集最新奇招高招,讓你輕鬆踏上高手之路。

引言

眾所周知,vc++是乙個功能十分強大的應用程式開發工具,而microsoft access是乙個中小型的資料庫

管理系統,可以處理多種資料資訊。因此,在使用vc++鏈結odbc中小型資料庫

的時候,常常選用access作為資料庫

**。實際應用中,vc++和access的數字型別資料(如整形、浮點型和雙精度型)進行鏈結的時候,簡便易用,但是在vc++與access資料庫

進行日期/時間型別資料的交換時,經常會出現一些意想不到的問題。例如:在vc++中存入一條記錄的時候,vc++會自動為記錄的時間字段加上日期;無法用通用的sql語句同時對記錄的日期和時間字段進行查詢,等等。這類問題是由於vc++對日期/時間型別變數定義的缺陷而產生的。

下面我們就對vc++和access日期/時間的型別做一簡要的說明,**產生的原因,並舉例說明解決的方法。

vc++和access日期/時間型別的資料交換方式

visual c++ 的日期時間控制項(date time picker)是由乙個靜態控制項加日曆控制項組成,用於讓使用者選擇日期,也可以讓使用者選擇輸入時間。它的三種格式如下:

(1) short date顯示日期(格式9/10/1970)

(2) long date顯示日期(格式september 10,1970)

(3) time 顯示時間(格式8:00:00)

microsoft access為日期/時間資料提供了7種格式:通用日期 如9/19/97 14:32:10 pm;完整日期 如wednesday,february 13,1997;中日期 如19-jun-94;簡短日期 如6/19/97;完整時間 如05:34:10pm;中時間 如05:34;短時間 如17:34。由此可見,除了通用日期,microsoft access的日期/時間字段可以分為兩大類:"日期"欄位和"時間"字段。

我們在編制odbc資料庫

的時候就可以將vc++中屬性為short date(long date)日期時間控制項與access中的日期字段、vc++中屬性為time的日期時間控制項和access中的時間字段一一對應起來,很方便的實現資料的讀取和其他操作。

但是這時候問題出現了。我們常常需要在vc++中向資料庫

新增紀錄,當加入一條新記錄(如:日期9/19/99,時間18:30:00)後,開啟access資料庫

發現,在新新增記錄中,時間字段顯示為:70-1-1 18:30:00,也就是說vc++為每條新增記錄的時間字段自動加上了日期-70年1月1日。這就為我們今後的程式設計帶來了隱患。

究其原因,原來是vc++將所有的ctime型別變數全部換算成秒來計算,它將70年1月1日0:00:00定義為0時刻,其後所有的日期全部換算為距70年1月1日0:00:00的秒數。因此就不難理解vc會自動為時間字段新增年月日了。但這時假如我們在vc++中用sql語句對時間(如:18:30:00)進行查詢,那我們到底是應該查詢當前所在的時間(1999-9-9 18:30:00)呢,還是查70-1-1 18:30:00呢;如果我們要查詢同時滿足99年9月19日前後15天和18:30:00前後30分鐘的記錄,又該如何查詢呢。下面我們討論如何解決這個問題。

時間問題的修正

現在,我們以乙個實際的某艦船之間通訊的資料庫

為例,說明如何在應用中克服這個問題。在這個程式中,我們比較了數字型別變數與日期/時間型別變數在vc++和access資料交換時的區別,並對時間型別變數存在的問題提出了相應的解決方法。

本程式需要同時實現這樣兩個功能:

(1)查詢的時間範圍:一天內給定時間前後t分鐘,共計前後n天;

(2)查詢的位置範圍:以給定a地為中心r為半徑範圍內的所有點作為a點,和以給定b地為中心r為半徑範圍內的所有點作為b點,且兩點關聯(是通訊

的雙方)。

本例所涉及的框圖如圖1所示:

圖1 按時間查詢對話方塊

各編輯控制項對應的變數分別為:m_date,m_time,m_ longitude_a,m_longitude_b,m_latitude_a,m_latitude_b,m_dd,m_mm,m_rad。

所涉及的cpp源程式如下:

在程式的sql語句中,我們為每乙個時間欄位的查詢人為地加上70年1月1日(即70/1/1),而對於數字型別變數的查詢用標準的sql語句就可以了。為什麼要加上70/1/1呢?因為正如前所述,在主介面中,當我們新增一條記錄的時候,vc自動為記錄的時間字段新增的日期是70/1/1。這樣,在sql語句中在時間字段人為地插入日期不但克服了vc存在的時間問題,而且對其它欄位的查詢沒有任何影響,這種解決方案經程式設計實驗證明是完全正確且可行的。

最後用clistbox類的addstring()等成員函式,就可以把所查到的記錄在列表框中一一顯示出來,查詢的記錄如圖2所示,這裡我們僅在列表框中顯示了幾條模擬的記錄。圖2中的排序是按照分值的大小降序排列的。

圖2 查詢記錄結果

結束語

本文提供了一種簡便實用的方法,修正了vc++與access資料庫

日期/時間型別變數資料交換存在的問題。應用vc++與其它資料庫

鏈結的時候可以採用類似的思想。

VUE 元件間資料互動

元件通過props來接收傳遞過來的值vue.component a item 父元件通過屬性傳遞值給子元件 父元件的值 a item 靜態的值 n a item 動態的值 注意 在props中使用駝峰命名時,在末班中需要用短橫線方式,字串模板中沒有限制。例 vue.component a item ...

Ionic前台與PHP後台間資料互動

ionic 目錄 我們在開發ionic程式中,必不可少的要與後台進行資料互動,有將資料提交伺服器和從伺服器獲取資料的操作。如果我們伺服器使用php語言進行開發,可能會遇到以下問題 1 無法訪問伺服器。2 伺服器端使用 post 命令無法獲取前台提交的資料。下面我們就一一說明這些問題如何解決。1 無法...

Lua與VC的互動

1 從c讀取lua檔案 lua state l lual newstate luaopen base l int ret lual dofile l,111.lua console writeline open ret n ret lua resume l,0 2 讀取乙個單獨的變數 111.lua...