我們在編程時要儲存各種即時接收的資料,並為以後的資料再現回放,就應該建立資料檔案,而這種資料檔案可以用普通檔案讀寫方式,但當資料類型較多且要求隨時回放資料時,要求編程時設定較大的動態數組,這會佔用較多的系統資源,甚至導致程式崩潰;而利用資料庫則可以較好地解決這個問題,我們將資料放到資料來源檔案中,通過編程介面對其進行訪問。ODBC(開放的資料庫連接:Open Database Connectivity)為各種類型的資料庫管理系統提供了統一的編程介面,我們在下面的幾篇文章中,首先通過執行個體說明ODBC技術的應用方法,然後說明如何將串口資料即時儲存在資料來源檔案中,這一方面介紹VC中ODBC技術的應用(前面的例子不涉及串口技術,以方便只想瞭解ODBC技術的讀者,又為利用ODBC技術儲存串口編程資料提供範例,雖然前面幾個常式與串口通訊不相關,但如果對使用資料庫不熟悉,也請從前面有耐心地看下去。
1.首先在控制台中,開啟ODBC資料來源,點擊使用者DSN選項,在出現的介面中點擊添加,如所示:
然後,點擊完成按鈕,出現,填入資料來源名(可隨意取名,本處設為biao)
點擊確定即可。
2.在ACCESS中建立資料庫,本例中為data(只包含 number,name,score三列),可從我提供的這個例子下COPY
3.建立應用程式項目
(1)打 開File 菜 單 的New 選 項, 選 取Projects,
選 擇MFC AppWizard (exe),填 入 工 程 名,本例為DATA1
(2)把資料庫檔案 data拷入建立的工程目錄。
(3)應用程式的類型指定為SDI,在Step2 對話方塊中選擇Header Files Only選項,在Step6是將視圖基類指定為CScrollView。
(4)用ClassWizard 建立記錄集類。從Add Class菜單中選擇New,並按填充對話方塊:(說明:一個CRecordset對象代表從資料來源中查詢的一個記錄集。)
(5).點擊OK,進入Data Source,選擇biao資料來源,並選擇Dynast選項,如所示:
在選擇了資料來源之後,ClassWizard提示我們選擇一個表。如所示:
(6)在ClassWizard中,針對新產生的CDataSet類,單擊Member Variables標籤。此時ClassWizard 應按照資料庫列的名稱產生了如下的資料成員:
(7)在CData1View類中添加資料成員
(8) 在Cdata1Doc中添加如下成員:
(9)編輯DATA1View.cpp中的OnDraw() 和OnInitialUpdate()函數:
void CDATA1View::OnDraw(CDC* pDC)
{
CDATA1Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
TEXTMETRIC tm;
pDC->GetTextMetrics(&tm);
int nLineHeight=tm.tmHeight+tm.tmExternalLeading;
CPoint pText(0,0);
int y = 0;
CString str;
if (m_pSet->IsBOF()) { // detects empty recordset
return;
}
m_pSet->MoveFirst(); // fails if recordset is empty
while (!m_pSet->IsEOF()) {
pDC->TextOut(pText.x, pText.y, m_pSet->m_number);
pDC->TextOut(pText.x+1000, pText.y, m_pSet->m_name);
pDC->TextOut(pText.x+4000, pText.y, m_pSet->m_score);
m_pSet->MoveNext();
pText.y -= nLineHeight;
}
}
void CDATA1View::OnInitialUpdate()
{
CScrollView::OnInitialUpdate();
CSize sizeTotal(8000, 10500);
SetScrollSizes(MM_HIENGLISH, sizeTotal);
m_pSet = &GetDocument()->m_dataSet;
if (m_pSet->IsOpen()) {
m_pSet->Close();
}
m_pSet->Open();
}
(10) data1View.cpp 中加入#include "dataSet.h"
(11) 編譯結果應如下所示:
標籤: VC++, ODBC