国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

ODBC API常用函數詮釋

2024-07-21 02:40:12
字體:
來源:轉載
供稿:網友
 
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)

上一篇:logminer使用方法

下一篇:JOB 用法小結

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 曲水县| 同江市| 沈阳市| 东阳市| 阿鲁科尔沁旗| 射阳县| 三穗县| 逊克县| 常山县| 五大连池市| 房产| 鹤壁市| 清丰县| 连州市| 玛沁县| 油尖旺区| 乌审旗| 马边| 竹山县| 鸡东县| 历史| 法库县| 南平市| 刚察县| 荃湾区| 五原县| 综艺| 琼结县| 新晃| 理塘县| 虎林市| 东乡| 普兰县| 浦北县| 荆门市| 大埔区| 新民市| 绥化市| 衢州市| 靖江市| 盐城市|