?? jmodbc.asm
字號:
;作者 九芙蓉
;笑梅 改編
.data
Cursor db "cust",0
szErr_OpenRec db "這里有錯誤,請檢查!",0
TitleName db "ODBC數據庫管理系統",0
StmtError db "SQL語句錯誤,請仔細檢查!",0
EmptyRec db "沒有題目,請聯系老師!",0
Save db "保存",0
szAppend db "追加",0
ModError db "記錄修改失敗!",0
DelError db "記錄刪除失敗!",0
SQLStmt db "select * from Main",0
SQLAppStmt db "insert into main (TiGan,DaAnA,DaAnB,DaAnC,ZhQuDaAn) values (?,?,?,?,?)",0
SQLModStmt db "update main set TiGan=?,DaAnA=?,DaAnB=?,DaAnC=?,ZhQuDaAn=? WHERE CURRENT OF cust",0
SQLDelStmt db "DELETE FROM main where current of cust",0
ROWS equ 1000 ; 指定行集數
MyCharLen equ 64 ;題目最長為90個字45個漢字
.data?
hAppendStmt HANDLE ?
hCustStmt HANDLE ?
RowStatusArray dw ROWS dup(?)
retcode dw ?
TiGan db ROWS*MyCharLen*4 dup (?)
TiGan_Len dd ROWS dup (?)
DaAnA db ROWS*MyCharLen dup (?)
DaAnA_Len dd ROWS dup (?)
DaAnB db ROWS*MyCharLen dup (?)
DaAnB_Len dd ROWS dup (?)
DaAnC db ROWS*MyCharLen dup (?)
DaAnC_Len dd ROWS dup (?)
ZhQuDaAn dd ROWS dup (?)
ZhQuDaAn_Len dd ROWS dup (?)
bSave db ?
.code
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
;吳老師的用SQL_CURSOR_KEYSET_DRIVEN,羅云彬用SQL_CURSOR_STATIC,這里用羅的
invoke SQLSetStmtAttr,hStmt,SQL_ATTR_CURSOR_TYPE,SQL_CURSOR_STATIC,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 hWnd:DWORD
invoke SQLExecDirect,hStmt,addr SQLStmt,sizeof SQLStmt
.if !(ax==SQL_SUCCESS || ax==SQL_SUCCESS_WITH_INFO)
invoke MessageBox,hWnd,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
DisplayRecordAtControl proc uses esi hDlg:DWORD,Num:DWORD
dec Num
lea esi,TiGan
xor eax,eax
mov eax,256
mul Num
add esi,eax
invoke SetWindowText,hTiGan,esi
lea esi,DaAnA
xor eax,eax
mov eax,256
mul Num
add esi,eax
invoke SetWindowText,hDaAnA,esi
lea esi,DaAnB
xor eax,eax
mov eax,256
mul Num
add esi,eax
invoke SetWindowText,hDaAnB,esi
lea esi,DaAnC
xor eax,eax
mov eax,256
mul Num
add esi,eax
invoke SetWindowText,hDaAnC,esi
lea esi,ZhQuDaAn
mov al,1
mul Num
add esi,eax
xor eax,eax
mov al,byte ptr [esi]
.if al==0
invoke SendMessage,hZhQuDaAn,CB_SETCURSEL,0,0
.elseif al==1
invoke SendMessage,hZhQuDaAn,CB_SETCURSEL,1,0
.elseif al==2
invoke SendMessage,hZhQuDaAn,CB_SETCURSEL,2,0
.endif
ret
DisplayRecordAtControl endp
BindColVariable proc hS:DWORD
invoke SQLBindCol,hS,1,SQL_C_CHAR,addr TiGan,256,addr TiGan_Len
invoke SQLBindCol,hS,2,SQL_C_CHAR,addr DaAnA,256,addr DaAnA_Len
invoke SQLBindCol,hS,3,SQL_C_CHAR,addr DaAnB,256,addr DaAnB_Len
invoke SQLBindCol,hS,4,SQL_C_CHAR,addr DaAnC,256,addr DaAnC_Len
invoke SQLBindCol,hS,5,SQL_C_STINYINT,addr ZhQuDaAn,1,addr ZhQuDaAn_Len
ret
BindColVariable endp
BindParamVariable proc hs:DWord
invoke SQLBindParameter,hs, 1, SQL_PARAM_INPUT, SQL_C_CHAR,SQL_CHAR, 255, 0, addr TiGan, sizeof TiGan, addr TiGan_Len
invoke SQLBindParameter,hs, 2, SQL_PARAM_INPUT, SQL_C_CHAR,SQL_CHAR, 255, 0, addr DaAnA, sizeof DaAnA, addr DaAnA_Len
invoke SQLBindParameter,hs, 3, SQL_PARAM_INPUT, SQL_C_CHAR,SQL_CHAR, 255, 0, addr DaAnB, sizeof DaAnB, addr DaAnB_Len
invoke SQLBindParameter,hs, 4, SQL_PARAM_INPUT, SQL_C_CHAR,SQL_CHAR, 255, 0, addr DaAnC, sizeof DaAnC, addr DaAnC_Len
invoke SQLBindParameter,hs, 5, SQL_PARAM_INPUT, SQL_C_STINYINT,SQL_TINYINT, 1, 0, addr ZhQuDaAn, sizeof ZhQuDaAn,addr ZhQuDaAn_Len
ret
BindParamVariable endp
GetParam proc hDlg:DWORD
invoke GetWindowText,hTiGan,addr TiGan,255
invoke lstrlen,addr TiGan
mov TiGan_Len,eax
invoke GetWindowText,hDaAnA,addr DaAnA,255
invoke lstrlen,addr DaAnA
mov DaAnA_Len,eax
invoke GetWindowText,hDaAnB,addr DaAnB,255
invoke lstrlen,addr DaAnB
mov DaAnB_Len,eax
invoke GetWindowText,hDaAnC,addr DaAnC,255
invoke lstrlen,addr DaAnC
mov DaAnC_Len,eax
invoke SendMessage,hZhQuDaAn,CB_GETCURSEL,0,0
.if eax==0
mov ZhQuDaAn,0
.elseif eax==1
mov ZhQuDaAn,1
.elseif eax==2
mov ZhQuDaAn,2
.endif
mov ZhQuDaAn_Len,1
ret
GetParam endp
RefreshList proc hDlg:DWORD
invoke SQLCloseCursor,hStmt
invoke OpenRecordset,hDlg
invoke SQLFetchScroll,hStmt,SQL_FETCH_FIRST,0
mov retcode,ax
.while (retcode!=SQL_ERROR && retcode!=SQL_NO_DATA)
invoke SQLFetchScroll,hStmt,SQL_FETCH_NEXT,0
mov retcode,ax
.endw
invoke SQLFetchScroll,hStmt,SQL_FETCH_FIRST,0
ret
RefreshList endp
ButtEnable proc log:dword
invoke EnableWindow,hModify,log
invoke EnableWindow,hDelete,log
invoke EnableWindow,hFirst,log
invoke EnableWindow,hNext,log
invoke EnableWindow,hPre,log
invoke EnableWindow,hLast,log
ret
ButtEnable endp
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -