wxODBC(wxWidgets)中使用驅動程序方式打開數據庫
wxODBC(wxWidgets)中使用驅動程序方式打開數據庫
wxWidgets的文檔中都是使用在控制面板/數據源中設定DSN來創建ODBC連接。但是實際上很多小型的應用,只是使用本機的一個Access數據庫。而要求使用者學習ODBC的DSN配置明顯的增加了軟件的使用難度。因此,研究了一下wxforum.org中的帖子,試驗成功!范例如下:
wxDbConnectInf *DbConnectInf = NULL; // 定義數據庫連接信息指針DB connection information
wxDb *PodDB = NULL; // 定義數據庫連接指針Database connection
wxDbTable *table = NULL; // 定義數據表指針Data table to access
DbConnectInf = new wxDbConnectInf(0, wxT(""), wxT(""), wxT(""));//這里定義的內容基本沒用,但不定義會報錯
PodDB = new wxDb(DbConnectInf->GetHenv());
bool DBfailOnDataTypeUnsupported=!true;//
if(!DB->Open(wxT("DRIVER=Microsoft Access Driver (*.mdb);DBQ=D:\\pod.mdb;UID=admin;"),DBfailOnDataTypeUnsupported))//使用驅動程序的方式打開數據庫
{
if (PodDB->IsOpen())
{
// Connection is open, but the initialization of
// datatypes and parameter settings failed
return 0;
}
else
{
// Error opening datasource
//return HandleError(wxT("DB ENV ERROR: Cannot allocate ODBC env handle"));
return 0;
}
}
const wxString tableName = wxT("POD"); //定義要操作的表的名稱
const UWORD numTableColumns = 8; //指出POD表中的列數(columns)
//建立到表的連接
table = new wxDbTable(PodDB, tableName, numTableColumns, wxT(""), wxDB_QUERY_ONLY, wxT(""));
//將存放提取數據的變量清空
wxStrcpy(pPodPictureInfo->Title, wxT(""));
......
//定義列的數據格式,和取出的格式。
//此處需要注意的是如果前面指明了numTableColumns為n的話,就一定要定義n條
table->SetColDefs(0, wxT("Pod_Title"), DB_DATA_TYPE_VARCHAR, pPodPictureInfo->Title, SQL_C_WXCHAR, sizeof(pPodPictureInfo->Title), true, true);
......
//打開表
if (!table->Open())
{
//An error occurred opening (setting up) the table"));
}
//限定取出Pod_When列值為1982的行(row)
table->SetWhereClause(wxT("Pod_When = '1982'"));
//按照PodDate字段排序
table->SetOrderByClause(wxT("Pod_Date"));
//根據上面的限定信息執行查詢操作
if (!table->Query())
{
return HandleError(wxT("QUERY ERROR: "), table->GetDb());
//return 0;
}
while (table->GetNext())//提取查詢到的行
{
wxString msg; // Used for display messages
msg.Printf(wxT("Row #% lu --\nTitle : %s\nPodDate : %s\nWhere : %s\nWhen : %s\nWho : %s\nDisc : %s\nRelated : %s\nPhotoName :%s"),
table->GetRowNum(),
pPodPictureInfo->Title,
pPodPictureInfo->PodDate,
pPodPictureInfo->Where,
pPodPictureInfo->When,
pPodPictureInfo->Who,
pPodPictureInfo->Disc,
pPodPictureInfo->Related,
pPodPictureInfo->PhotoName
);
//檢查表操作/現實獲取的POD信息
//wxSafeShowMessage(wxT("Pod_wxDbTable Test"),msg);
}
------補充一點------
在SetColDefs中關聯的變量不能使用wxString,只能使用wxChar[n]等格式。
struct PodPictrueInfo
{
wxChar Title[100];
......
}
posted on 2007-01-29 17:34 王光平 閱讀(1236) 評論(0) 編輯 收藏 引用 所屬分類: 編程技術