国产DM4数据库ODBC编程指南
,一个简单的描述,并选择你想要连接的数据库服务器的名字,使用的端口号,缺省使用的DB,验证登录用户ID真伪的方式,如果使用DMServer验证方式则需要输入登录数据源的ID以及密码等信息,选择系统提示信息的语种,以及选择是否使用DMServer的增强选项。
5.单击测试按钮测试你配置的数据源是否正确,得到数据源测试报告如图4.4所示,如果测试成功,可以单击确定按钮以保存你设置的新的系统数据源,如图4.5所示。
图4.4数据源测试报告
图4.5完成系统数据源的设置
6.单击确定按钮关闭ODBC数据源管理器对话框。
4.2 ODBC应用程序编写的基本步骤
应用程序使用ODBC访问数据源,可以按照以下几个基本步骤进行:
1.调用函数SQLAllocHandle申请环境、连接句柄,调用函数SQLSetEnvAttr设置环境句柄属性,调用函数SQLSetConnectAttr设置连接句柄属性,调用连接函数SQLConnect、SQLDriverConnect或SQLBrowseConnect连接相关的数据源。
2.调用函数SQLAllocHandle申请语句句柄,通过语句句柄应用程序可以执行SQL语句进行相关的SQL操作。调用函数SQLPrepare对SQL语句和操作进行准备,调用SQLDescribeCol、SQLDescribeParam等函数取得相关的描述信息,依据描述信息调用SQLBindCol、SQLBindParam等函数绑定相关的列和参数,然后调用SQLExecute执行SQL语句,实现相关的SQL操作。应用程序也可以调用函数SQLExecDirect直接执行SQL语句进行相关的SQL操作。
3.应用程序可以通过调用ODBC编目函数SQLTables、SQLColumns、SQLStatistics等取得数据源相关的字典信息。
4.如果连接属性自动提交选项设置为手动提交状态,应用程序可以调用函数SQLEndTran来提交或回滚事务,进行相关的事务处理。
5.调用函数SQLFreeHandle来释放申请的语句句柄。
6.调用函数SQLDisconnect来断开应用程序与数据源之间的连接。
7.调用函数SQLFreeHandle来释放申请的连接、环境句柄。
使用ODBC编程的基本步骤如图4.6所示。
图4.6直接使用ODBC函数开发应用程序的基本步骤
下面是一个调用DM4 ODBC3.0的简单实例:
#include
#include
#include
#include
#include
/* 检测返回代码是否为成功标志,当为成功标志返回TRUE,否则返回FALSE */
#define RC_SUCCESSFUL(rc) ((rc) == SQL_SUCCESS || (rc) == SQL_SUCCESS_WITH_INFO)
/* 检测返回代码是否为失败标志,当为失败标志返回TRUE,否则返回FALSE */
#define RC_NOTSUCCESSFUL(rc) (!(RC_SUCCESSFUL(rc)))
HENV henv; /* 环境句柄 */
HDBC hdbc; /* 连接句柄 */
HSTMT hsmt; /* 语句句柄 */
SQLRETURN sret; /* 返回代码 */
char szcode[6]; /* 厂商编号 */
long cbcode = 0;
char szname[21]; /* 厂商名 */
long cbname = 0;
char szasset[13]; /* 资产总值 */
long cbasset = 0;
char szaddress[11];/* 厂商地址 */
long cbaddress = 0;
void main(void)
{
/* 申请一个环境句柄 */
SQLAllocHandle(SQL_HANDLE_ENV, NULL, &henv);
/* 设置环境句柄的ODBC版本 */
SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);
/* 申请一个连接句柄 */
SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
SQLConnect(hdbc, (SQLCHAR *)"DM4", SQL_NTS, (SQLCHAR *)"SYSDBA", SQL_NTS, (SQLCHAR *)"SYSDBA", SQL_NTS);
/* 申请一个语句句柄 */
SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hsmt);
/* 立即执行查询厂商登记表的语句 */
SQLExecDirect(hsmt, (SQLCHAR *)"SELECT 厂商编号, 厂商名, 资产总值, 厂商地址 FROM 厂商登记;", SQL_NTS);
/* 绑定数据缓冲区 */
SQLBindCol(hsmt, 1, SQL_C_CHAR, szcode, sizeof(szcode), &cbcode);
SQLBindCol(hsmt, 2, SQL_C_CHAR, szname, sizeof(szname), &cbname);
SQLBindCol(hsmt, 3, SQL_C_CHAR, szasset, sizeof(szasset), &cbasset);
SQLBindCol(hsmt, 4, SQL_C_CHAR, szaddress, sizeof(szaddress), &cbaddress);
/* 取得数据并且打印数据 */
printf("厂商编号 厂商名 资产总值 厂商地址\n");
for (;;) {
sret = SQLFetchScroll(hsmt, SQL_FETCH_NEXT, 0);
if (sret == SQL_NO_DATA_FOUND)
break;
printf("%s %s %s %s\n", szcode, szname, szasset, szaddress);
}
/* 释放语句句柄 */
SQLFreeHandle(SQL_HANDLE_STMT, hsmt);
/* 断开与数据源之间的连接 */
SQLDisconnect(hdbc);
/* 释放连接句柄 */
SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
/* 释放环境句柄 */
SQLFreeHandle(SQL_HANDLE_ENV, henv);
}
4.3 在C++Builder中通过ODBC访问DM4
C++ Builder是由目前比较流行的数据库应用程序开发工具,能够通过ODBC进行可视化的数据库编程,下面通过一个实例简单的介绍一下如何使用C++ Builder进行可视化的数据库应用编程。
首先启动DM4服务器,创建一个名为DM4的ODBC数据源,启动C++ Builder5.0集成开发环境,如图4.7所示。
图4.7C++Builder集成开发环境
如图4.8所示,在Form1窗体中添加TTable、TDataSource、TDBGrid、TDBNavigator组件Table1、DataSource1、DBGrid1、DBNavigator1。
图4.8添加Table、DataSource等控件
选中Table1,设置属性DatabaseName为DM4,设置属性TableName为厂商登记,置属性Active为TRUE。选中DataSource1,设置属性DataSet为Table1。选中DBGrid1,设置属性DataSource为DataSource1。选中DBNavigator1,设置属性DataSource为DataSource1。得到结果如图4.9所示。
图4.9C++Builder可视化编程
点击运行命令,得到的运行结果如图4.10所示。
图4.10C++Builder编程实例运行结果
用C++ Builder开发工具可以开发各种各样的数据库应用系统,大大地简化了数据库应用系统的开发,界面美观,开发成本低,周期短,这些应用系统已经被广泛地应用于诸如金融、消防、医院、地理、天文等等大型综合数据服务系统中。

