以下为ODBC API常用十 4个先列出在PowerBuilder中外部引用声明:
function eger SQLAllocEnv(ref long phenv) library "odbc32.dll"
function eger SQLFreeEnv(long henv) library "odbc32.dll"
function eger SQLDataSources(long henv, fdirection,ref szdsn,&
eger cbdsnmax,ref eger pcbdsn,ref szdescription,eger cbdescriptionmax,ref eger pcbdescription)library "odbc32.dll"
function eger SQLAllocConnect(long henv,ref long hdbc)library "odbc32.dll"
function eger SQLConnect (long hstmt,ref szdsn,eger dsnlen,ref
szuid,eger uidlen,ref szpwd,eger pwdlen) library "odbc32.dll"
function eger SQLDisconnect (long hdbc) library "odbc32.dll"
function eger SQLAllocStmt(long hdbc,ref long hstmt)library "odbc32.dll"
function eger SQLTables(long hstmt,ref sztablequalier,eger tablequalierlen,ref szowner,eger owerlen,ref szname,eger namelen,
ref sztype,eger typelen)library "odbc32.dll"
function eger SQLColumns(long hstmt,ref sztablequalier,eger tablequalierlen,ref szowner,eger owerlen,ref szname,eger namelen,
ref sztype,eger typelen)library "odbc32.dll"
function eger SQLBindCol(long hstmt,eger colnum,eger datatype,ref name,long maxlen,ref long actlen) library "odbc32.dll"
function eger SQLFetch(long hstmt)library "odbc32.dll"
function eger SQLError(long lenv,long hdbc,long hstmt,ref sqlstate,ref long nativeerror,ref errormsg,eger errormsgmax,ref eger errormsglen)library "odbc32.dll"
function eger SQLFreeStmt(long hstmt,eger Options)library "odbc32.dll"
1、function eger SQLAllocEnv(ref long phenv) library "odbc32.dll"
参数:ref long phenv 引用传递long类型参数保存该返回OBDC环境句柄
存放在phenv中值成为以后OBDC API唯标识符
返回值:eger 成功时返回0失败返回值小于0
功能:获取ODBC环境句柄
2、function eger SQLAllocStmt(long hdbc,ref long hstmt)library "odbc32.dll"
参数:long hdbc ODBC环境句柄
Ref long hstmt 保存SQL语句句柄
返回值:eger ,成功时返回0失败返回值小于0
功能:获取SQL语句句柄
3、function eger SQLConnect (long hstmt,ref szdsn,eger dsnlen,ref szuid,eger uidlen,
ref szpwd,eger pwdlen) library "odbc32.dll"
参数:long hstmt ,SQLAllocStmt获取句柄
Ref szdsn,ODBC数据源名
Integer dsnlen ,ODBC 数据源名长度
Ref szuid ,用户帐号
Integer uidlen 用户帐号长度
Ref szpwd 用户口令
Ref eger pwdlen,用户口令长度
返回值:eger ,成功时返回值大于0失败返回值小于0
功能:连接ODBC数据源并返回连接句柄
4、 function eger SQLDisconnect (long hdbc) library "odbc32.dll"
参数:long hdbc 连接句柄
返回值:eger ,成功时返回0失败返回值小于0
功能:断开连接ODBC数据源
5、 function eger SQLTables(long hstmt,ref sztablequalier,eger tablequalierlen,ref szowner,eger owerlen,ref szname,eger namelen,ref sztype,eger typelen)library "odbc32.dll"
参数:long hstmt SQL语句句柄
ref sztablequalier 表qualier名
eger tablequalierlen 表qualier名长度
ref szowner 表所有者名
eger owerlen 表所有者名长度
ref szname 表名
eger namelen 表名长度
ref sztype 表类型名
eger typelen 表类型名长度
返回值:eger ,成功时返回0失败返回值小于0
功能:获取表信息
6、 function eger SQLColumns(long hstmt,ref sztablequalier,eger tablequalierlen,ref szowner,eger owerlen,ref szname,eger namelen, ref sztype,eger typelen)library "odbc32.dll"
参数:long hstmt SQL语句句柄
ref sztablequalier 表qualier名
eger tablequalierlen 表qualier名长度
ref szowner 表所有者名
eger owerlen 表所有者名长度
ref szname 表名
eger namelen 表名长度
ref sztype 表类型名
eger typelen 表类型名长度
返回值:eger ,成功时返回0失败返回值小于0
功能:获取指定表列信息
7、Function eger SQLBindCol(long hstmt,eger colnum,eger datatype,ref name,long maxlen,
ref long actlen) library "odbc32.dll"
参数:long hstmt SQL语句句柄
eger colnum 1-5(是否有资格拥有者名字、类型、注释)
eger datatype 1-81299
ref name 串变量
long maxlen 可变
ref long actlen 可变
返回值:eger ,成功时返回0失败返回值小于0
功能:绑定结果集
8、function eger SQLFetch(long hstmt)library "odbc32.dll"
参数:long hstmt SQL语句句柄
返回值:eger ,成功时返回0失败返回值小于0
功能:绑定结果集
9、function eger SQLError(long lenv,long hdbc,long hstmt,ref sqlstate,ref long nativeerror,ref errormsg,eger errormsgmax,ref eger errormsglen)library "odbc32.dll"
参数:long lenv ODBC 环境句柄
long hdbc 连接句柄
long hstmt sql语句句柄
ref sqlstate 用于接受包含sql标识串
ref long nativeerror用于接受包含sql标识码
ref errormsg用于接受包含sql信息串
eger errormsgmax 返回最多数
ref eger errormsglen返回实际数
返回值:eger ,成功时返回0失败返回值小于0
功能:返回ODBC API
10、function eger SQLFreeEnv(long henv) library "odbc32.dll"
参数:long lenv ODBC 环境句柄
返回值:eger ,成功时返回0失败返回值小于0
功能:释放ODBC环境句柄
11、function eger SQLFreeStmt(long hstmt,eger Options)library "odbc32.dll"
参数:long hstmt SQL语句句柄
eger Options 相关选项
返回值:eger ,成功时返回0失败返回值小于0
功能:释放SQL语句句柄
12、function eger SQLDataSources(long henv, fdirection,ref szdsn, eger cbdsnmax,ref eger pcbdsn,ref szdescription,eger cbdescriptionmax,ref eger pcbdescription)library "odbc32.dll"
参数:long henv ODBC数据源环境句柄
fdirection 方向标志 1(下个)2(第个)3(最后个)4(前个)
ref szdsn 数据源名称
eger cbdsnmax数据源名称最大长度
ref eger pcbdsn数据源名称实际长度
ref szdescription 数据源描述名称
eger cbdescriptionmax 数据源描述串最大长度
ref eger pcbdescription数据源描述串实际长度
返回值:eger ,成功时返回0失败返回值小于0
功能:释放SQL语句句柄
13、function eger SQLAllocConnect(long henv,ref long hdbc)library "odbc32.dll"
参数:long henv ODBC数据源环境句柄
ref long hdbc 保存ODBC连接句柄
返回值:eger ,成功时返回0失败返回值小于0
功能:获取ODBC连接句柄
上面总算将列出几个ODBC API描述完等有时间结合具体例子来介绍说明如何利用ODBC API访问数据库了
例程:
定义例子变量:
protected:
long henv//sql 环境句柄
long hstmt//sql语句句柄
long hdbc//sql 连接句柄
定义句柄外部引用:
function eger SQLAllocEnv(ref long phenv) library "odbc32.dll"
function eger SQLFreeEnv(long henv) library "odbc32.dll"
function eger SQLDataSources(long henv, fdirection,ref szdsn,&
eger cbdsnmax,ref eger pcbdsn,ref szdescription,eger cbdescriptionmax,ref eger pcbdescription)library "odbc32.dll"
function eger SQLAllocConnect(long henv,ref long hdbc)library "odbc32.dll"
function eger SQLConnect (long hstmt,ref szdsn,eger dsnlen,ref
szuid,eger uidlen,ref szpwd,eger pwdlen) library "odbc32.dll"
function eger SQLDisconnect (long hdbc) library "odbc32.dll"
function eger SQLAllocStmt(long hdbc,ref long hstmt)library "odbc32.dll"
function eger SQLTables(long hstmt,ref sztablequalier,eger tablequalierlen,ref szowner,eger owerlen,ref szname,eger namelen,
ref sztype,eger typelen)library "odbc32.dll"
function eger SQLColumns(long hstmt,ref sztablequalier,eger tablequalierlen,ref szowner,eger owerlen,ref szname,eger namelen,
ref sztype,eger typelen)library "odbc32.dll"
function eger SQLBindCol(long hstmt,eger colnum,eger datatype,ref name,long maxlen,ref long actlen) library "odbc32.dll"
function eger SQLFetch(long hstmt)library "odbc32.dll"
function eger SQLError(long lenv,long hdbc,long hstmt,ref sqlstate,ref long nativeerror,ref errormsg,eger errormsgmax,ref eger errormsglen)library "odbc32.dll"
function eger SQLFreeStmt(long hstmt,eger Options)library "odbc32.dll"
声明个wf_sqlerror
代码如下:
ls_sqlstate,ls_errormsg
eger 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)
窗口open 事件写入如下代码:
ls_dsn,ls_description
eger li_direction,li_dsnmax,li_dsn_len
eger 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)
sqlallocenv(henv)=-1 then
wf_sqlerror
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
窗口close事件中写入如下代码:
sqldisconnect(hdbc)
sqlfreeenv(henv)
在cb_connect按钮cliked事件中写入如下代码:
eger li_ret
ls_dsn,ls_uid,ls_pwd
ls_qualer,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)
li_ret<0 then
wf_sqlerror
li_ret=sqlconnect(hdbc,ls_dsn,len(ls_dsn),ls_uid,len(ls_uid),ls_pwd,len(ls_pwd))
li_ret<0 then
wf_sqlerror
li_ret=sqlallocstmt(hdbc,hstmt)
li_ret<0 then
wf_sqlerror
ls_type="’TABLE’,’VIEW’"
cbx_systemtables.checked then
ls_type=ls_type+",’SYSTEM TABLE ’"
end
li_ret=SQLTABLES(hstmt,ls_qualier,len(ls_qualier),ls_owner,len(ls_owner),ls_name,len(ls_name),ls_type,len(ls_type))
li_ret<0 then
wf_sqlerror
ls_table=space(255)
ll_len=255
sqlbincol(hstmt,3,1,ls_table,ll_len,ll_en)
lb_tables.redraw(false)
do while sqlfetch(hstmt)=0
lb_tables.additem(ls_table)
loop
lb_tables.redraw(true)
li_ret=sqlfreestmt(hstmt,0)
end
end
end
end
this.enabled=false
this.default=false
cbx_systemtables.enabled=false
在lb_datasourcesselectionchanged事件中写入如下代码:
sle_uid.text=""
sle_pwd.text=""
sqldisconnect(hdbc)
cbx_systemtables.enabled=true
cb_connect.enabled=true
lb_columns.re
lb_tables.re
sle_uid.focus
cb_connect.default=true
在lb_tablesselectionchanged事件中写入如下代码:
eger li_ret,li_len
ls_qualier,ls_owner,ls_name,ls_column,ls_colname,ls_type
long ll_maxlen
lb_columns.re
ls_qualier=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_quanlier,0,ls_owner,0,ls_name,len(ls_name),ls_column,0)
li_ret<0 then
wf_sqlerror
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.redraw(false)
do while sqlfetch(hstmt)=0
lb_columns.additem(ls_colname+"~t"+ls_type)
loop
lb_columns.redraw(true)
li_ret=sqlfreestmt(hstmt,0)
end
在按钮cb_exitclicked事件中写入以下代码:
close(parent)
在应用对象open事件中写入以下代码:
open(w_odbc_data_sources)
最新评论