分享
 
 
 

ODBC API常用函数诠释

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

ODBC API常用函数诠释

记得kony曾经在我的这个坛子上转过一个帖子,解释使用ODBC数据源来连接数据库进行数据库操作速度慢的原因,同时那个帖子也提出了提高ODBC数据源连接数据库进行数据库操作速度的两个办法,一个是利用Visiual Basic中的RDO组件,

一个就是直接调用odbc api函数进行相关数据库操作,应答应过这里的弟弟妹妹们写点关于ODBC API函数方面的东东,所以只能赶鸭子上架了;

以下为ODBC API的常用十四个函数,先列出在PowerBuilder中外部函数引用声明:

function integer SQLAllocEnv(ref long phenv) library "odbc32.dll"

function integer SQLFreeEnv(long henv) library "odbc32.dll"

function integer SQLDataSources(long henv,int fdirection,ref string szdsn,&

integer cbdsnmax,ref integer pcbdsn,ref string szdescription,integer cbdescriptionmax,ref integer pcbdescription)library "odbc32.dll"

function integer SQLAllocConnect(long henv,ref long hdbc)library "odbc32.dll"

function integer SQLConnect (long hstmt,ref string szdsn,integer dsnlen,ref string

szuid,integer uidlen,ref string szpwd,integer pwdlen) library "odbc32.dll"

function integer SQLDisconnect (long hdbc) library "odbc32.dll"

function integer SQLAllocStmt(long hdbc,ref long hstmt)library "odbc32.dll"

function integer SQLTables(long hstmt,ref string sztablequalifier,integer tablequalifierlen,ref string szowner,integer owerlen,ref string szname,integer namelen,

ref string sztype,integer typelen)library "odbc32.dll"

function integer SQLColumns(long hstmt,ref string sztablequalifier,integer tablequalifierlen,ref string szowner,integer owerlen,ref string szname,integer namelen,

ref string sztype,integer typelen)library "odbc32.dll"

function integer SQLBindCol(long hstmt,integer colnum,integer datatype,ref string name,long maxlen,ref long actlen) library "odbc32.dll"

function integer SQLFetch(long hstmt)library "odbc32.dll"

function integer SQLError(long lenv,long hdbc,long hstmt,ref string sqlstate,ref long nativeerror,ref string errormsg,integer errormsgmax,ref integer errormsglen)library "odbc32.dll"

function integer SQLFreeStmt(long hstmt,integer Options)library "odbc32.dll"

1、function integer SQLAllocEnv(ref long phenv) library "odbc32.dll"

参数:ref long phenv 引用传递的long类型参数,保存该函数返回的OBDC环境的句柄。

存放在phenv中的值成为以后OBDC API函数调用的唯一标识符。

返回值:integer 成功时,返回0,失败返回值小于0。

函数功能:获取ODBC环境句柄。

2、function integer SQLAllocStmt(long hdbc,ref long hstmt)library "odbc32.dll"

参数:long hdbc ODBC环境的句柄。

Ref long hstmt 保存SQL语句句柄。

返回值:integer ,成功时,返回0,失败返回值小于0。

函数功能:获取SQL语句句柄。

3、function integer SQLConnect (long hstmt,ref string szdsn,integer dsnlen,ref string szuid,integer uidlen,

ref string szpwd,integer pwdlen) library "odbc32.dll"

参数:long hstmt ,调用SQLAllocStmt()函数获取的句柄。

Ref string szdsn,ODBC数据源名。

Integer dsnlen ,ODBC 数据源名的长度。

Ref string szuid ,用户帐号。

Integer uidlen ,用户帐号长度。

Ref string szpwd ,用户口令。

Ref integer pwdlen,用户口令长度。

返回值:integer ,成功时,返回值大于0,失败返回值小于0。

函数功能:连接ODBC数据源,并返回连接句柄。

4、 function integer SQLDisconnect (long hdbc) library "odbc32.dll"

参数:long hdbc 连接句柄。

返回值:integer ,成功时,返回0,失败返回值小于0。

函数功能:断开连接ODBC数据源。

5、 function integer SQLTables(long hstmt,ref string sztablequalifier,integer tablequalifierlen,ref string szowner,integer owerlen,ref string szname,integer namelen,ref string sztype,integer typelen)library "odbc32.dll"

参数:long hstmt SQL语句句柄

ref string sztablequalifier 表的qualifier名。

integer tablequalifierlen 表的qualifier名的长度。

ref string szowner 表的所有者名。

integer owerlen 表的所有者名长度。

ref string szname 表名。

integer namelen 表名长度。

ref string sztype 表的类型名。

integer typelen 表的类型名长度。

返回值:integer ,成功时,返回0,失败返回值小于0。

函数功能:获取表的信息。

6、 function integer SQLColumns(long hstmt,ref string sztablequalifier,integer tablequalifierlen,ref string szowner,integer owerlen,ref string szname,integer namelen, ref string sztype,integer typelen)library "odbc32.dll"

参数:long hstmt SQL语句句柄

ref string sztablequalifier 表的qualifier名。

integer tablequalifierlen 表的qualifier名的长度。

ref string szowner 表的所有者名。

integer owerlen 表的所有者名长度。

ref string szname 表名。

integer namelen 表名长度。

ref string sztype 表的类型名。

integer typelen 表的类型名长度。

返回值:integer ,成功时,返回0,失败返回值小于0。

函数功能:获取指定表的列信息。

7、Function integer SQLBindCol(long hstmt,integer colnum,integer datatype,ref string name,long maxlen,

ref long actlen) library "odbc32.dll"

参数:long hstmt SQL语句句柄

integer colnum 1-5(是否有资格,拥有者名字、类型、注释)。

integer datatype 1-8,12,99。

ref string name 程序字符串变量。

long maxlen 可变。

ref long actlen 可变。

返回值:integer ,成功时,返回0,失败返回值小于0。

函数功能:绑定结果集。

8、function integer SQLFetch(long hstmt)library "odbc32.dll"

参数:long hstmt SQL语句句柄

返回值:integer ,成功时,返回0,失败返回值小于0。

函数功能:绑定结果集。

9、function integer SQLError(long lenv,long hdbc,long hstmt,ref string sqlstate,ref long nativeerror,ref string errormsg,integer errormsgmax,ref integer errormsglen)library "odbc32.dll"

参数:long lenv ODBC 环境句柄

long hdbc 连接句柄

long hstmt sql语句句柄

ref string sqlstate 用于接受包含sql错误标识的字符串

ref long nativeerror用于接受包含sql错误标识码

ref string errormsg用于接受包含sql错误信息的字符串

integer errormsgmax 函数返回的最多字符数

ref integer errormsglen函数返回的实际字符数

返回值:integer ,成功时,返回0,失败返回值小于0。

函数功能:返回调用ODBC API函数错误。

10、function integer SQLFreeEnv(long henv) library "odbc32.dll"

参数:long lenv ODBC 环境句柄

返回值:integer ,成功时,返回0,失败返回值小于0。

函数功能:释放ODBC环境句柄。

11、function integer SQLFreeStmt(long hstmt,integer Options)library "odbc32.dll"

参数:long hstmt SQL语句句柄。

integer Options 相关选项。

返回值:integer ,成功时,返回0,失败返回值小于0。

函数功能:释放SQL语句句柄。

12、function integer SQLDataSources(long henv,int fdirection,ref string szdsn, integer cbdsnmax,ref integer pcbdsn,ref string szdescription,integer cbdescriptionmax,ref integer pcbdescription)library "odbc32.dll"

参数:long henv ODBC数据源环境句柄。

int fdirection 方向标志 1(下一个),2(第一个),3(最后一个),4(前一个)

ref string szdsn 数据源名称

integer cbdsnmax数据源名称的最大长度

ref integer pcbdsn数据源名称的实际长度

ref string szdescription 数据源描述名称

integer cbdescriptionmax 数据源描述字符串的最大长度

ref integer pcbdescription数据源描述字符串的实际长度

返回值:integer ,成功时,返回0,失败返回值小于0。

函数功能:释放SQL语句句柄。

13、function integer SQLAllocConnect(long henv,ref long hdbc)library "odbc32.dll"

参数:long henv ODBC数据源环境句柄。

ref long hdbc 保存ODBC连接句柄。

返回值:integer ,成功时,返回0,失败返回值小于0。

函数功能:获取ODBC连接句柄。

-:)上面总算将列出的几个ODBC API函数描述完,等有时间结合具体例子来说明如何利用ODBC API函数访问数据库了-:)

例程:

定义实例变量:

protected:

long henv//sql 环境句柄

long hstmt//sql语句句柄

long hdbc//sql 连接句柄

定义句柄外部函数引用:

function integer SQLAllocEnv(ref long phenv) library "odbc32.dll"

function integer SQLFreeEnv(long henv) library "odbc32.dll"

function integer SQLDataSources(long henv,int fdirection,ref string szdsn,&

integer cbdsnmax,ref integer pcbdsn,ref string szdescription,integer cbdescriptionmax,ref integer pcbdescription)library "odbc32.dll"

function integer SQLAllocConnect(long henv,ref long hdbc)library "odbc32.dll"

function integer SQLConnect (long hstmt,ref string szdsn,integer dsnlen,ref string

szuid,integer uidlen,ref string szpwd,integer pwdlen) library "odbc32.dll"

function integer SQLDisconnect (long hdbc) library "odbc32.dll"

function integer SQLAllocStmt(long hdbc,ref long hstmt)library "odbc32.dll"

function integer SQLTables(long hstmt,ref string sztablequalifier,integer tablequalifierlen,ref string szowner,integer owerlen,ref string szname,integer namelen,

ref string sztype,integer typelen)library "odbc32.dll"

function integer SQLColumns(long hstmt,ref string sztablequalifier,integer tablequalifierlen,ref string szowner,integer owerlen,ref string szname,integer namelen,

ref string sztype,integer typelen)library "odbc32.dll"

function integer SQLBindCol(long hstmt,integer colnum,integer datatype,ref string name,long maxlen,ref long actlen) library "odbc32.dll"

function integer SQLFetch(long hstmt)library "odbc32.dll"

function integer SQLError(long lenv,long hdbc,long hstmt,ref string sqlstate,ref long nativeerror,ref string errormsg,integer errormsgmax,ref integer errormsglen)library "odbc32.dll"

function integer SQLFreeStmt(long hstmt,integer Options)library "odbc32.dll"

声明一个函数wf_sqlerror()

代码如下:

string ls_sqlstate,ls_errormsg

integer li_errormsgmax,li_ret

long nativeerror

ls_errormsg=space(255)

ls_sqlstate=space(255)

li_ret=sqlerror(henv,hdbc,hstmt,ls_sqlstate,li_nativeerror,ls_errormsg,255,li_errormsgmax)

messagebox("ODBC:"+ls_sqlstate,ls_errormsg)

return

窗口的open

事件,写入如下代码:

string ls_dsn,ls_description

integer li_direction,li_dsnmax,li_dsn_len

integer li_descriptionmax,li_description_len,li_retval

ls_dsn=space(255)

li_dsnmax=len(li_dsn)

ls_description=space(255)

li_descriptionmax=len(ls_description)

if sqlallocenv(henv)=-1 then

wf_sqlerror()

else

li_driection=1

do while sqldatasources(henv,li_direction,ls_dsn,li_dsnmax,li_dsn_len,ls_description,li_descriptionmax,li_description_len)=0

lb_datasources.additem(ls_dsn0

loop

end if

窗口的close事件中写入如下代码:

sqldisconnect(hdbc)

sqlfreeenv(henv)

在cb_connect按钮的cliked事件中写入如下的代码:

integer li_ret

string ls_dsn,ls_uid,ls_pwd

string ls_qualifer,ls_owner,ls_name,ls_type,ls_table

long ll_len

ls_dsn=lb_datasources.selecteditem()

ls_uid=sle_uid.text

ls_pwd=sle_pwd.text

li_ret=sqlallocconnect(henv,hdbc)

if li_ret<0 then

wf_sqlerror()

else

li_ret=sqlconnect(hdbc,ls_dsn,len(ls_dsn),ls_uid,len(ls_uid),ls_pwd,len(ls_pwd))

if li_ret<0 then

wf_sqlerror()

else

li_ret=sqlallocstmt(hdbc,hstmt)

if li_ret<0 then

wf_sqlerror()

else

ls_type="’TABLE’,’VIEW’"

if cbx_systemtables.checked then

ls_type=ls_type+",’SYSTEM TABLE ’"

end if

li_ret=SQLTABLES(hstmt,ls_qualifier,len(ls_qualifier),ls_owner,len(ls_owner),ls_name,len(ls_name),ls_type,len(ls_type))

if li_ret<0 then

wf_sqlerror()

else

ls_table=space(255)

ll_len=255

sqlbincol(hstmt,3,1,ls_table,ll_len,ll_en)

lb_tables.setredraw(false)

do while sqlfetch(hstmt)=0

lb_tables.additem(ls_table)

loop

lb_tables.setredraw(true)

li_ret=sqlfreestmt(hstmt,0)

end if

end if

end if

end if

this.enabled=false

this.default=false

cbx_systemtables.enabled=false

在lb_datasources的selectionchanged事件中写入如下代码:

sle_uid.text=""

sle_pwd.text=""

sqldisconnect(hdbc)

cbx_systemtables.enabled=true

cb_connect.enabled=true

lb_columns.reset()

lb_tables.reset()

sle_uid.setfocus()

cb_connect.default=true

在lb_tables的selectionchanged事件中写入如下代码:

integer li_ret,li_len

string ls_qualifier,ls_owner,ls_name,ls_column,ls_colname,ls_type

long ll_maxlen

lb_columns.reset()

ls_qualifier=space(255)

ls_owner=space(255)

ls_column=space(255)

ls_colname=space(255)

ls_type=space(255)

ls_name=space(255)

ls_name=this.selecteditem()

li_ret=sqlcolumns(hstmt,ls_quanlifier,0,ls_owner,0,ls_name,len(ls_name),ls_column,0)

if li_ret<0 then

wf_sqlerror()

else

ls_colname=space(255)

ls_type=space(255)

ll_maxlen=255

sqlbindcol(hstmt,4,1,ls_colname,ll_maxlen,ll_maxlen)

sqlbindcol(hstmt,6,1,ls_type,ll_maxlen,ll_maxlen)

lb_columns.setredraw(false)

do while sqlfetch(hstmt)=0

lb_columns.additem(ls_colname+"~t"+ls_type)

loop

lb_columns.setredraw(true)

li_ret=sqlfreestmt(hstmt,0)

end if

在按钮cb_exit的clicked事件中写入以下代码:

close(parent)

在应用对象的open事件中写入以下代码:

open(w_odbc_data_sources)

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有