?? odbclib.asm
字號:
.data?
hEnv dd ?
hConn dd ?
hStmt dd ?
hAppendStmt dd ?
hCustStmt dd ?
StrLength dd ?
ConnectBuff db 1024 dup (?)
.data
Connect db "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=.\ODBC.mdb",0
;Connect db "DRIVER={Oracle ODBC Driver};uid=system;pwd=manager;dbq=subbureau",0
SQLStmt db "select * from MAIN",0
EnvError db "環境句柄建立錯誤!",0
VerError db "ODBC非3.0版本!",0
ConnError db "連接句柄建立錯誤!",0
ConnDBError db "數據庫連接失敗!",0
InitError db "ODBC初始化失敗,將退出程序!",0
StmtError db "SQL語句錯誤,請仔細檢查!",0
TitleName db "駕駛員考試系統",0
ROWS equ 1000 ; 指定行集數
RowStatusArray dw ROWS dup(?)
.code
InitOdbc proc hDlg:DWORD
invoke SQLAllocHandle, SQL_HANDLE_ENV, SQL_NULL_HANDLE, addr hEnv
.if !(ax==SQL_SUCCESS || ax==SQL_SUCCESS_WITH_INFO)
invoke MessageBox,hDlg,addr EnvError,addr TitleName,MB_OK
xor eax,eax
ret
.endif
invoke SQLSetEnvAttr, hEnv,SQL_ATTR_ODBC_VERSION, SQL_OV_ODBC3,0
.if !(ax==SQL_SUCCESS || ax==SQL_SUCCESS_WITH_INFO)
invoke MessageBox,hDlg,addr VerError,addr TitleName,MB_OK
invoke SQLFreeHandle, SQL_HANDLE_ENV, hEnv
xor eax,eax
ret
.endif
invoke SQLAllocHandle, SQL_HANDLE_DBC, hEnv, addr hConn
.if !(ax==SQL_SUCCESS || ax==SQL_SUCCESS_WITH_INFO)
invoke MessageBox,hDlg,addr ConnError,addr TitleName,MB_OK
invoke SQLFreeHandle, SQL_HANDLE_ENV, hEnv
xor eax,eax
ret
.endif
invoke SQLSetConnectAttr,hConn,SQL_ATTR_ODBC_CURSORS,SQL_CUR_USE_ODBC,0
invoke SQLDriverConnect, hConn, hDlg, addr Connect, sizeof Connect,\
addr ConnectBuff, sizeof ConnectBuff,addr StrLength, SQL_DRIVER_COMPLETE
.if !(ax==SQL_SUCCESS || ax==SQL_SUCCESS_WITH_INFO)
invoke MessageBox,hDlg,addr ConnDBError,addr TitleName,MB_OK
invoke SQLFreeHandle, SQL_HANDLE_DBC, hConn
invoke SQLFreeHandle, SQL_HANDLE_ENV, hEnv
xor eax,eax
ret
.endif
mov eax,TRUE
ret
InitOdbc endp
CreateStatementHandle proc
invoke SQLAllocHandle, SQL_HANDLE_STMT, hConn, addr hStmt
invoke SQLAllocHandle, SQL_HANDLE_STMT, hConn, addr hAppendStmt
invoke SQLAllocHandle, SQL_HANDLE_STMT, hConn, addr hCustStmt
invoke SQLSetStmtAttr,hStmt,SQL_ATTR_CONCURRENCY,SQL_CONCUR_ROWVER,0
invoke SQLSetStmtAttr,hStmt,SQL_ATTR_CURSOR_TYPE,SQL_CURSOR_KEYSET_DRIVEN,0
invoke SQLSetStmtAttr,hStmt,SQL_ATTR_ROW_ARRAY_SIZE,ROWS,0
invoke SQLSetStmtAttr,hStmt,SQL_ATTR_ROW_STATUS_PTR,addr RowStatusArray,0
ret
CreateStatementHandle endp
OpenRecordset proc hDlg:DWORD
invoke SQLExecDirect,hStmt,addr SQLStmt,sizeof SQLStmt
.if !(ax==SQL_SUCCESS || ax==SQL_SUCCESS_WITH_INFO)
invoke MessageBox,hDlg,addr StmtError,addr TitleName,MB_OK
invoke SQLFreeHandle, SQL_HANDLE_STMT, hStmt
invoke SQLFreeHandle, SQL_HANDLE_DBC, hConn
invoke SQLFreeHandle, SQL_HANDLE_ENV, hEnv
xor eax,eax
ret
.endif
mov eax,TRUE
ret
OpenRecordset endp
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -