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];
......

}

转载于:https://www.cnblogs.com/aooyu/archive/2009/12/23/1630718.html

[转]wxODBC(wxWidgets)中使用驱动程序方式打开数据库相关推荐

  1. sqlite学习笔记7:C语言中使用sqlite之打开数据库

    数据库的基本内容前面都已经说得差点儿相同了.接下看看如何在C语言中使用sqlite. 一 接口 sqlite3_open(const char *filename, sqlite3 **ppDb) 打 ...

  2. uniCloud云函数中通过传统方式操作数据库的-增删改查

    云函数 可以看做java或者php,作为后端服务 cloudfunctions/myCloud/index.js exports.main = async (event, context) => ...

  3. GVim中以十六进制方式打开文件

    在windows下,有时我们想用GVim以十六进制形式来打开一个文件,下面就是不错的方法,将它作为一个右键菜单方式加入: 1. 将"GVim Hex"加入到右键菜单, 将以下内容添 ...

  4. android 闪光灯程序,如何在Android中以编程方式打开前闪光灯?

    在API 23或更高版本中(AndroidM,6.0)打开代码if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { CameraManage ...

  5. android 打开闪光灯,如何在Android中以编程方式打开前置闪光灯...

    对于这个问题,你应该: >检查手电筒是否是 可用与否? >如果是,则关闭/打开 >如果没有,那么根据你的应用,你可以做任何事情 需要. 要检查设备中闪存的可用性: 您可以使用以下内容 ...

  6. 在备份数据库过程中出现错误, 未能打开数据库‘msdb’, ‘msdb ‘ 数据库处于回避紧急模式!

    错误提示: 未能在数据库 'msdb' 中运行 BEGIN TRANSACTION,因为该数据库处于回避恢复模式. 服务器: 消息 3009,级别 16,状态 1,行 1 未能在 msdb 数据库中插 ...

  7. Swift 中使用 SQLite——打开数据库

    关于Swift中使用SQLite,接下来可能会分别从打开.增.删.改.查,几个方面来介绍SQLite的具体使用,这一篇重点介绍一下如何打开. 定义全局数据库访问句柄 /// 全局数据库访问句柄 pri ...

  8. Android Studio中通过SQLiteDatabase类操作数据库

    SQLite是一款轻型的数据库,主要用在嵌入式系统,它占用的资源非常低.SQLite不依赖第三方软件,也不需要安装.数据库中的信息都包含在一个文件中,这个文件可以自由地复制到其它目录或其它机器上. 在 ...

  9. Tips--tensorboard在win系统中jupyter notebook上打开方式

    tensorboard在win系统中jupyter notebook上打开方式 1. 问题描述 2. 解决方法 1. 问题描述 最近疫情吃紧,又没有把Linux本带回家,所以只能用Windows将就着 ...

最新文章

  1. poj1651(矩阵连乘)
  2. yolov5 v3.0训练出现KeyError错误
  3. java多个mapreduce_java – 在hadoop中运行多个MapReduce作业
  4. CNN 反向传播推导
  5. JSPServlet相关
  6. latex数学符号加粗_latex的安装与数学公式的书写
  7. 使用PageOffice---如何在模板中添加数据区域
  8. 信用证,保理,支付宝的模式和区别
  9. lol2.27服务器维护,lol2月27日维护公告
  10. 武汉申报|2022年洪山区科技企业梯次培育专项资金申报指南
  11. 一套图 搞懂“时间复杂度”
  12. 计算机exce常用功能,excel表格的基本操作 电脑基本操作知识(办公室常用).doc
  13. 常用中文字体的英文名称
  14. 怎样给公司定义一份完美的maven parent pom 文件
  15. 集线器、交换机以及路由器异同 + 冲突域和广播域详解
  16. 【转】3xian之所在
  17. 150万奖金:首届6G智能无线通信系统大赛正式上线
  18. 如何用虚拟机VMware安装win10/win7(最详细图解)
  19. Jquery-获取子元素children,find
  20. 极限编程(Extreme Programming)—走向极限

热门文章

  1. unix odbc php 连接sqlserver,Ubuntu下通过unixODBC连接MS SqlServer2005
  2. spring注解--@Bean
  3. (C++)A+B 输入输出练习VII 输入包含若干行,每行输入两个整数a和b,由空格分隔。 对于每组输入,输出a和b的和,每行输出后接一个空行。
  4. 循环map_python函数 map函数—比for还好用的循环
  5. oracle time格式化比较,ORACLE DATE和TIMESTAMP数据类型的比较(二) (转)
  6. 如何利用微信小游戏的分包加载机制突破4M代码包体积限制
  7. SpringMvc+ajax实现文件跨域上传
  8. 绿盟科技与CCF成立“鲲鹏”科研基金 计划发力5大领域资助16个项目
  9. #423 Div2 D
  10. add nodes to the swarm