当前位置:早雪网网络学院编程文档其他语言 → 国产DM4数据库ODBC编程指南

国产DM4数据库ODBC编程指南

减小字体 增大字体 作者:未知  来源:supcode.com收集整理  发布时间:2005-7-1 14:56:13
而这一切正因为ODBC,学习与掌握好ODBC,对于数据库应用系统的开发可以起到很好的帮助作用。 如何使用C++ Builder进行更广泛深入的数据库编程不在本手册的谈论范围之内,读者感兴趣可参考C++ Builder编程指南。 4.4 在PowerBuilder中通过ODBC访问DM4 PowerBuilder也是目前广泛使用的数据库应用系统主流开发工具,下面我们通过图例介绍如何在PowerBuilder中通过ODBC访问DM4数据库管理系统。 运行PowerBuilder8.0,其集成开发环境界面如图4.11所示。 图4.11PowerBuilder集成开发环境 点击DBProfile命令,得到如图4.12所示的对话框。 图4.12DBProfile对话框 选中ODBODBC,点击New按钮,如图4.13所示进行ODBCDBProfile的配置。 图4.13DBProfile配置 点击OK按钮,创建DM4DBProfile成功,如图4.14所示。 图4.14DBProfile配置成功 选中DM4,点击Connect按钮,点击Database命令,得到如图4.15所示的界面。 图4.15连接DM4数据源成功 客户就可以对DM4数据库进行访问了,如访问商场登记表,如图4.16所示。 图4.16浏览DM4数据源中的表数据 也可以浏览数据库的一些元信息,如图4.17所示。 图4.17浏览数据库元信息 这里简要介绍了在PowerBuilder中如何通过ODBC访问DM4数据库。PowerBuilder同样也是一个功能十分强大的数据库可视化开发工具,掌握它对设计与开发应用系统有着十分重要的帮助。读者如果感兴趣,可以参考PowerBuilder开发指南。 5 使用存储过程和函数 DM4允许用户创建和使用存储模块,下面介绍如何在DM4ODBC应用中使用存储过程和函数。 5.1 存储过程与函数字典信息的获取 DM4 ODBC3.0支持字典函数SQLProcedures的调用,用户可以调用此函数来获取DM4存储过程与函数的字典信息。 调用方法如下: SQLProcedures(stmt,“SYSTEM”,SQL_NTS,“SYSDBA”,SQL_NTS,“TEST_PROC”,SQL_NTS); 返回字典信息格式如表5.1。 表5.1:字典信息说明表 编号 字典项 相关说明 1 PROCEDURE_CAT 存储模块编目信息 2 PROCEDURE_SCHEM 存储模块模式信息 3 PROCEDURE_NAME 存储模块名 4 NUM_INPUT_PARAMS DM4暂时没有返回此项信息 5 NUM_OUTPUT_PARAMS DM4暂时没有返回此项信息 6 NUM_RESULT_SETS DM4暂时没有返回此项信息 7 REMARKS DM4暂时没有返回此项信息 8 PROCEDURE_TYPE 存储模块的类型 DM4 ODBC3.0支持字典函数SQLProcedureColums的调用,用于返回存储模块的参数信息。 调用方法如下: SQLProcedureColumns(stmt,“SYSTEM”,SQL_NTS,“SYSDBA”,SQL_NTS,“TEST_PROC”,SQL_NTS,NULL,0); 返回字典信息格式如表5.2。 表5.2:字典信息说明表 编号 字典项 相关说明 1 PROCEDURE_CAT 存储模块编目信息 2 PROCEDURE_SCHEM 存储模块模式信息 3 PROCEDURE_NAME 存储模块名 4 COLUMN_NAME 参数名 5 COLUMN_TYPE 参数的类型,即为输入参数还是输出参数 6 DATA_TYPE 参数的SQL数据类型 7 TYPE_NAME 参数的类型名 8 COLUMN_SIZE 参数的精度 9 BUFFER_LENGTH 参数所占用的字符长度 10 DECIMAL_DIGITS 参数的刻度 11 NUM_PREC_RADIX 仅对数值类型有效,仅为10或者2,如果为10表示为精确数字,如果为2表示为非精确数字 12 NULLABLE 参数是否接收空值标志 13 REMARK 参数说明 14 COLUMN_DEF 参数的缺省值 15 SQL_DATA_TYPE 参数的SQL数据类型 16 SQL_DATETIME_SUB 日期时间类型或者时间间隔类型的子代码 17 CHAR_OCTET_LENGTH 字符数据类型以字节计算的最大长度,非字符类型返回空值 18 ORDINAL_POSITION 参数的顺序 19 IS_NULLABLE 参数是否包含空值 5.2 存储模块的创建 用户可以使用SQLExecDirect函数执行创建存储模块的SQL语句来创建存储模块,如下例所示: SQLExecDirect(stmt, (SQLCHAR *)“create or replace procedure test_proc (c1 in int) ” “as ” “declare c2 int ” “begin ” “c2 := c1 + 100 ” “end;”, SQL_NTS); 5.3 存储模块的调用 调用存储模块的方法可以分为两种情况。 1.立即调用 如果存储过程需要设置参数,那么在调用存储模块的时候就已经为为所有的IN、INOUT类型的参数进行了赋值,带有OUT属性的参数的值是通过取得存储过程结果集的方法获取的。立即执行存储过程的示例如下: SQLExecDirect(stmt,(SQLCHAR*)”calltest_proc(123);”,SQL_NTS); 2.参数调用 这种调用方法指的是在调用模块的时候,其参数值用问号来代替,发送给服务器之后,服务器返回参数的准备信息,用户依据服务器返回的参数描述信息进行参数绑定,然后执行,其参数的处理方法与普通的参数处理方法相同。 DM4支持存储模块返回多个结果集的处理,多结果集的切换通过SQLMoreResult函数切换,下面通过一个实例来说明如何使用。 #include #include #include #include #include HENV env; HDBC dbc; HSTMT stmt; RETCODE ret; short i; short cols; char colname[129]; char coldata[256]; void main(void) { SQLAllocHandle(SQL_HANDLE_ENV, NULL, &env); SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER); SQLAllocHandle(SQL_HANDLE_DBC, env, &dbc); SQLConnect(dbc, (SQLCHAR *)"DM4", SQL_NTS, (SQLCHAR *)"SYSDBA", SQL_NTS, (SQLCHAR *)"SYSDBA", SQL_NTS); SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt); SQLExecDirect(stmt, (SQLCHAR *)"drop table test_table1;", SQL_NTS); SQLExecDirect(stmt, (SQLCHAR *)"drop table test_table2;", SQL_NTS); SQLExecDirect(stmt, (SQLCHAR *)"create table test_table1 (t1col int);", SQL_NTS); SQLExecDirect(stmt, (SQLCHAR *)"insert into test_table1 values(100);", SQL_NTS); SQLExecDirect(stmt, (SQLCHAR *)"create table test_table2 (t2col varchar(10));", SQL_NTS); SQLExecDirect(stmt, (SQLCHAR *)"insert into test_table2 values('hello!');", SQL_NTS); SQLExecDirect(stmt, (SQLCHAR *)"create or replace procedure test_proc as begin select * from test_table1 select * from test_table2 end;", SQL_NTS); SQLExecDirect(stmt, (SQLCHAR *)"call test_proc;

上一页  [1] [2] [3] [4] [5]  下一页

[数据载入中...] [返回上一页] [打 印]