⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jmodbc.asm

📁 驾驶员考试系统,汇编编写,qq332779423
💻 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 + -