亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? odbc api sql.txt

?? 開放數據庫互連(ODBC)已經成為Client/Server數據庫應用系統中訪問遠程數據庫的一個標準。作為強大的前端開發工具,Visual Basic為開發者提供了多種訪問ODBC數據源的途徑,如JE
?? TXT
字號:
在VB中直接用ODBC API訪問數據庫
中國航空信息中心 吳斌 計算機世界 19980608

開放數據庫互連(ODBC)已經成為Client/Server數據庫應用系統中訪問遠程數據庫的一個標準。作為強大的前端開發工具,Visual Basic為開發者提供了多種訪問ODBC數據源的途徑,如JET數據庫引擎、ODBC API函數、RDO接口等。比較而言,直接使用ODBC API函數的編程難度最大,但獲得的存取數據庫的性能也最佳。

ODBC API函數的聲明方法
與使用其它動態庫函數一樣,在VB中使用ODBC API函數之前,必須事先聲明將要使用
的函數、常量和數據結構。ODBC API函數駐留在ODBC運行動態庫ODBC.DLL(16位)或ODBC
32.DLL(32位)中,該動態庫位于Windows子目錄system中。通常做法是在VB項目中單獨使
用一個模塊文件,然后將ODBC API聲明語句加入其中,下面就是本文實例中使用的模塊文
件module1.bas的內容:

Declare Function SQLAllocEnv Lib "odbc32.dll" (phenv&) As Integer
Declare Function SQLAllocConnect Lib "odbc32.dll" (ByVal henv&, phdbc&) As Integer
Declare Function SQLAllocStmt Lib "odbc32.dll" (ByVal hdbc&, phstmt&) AsInteger
Declare Function SQLConnect Lib "odbc32.dll" (ByVal hdbc&, ByVal szDSN$,ByVal cbDSN%, ByVal szUID$, ByVal cbUID%, ByVal szAuthStr$, ByVal cbAuthStr%) As Integer
Declare Function SQLColAttributesString Lib "odbc32.dll" Alias "SQLColAttributes" (ByVal hstmt&, ByVal icol%, ByVal fDescType%, ByVal rgbDesc As String, ByVal cbDescMax%, pcbDesc%, pfDesc&) As Integer
Declare Function SQLDisconnect Lib "odbc32.dll" (ByVal hdbc&) As Integer
Declare Function SQLExecDirect Lib "odbc32.dll" (ByVal hstmt&, ByVal szSqlStr$, ByVal cbSqlStr&) As Integer
Declare Function SQLFetch Lib "odbc32.dll" (ByVal hstmt&) As Integer
Declare Function SQLFreeConnect Lib "odbc32.dll" (ByVal hdbc&) As Integer
Declare Function SQLFreeEnv Lib "odbc32.dll" (ByVal henv&) As Integer
Declare Function SQLFreeStmt Lib "odbc32.dll" (ByVal hstmt&, ByVal fOption%) As Integer
Declare Function SQLGetData Lib "odbc32.dll" (ByVal hstmt&, ByVal icol%,ByVal fCType%, ByVal rgbValue As String, ByVal cbValueMax&, pcbValue&) As Integer
Declare Function SQLNumResultCols Lib "odbc32.dll" (ByVal hstmt&, pccol%) As Integer
Global Const SQL_C_CHAR As Long = 1
Global Const SQL_COLUMN_LABEL As Long = 18
Global Const SQL_DROP As Long = 1
Global Const SQL_ERROR As Long = -1
Global Const SQL_NO_DATA_FOUND As Long = 100
Global Const SQL_SUCCESS As Long = 0

需要說明的是,在函數聲明時,應該根據程序的運行環境選擇相應的動態庫。在VB子
目錄samples\remauto\db_odbc中有兩個文本文件ODBC16.TXT和ODBC32.TXT,分別存有所
有16位和32位ODBC API函數、常量和數據結構的聲明語句,編程時可以從中拷貝所需的聲
明語句。

使用ODBC API的編程方法
在VB中調用ODBC API函數訪問ODBC數據庫,代碼編寫一般按下列過程進行:
1.初始化ODBC
在這個過程中,應用程序將通過調用SQLAlloEnv函數初始化ODBC接口,獲取ODBC環境句柄。ODBC環境句柄是其它所有ODBC資源句柄的父句柄,因此無論程序將建立多少個ODBC連接,這個過程只需執行一次即可。例如:
Dim rc As Integer 'ODBC函數的返回碼
Dim henv As Long 'ODBC環境句柄
rc = SQLAllocEnv(henv) '獲取ODBC環境句柄
2.與ODBC數據源建立連接
這個過程由下列兩個步驟組成:
*S調用SQLAllocConnect函數獲取連接句柄。例如:
Dim hdbc As Long '連接句柄
rc = SQLAllocConnect(henv, hdbc) '獲取連接句柄
*S建立連接。這個步驟可以通過多種方法實現,最簡單直觀的方法是調用SQLConnect函數。例如:
Dim DSN As String, UID As String, PWD As String
DSN = "DataSourceName" 'ODBC數據源名稱
UID = "UserID"
'用戶帳號
PWD = "Password"
'用戶口令
rc = SQLConnect(hdbc, DSN, Len(DSN), UID, Len(UID), PWD, Len(PWD)) '建立
連接
3.存取數據
用戶對ODBC數據源的存取操作,都是通過SQL語句實現的。在這個過程中,應用程序將通過連接向ODBC數據庫提交SQL語句,完成用戶請求的操作,具體步驟如下:
*S調用SQLAllocStmt函數獲取語句句柄,例如:
Dim hstmt As Long
rc = SQLAllocStmt(hdbc, hstmt)
*S執行SQL語句。執行SQL語句的方法比較多,最簡單明了的方法是調用SQLAllocStmt函數,例如:
Dim SQLstmt As String
SQLstmt = "SELECT * FROM authors"
rc = SQLExecDirect(hstmt, SQLstmt, Len(SQLstmt))
4.檢索結果集
如果SQL語句順利提交并正確執行,那么就會產生一個結果集。檢索結果集的方法很多,最簡單、最直接的方法是調用SQLFetch和SQLGetData函數。SQLFetch函數的功能是將結果集的當前記錄指針移至下一個記錄,SQLGetData函數的功能是提取結果集中當前記錄的某個字段值。通常可以采用一個循環提取結果集中所有記錄的所有字段值,該循環重復執行SQLFetch和SQLGetData函數,直至SQLFetch函數返回SQL_NO_DATA_FOUND,這表示已經到達結果集的末尾。
Dim ColVal As String * 225
ColVal = String(255, 0)
Do Until SQLFetch(hstmt) = SQL_NO_DATA_FOUND
rc = SQLGetData(hstmt, i, SQL_C_CHAR, ColVal, Len(ColVal), SQL_NULL_DATA
Loop
5.結束應用程序
在應用程序完成數據庫操作、退出運行之前,必須釋放程序中使用的系統資源。這些系統資源包括:語句句柄、連接句柄和ODBC環境句柄。完成這個過程的步驟如下:
*S調用SQLFreeStmt函數釋放語句句柄及其相關的系統資源。例如:
rc = SQLFreeStmt(hstmt, SQL_DROP)
*S調用SQLDisconnect函數關閉連接,例如:
rc = SQLDisconnect(hdbc)
*S調用SQLFreeConnect函數釋放連接句柄及其相關的系統資源,例如:
rc = SQLFreeConnect(hdbc)
*S調用SQLFreeEnv函數釋放環境句柄及其相關的系統資源,停止ODBC操作,例如:
rc = SQLFreeEnv(henv)
此外,在編制程序時還有一個需要重點考慮的問題,這就是錯誤處理。所有ODBC API函數,若在執行期間發生錯誤,都將返回一個標準錯誤代碼SQL_ERROR。一般來講,在每次調用ODBC API函數之后,都應該檢查該函數返回值,確定該函數是否成功地執行,再決定是否繼續后續過程。而詳細的錯誤信息,可以調用SQLError函數獲得。SQLError函數將返回下列信息:
*S標準的ODBC錯誤狀態碼;
*SODBC數據源提供的內部錯誤編碼;
*S錯誤信息串。
簡單應用實例
本實例將編制一個客戶機端VB應用程序,通過Windows NT局域網查詢服務器端MS SQL Server 6.5樣板數據庫PUBS中的AUTHORS數據表,在一個Grid控件中顯示查詢結果。首先,使用Windows控制面板中的ODBC驅動管理器新建一個ODBC數據源,定義數據源名稱為ODBC_API_DEMO,定義登錄數據庫為PUBS,其它信息應根據用戶的環境正確設置。然后啟動VB,新建一個項目Project1,在缺省窗體Form1中加入一個Grid控件Grid1、兩個CommandButton控件cmdQuery和cmdClose,在Project1中插入一個模塊Module1,將前面列舉的聲明語句加入其中,程序代碼如下:
Private Sub Form_Load()
Dim rc As Integer
rc = SQLAllocEnv(henv)
If rc <> 0 Then
MsgBox "無法初始化ODBC"
End
End If
rc = SQLAllocConnect(henv, hdbc)
If rc <> 0 Then
MsgBox "無法獲得連接句柄"
rc = SQLFreeEnv(henv)
End
End If
Dim DSN As String, UID As String, PWD As String
DSN = "ODBC_API_DEMO"
UID = "guest"
PWD = ""
rc = SQLConnect(hdbc, DSN, Len(DSN), UID, Len(UID), PWD, Len(UID))
If rc = SQL_ERROR Then
MsgBox "無法建立與ODBC數據源的連接"
End
End If
End Sub
Private Sub cmdQuery_Click()
Dim hstmt As Long
Dim SQLstmt As String
Dim RSCols As Integer, RSRows As Long
Dim rc As Integer, i As Integer, j As Integer
Dim ColVal As String * 1024
Dim ColValLen As Long, ColLabLen As Integer, larg As Long
rc = SQLAllocStmt(hdbc, hstmt)
If rc <> SQL_SUCCESS Then
MsgBox "無法獲得SQL語句句柄"
Exit Sub
End If
SQLstmt = "SELECT * FROM authors"
rc = SQLExecDirect(hstmt, SQLstmt, Len(SQLstmt))
If rc <> SQL_SUCCESS Then
MsgBox "SQL語句執行失敗"
Exit Sub
End If
rc = SQLNumResultCols(hstmt, RSCols)
If RSCols > 1 Then
Grid1.Cols = RSCols
Grid1.Rows = 10
Grid1.Row = 0
Else
Exit Sub
End If
For i = 1 To RSCols
rc = SQLColAttributesString(hstmt, i, SQL_COLUMN_LABEL, ColVal, 255, Col
LabLen, larg)
Grid1.Col = i - 1
Grid1.Text = Left(ColVal, ColLabLen)
Next i
Do Until SQLFetch(hstmt) = SQL_NO_DATA_FOUND
ColVal = String$(1024, 0)
If Grid1.Row + 1 >= Grid1.Rows Then
Grid1.Rows = Grid1.Rows + 1
End If
Grid1.Row = Grid1.Row + 1
For i = 1 To RSCols
rc = SQLGetData(hstmt, i, SQL_C_CHAR, ColVal, Len(ColVal), ColValLen)
Grid1.Col = i - 1
Grid1.Text = Left$(ColVal, ColValLen)
Next i
Loop
rc = SQLFreeStmt(hstmt, SQL_DROP)
End Sub
Private Sub cmdClose_Click()
Dim rc As Integer
If hdbc <> 0 Then
rc = SQLDisconnect(hdbc)
End If
rc = SQLFreeConnect(hdbc)
If henv <> 0 Then
rc = SQLFreeEnv(henv)
End If
End
End Sub

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩五月天| 欧美猛男男办公室激情| 免费在线观看日韩欧美| 亚洲韩国精品一区| 亚洲裸体在线观看| 一区二区三区高清不卡| 亚洲欧洲精品一区二区三区不卡| 欧美激情综合网| 中文字幕一区二区三区不卡| 国产精品国产三级国产有无不卡 | 国产v日产∨综合v精品视频| 国产最新精品免费| 国产成人午夜视频| 99久精品国产| 欧美午夜免费电影| 91精品国产综合久久国产大片| 91精品久久久久久久99蜜桃 | 国产精品毛片a∨一区二区三区| 日韩欧美一区中文| 久久久国产精品不卡| 国产精品亲子乱子伦xxxx裸| 亚洲视频一区在线观看| 午夜视频在线观看一区| 久久99国产乱子伦精品免费| 国产精品一品视频| 色综合视频一区二区三区高清| 91国产视频在线观看| 91精品欧美久久久久久动漫 | 日本一区二区三区免费乱视频| 国产精品欧美经典| 亚洲高清免费在线| 激情成人综合网| caoporen国产精品视频| 欧美日韩不卡一区| 久久精品一区二区三区不卡| 亚洲女爱视频在线| 另类的小说在线视频另类成人小视频在线| 国产乱子伦视频一区二区三区 | 久久久久久99精品| 夜夜嗨av一区二区三区| 奇米色一区二区三区四区| 国产激情精品久久久第一区二区 | 欧美在线高清视频| 日韩欧美精品三级| 亚洲日本在线看| 久久精品99久久久| 欧美性大战xxxxx久久久| 精品国产免费一区二区三区四区 | 亚洲婷婷国产精品电影人久久| 午夜激情久久久| 99综合电影在线视频| 日韩免费一区二区| 香蕉av福利精品导航| 成人激情午夜影院| 欧美电视剧在线观看完整版| 亚洲综合一区在线| 97se亚洲国产综合自在线不卡| 欧美一区二区二区| 亚洲成精国产精品女| 成人中文字幕合集| 久久日一线二线三线suv| 亚洲国产成人av好男人在线观看| 成人国产精品免费网站| 欧美成人精品二区三区99精品| 亚洲电影一级片| 91色在线porny| 国产欧美日韩视频一区二区| 久久er99热精品一区二区| 欧美群妇大交群中文字幕| 一区二区三区成人| 97精品国产97久久久久久久久久久久 | 国产成人在线视频网站| 日韩欧美一级二级三级久久久| 亚洲福利国产精品| 欧美最新大片在线看 | 色综合久久六月婷婷中文字幕| 中文幕一区二区三区久久蜜桃| 狠狠色2019综合网| 久久久午夜精品理论片中文字幕| 美女视频免费一区| 欧美videofree性高清杂交| 天天综合网天天综合色| 国产欧美日韩视频在线观看| 国产成人精品亚洲午夜麻豆| 国产亚洲欧美在线| 成人免费视频app| 国产精品久久久久久久久快鸭| eeuss鲁片一区二区三区在线观看| 中文av字幕一区| 色综合网站在线| 亚洲影院免费观看| 91精品国产综合久久精品图片| 美日韩一区二区三区| 精品少妇一区二区三区视频免付费| 蓝色福利精品导航| 国产日韩一级二级三级| 99精品视频在线免费观看| 亚洲一区在线电影| 日韩三级伦理片妻子的秘密按摩| 国产一区啦啦啦在线观看| 国产精品人妖ts系列视频| 色综合久久久网| 美日韩一级片在线观看| 国产欧美视频一区二区三区| 91在线国内视频| 日本成人在线看| 国产精品午夜在线| 欧美日产国产精品| 国产精华液一区二区三区| 亚洲欧美日韩成人高清在线一区| 欧美三级韩国三级日本三斤| 久久国产尿小便嘘嘘尿| 亚洲欧洲av色图| 日韩一级黄色片| av影院午夜一区| 美女在线视频一区| 国产精品久久三区| 欧美一区二区三区免费视频| 成人免费视频一区二区| 日本成人在线一区| 亚洲精品精品亚洲| 久久久久久久久一| 精品视频1区2区| 成人动漫一区二区三区| 日韩av网站免费在线| 毛片一区二区三区| ...av二区三区久久精品| 欧美一区二区日韩一区二区| 91网址在线看| 国产成人精品免费一区二区| 日本午夜一区二区| 一区二区三区成人在线视频| 亚洲国产精品精华液2区45| 欧美一区二区女人| 欧美伊人久久久久久午夜久久久久| 韩国女主播成人在线| 日本中文字幕一区| 亚洲综合在线视频| 国产精品不卡在线观看| 国产亚洲视频系列| 精品日韩成人av| 91精品国产高清一区二区三区蜜臀 | 精品系列免费在线观看| 五月天激情综合网| 亚洲摸摸操操av| 国产精品久久久久久久久久免费看 | 久久精品一级爱片| 精品成人一区二区| 日韩精品影音先锋| 欧美一卡2卡3卡4卡| 欧美日韩久久久久久| 欧美三电影在线| 欧美无砖砖区免费| 欧美日韩精品系列| 91麻豆精品久久久久蜜臀 | 欧美一级淫片007| 777精品伊人久久久久大香线蕉| 日本精品裸体写真集在线观看| 91在线云播放| 91激情在线视频| 欧美系列亚洲系列| 欧美日韩国产在线观看| 欧美绝品在线观看成人午夜影视| 欧美亚洲一区二区在线| 欧美日韩亚洲不卡| 69久久夜色精品国产69蝌蚪网| 欧美高清你懂得| 精品免费国产一区二区三区四区| 精品免费国产二区三区 | 成人黄色小视频在线观看| 成人小视频在线| 日本精品一级二级| 欧美美女bb生活片| 久久综合国产精品| 亚洲成av人片www| 日本午夜一本久久久综合| 国内精品久久久久影院色| 国产精品白丝jk黑袜喷水| 成人伦理片在线| 欧美怡红院视频| 日韩午夜激情视频| 国产亚洲一区二区在线观看| 亚洲日本电影在线| 日韩成人午夜电影| 国产91综合一区在线观看| 欧美中文字幕一区二区三区 | 麻豆精品一区二区三区| 老司机午夜精品| 91免费视频观看| 91麻豆精品国产91久久久 | 综合色中文字幕| 日韩国产精品久久| 成人精品电影在线观看| 欧美日韩美少妇| 久久精品日产第一区二区三区高清版| 亚洲女同ⅹxx女同tv| 经典三级视频一区| 欧美日韩国产综合一区二区| 国产日产欧美一区二区视频| 亚洲不卡一区二区三区|