📄 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 + -