ODBC API常用函式詮釋
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連線控制代碼。
例程:
定義例項變數:
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)