10.9.1 自動註冊DSN
無論是用ODBC還是DAO類,在訪問ODBC資料來源以前,都必須先註冊DSN。通過調用函數SQLConfigDataSource,可以實現自動註冊DSN。當然,用DAO可以直接存取一些常用的資料庫,而不必通過ODBC來訪問(參見10.8.3)。
清單10.14的代碼示範了註冊DSN的過程。該段代碼先用SQLConfigDataSource註冊一個名為MYDB的FoxPro 2.5資料來源,然後調用CDatabase::Open函數與該資料來源串連。注意在使用這段代碼時,要包含afxdb.h標頭檔,讀者可以把該檔案放到stdafx.h中。
清單10.14 自動註冊DSN
#include “afxdb.h”
. . .
CDatabase db;
if(!SQLConfigDataSource(NULL,ODBC_ADD_DSN, "Microsoft FoxPro Driver (*.dbf)",
"DSN=MYDB/0"
"DefaultDir=c://mydir/0"
"FIL=FoxPro 2.5/0"
"DriverId=280/0"))
{
AfxMessageBox("Can't add DSN!");
return ;
}
TRY
{
db.Open("MYDB");
}
CATCH(CDBException, e)
{
AfxMessageBox(e->m_strError);
return;
}
END_CATCH
在註冊DSN時,SQLConfigDataSource函數的第二個參數應該是ODBC_ADD_DSN,第三個參數指定了ODBC驅動程式,它的寫法可以參照ODBC管理器的驅動程式頁。第四個參數說明了資料來源的各種屬性,它是由一系列子串構成,每個子串的末尾必須有一個“/0”。最重要的屬性是“DSN=資料來源名”,其它屬性包括預設目錄以及驅動程式版本資訊。在上例中,使用FoxPro 2.5的版本,所以DriverId應該是280,對應地,FoxPro 2.6的DriverId是536,FoxPro 2.0的是24。
如果讀者對SQLConfigDataSource函數的第四個參數的設定方法不清楚,那麼可以開啟Windows的註冊表看一看登入過的DSN的各項屬性。運行RegEdit可以開啟註冊表,然後依次開啟HKEY_CURRENT_USER->Software->ODBC->ODBC.INI,就可以看到登入的DSN,開啟各DSN,則可以看到該DSN的各項屬性,讀者可以仿照DSN屬性來設定第四個參數。
DSN的名字必須唯一,因此如果要註冊的DSN已被註冊過,那麼SQLConfigDataSource就修改原來DSN的屬性。
(1)在StdAfx.h檔案中添加
#include <afxdb.h>
#include <afxtempl.h>
#include <odbcinst.h>
(2)在適當位置添加
//建立ODBC資料來源
//建立ODBC資料來源
if (AfxMessageBox("選擇是否建立資料來源sss", MB_YESNO) != IDYES)
return ;
//建立方法3
if(SQLConfigDataSource(m_pMainWnd->m_hWnd,ODBC_ADD_DSN,"Microsoft Access Driver (*.mdb)",
"DSN=Personnel/0"
"DBQ=C://My Documents//dq.mdb/0"
"Description=ODBC資料來源/0"
"DataDirectory=C://My Documents/0"
"/0"))
AfxMessageBox("建立成功!");
else
AfxMessageBox("取消建立或建立失敗!");
把/0換成/1,完成整個字串後,再把/1換成/0