减小字体
增大字体
例程: 定义实例变量: 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)上一页 [1] [2]
|