常用api函数:ODBC API常用函数诠释



  以下为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)

Tags:  odbcapi phpodbc函数 odbc函数 常用api函数

延伸阅读

最新评论

发表评论