📄 通讯录.asm
字号:
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Current Version -- Ver 1.0 测试版 (2005.4)
; CopyRight By 小样
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 使用 nmake 或下列命令进行编译和链接:
; ml /c /coff 通讯录.asm
; rc 通讯录.rc
; link /subsystem:windows 通讯录.obj 通讯录.res
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.386
.model flat,stdcall
option casemap:none
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
include gdi32.inc
includelib gdi32.lib
include odbc32.inc
includelib odbc32.lib
include shell32.inc
includelib shell32.lib
ICO_MAIN EQU 1
ICO_2 EQU 3
ICO_3 EQU 4
DLG_MAIN EQU 2
DLG_ADD EQU 3
DLG_ABOUT EQU 5
DLG_MESSAGE EQU 6
DLG_DELETE EQU 7
DLG_MODIFYKEY EQU 8
DLG_LOGIN EQU 9
DLG_MODIFY EQU 10
IDC_HELPZ EQU 100
IDC_ZHK EQU 200
IDC_ADD EQU 201
IDC_DEL EQU 202
IDC_ABOUT EQU 203
IDC_FIND EQU 204
IDC_FINDNAME EQU 205
IDC_TIME EQU 206
IDC_MODIFYKEY EQU 207
IDC_NAME EQU 210
IDC_QQ EQU 211
IDC_EMAIL EQU 212
IDC_HANDM EQU 213
IDC_TP EQU 214
IDC_CODE EQU 215
IDC_ADDRESS EQU 216
IDC_MESSAGE EQU 217
IDC_MAINM EQU 220
IDC_XNAME EQU 310
IDC_XQQ EQU 311
IDC_XEMAIL EQU 312
IDC_XHAND EQU 313
IDC_XTP EQU 314
IDC_XCODE EQU 315
IDC_XADDRESS EQU 316
IDC_XMESSAGE EQU 317
IDC_XMAIN EQU 320
IDC_MODIFY EQU 321
IDC_DELL EQU 410
IDC_DELALL EQU 411
IDC_LISTBOX EQU 412
IDC_OLDKEY EQU 510
IDC_NEWKEY EQU 511
IDC_YESNEWKEY EQU 512
IDC_YMODIFY EQU 513
IDC_NMODIFY EQU 514
IDC_LOGINKEY EQU 610
IDC_LOGIN EQU 611
IDC_TC EQU 612
ROWS EQU 20000 ;指定记录集的行数
.data?
hInstance dd ?
hico dd ?
hidok dd ?
henv dd ?
hconn dd ?
connectstring db 1024 dup(?)
conn db 256 dup(?)
strlen dd ?
progpath db 256 dup(?)
hstmt dd ?
hname db 128 dup(?)
hqq db 128 dup(?)
hemail db 128 dup(?)
hhand db 128 dup(?)
htp db 128 dup(?)
hcode db 64 dup(?)
haddress db 128 dup(?)
hmain db 128 dup(?)
hmessage db 512 dup(?)
namelen dd ?
qqlen dd ?
emaillen dd ?
handlen dd ?
tplen dd ?
codelen dd ?
addresslen dd ?
mainlen dd ?
messagelen dd ?
hzhk db ROWS dup(?)
zhklen dd ROWS dup(?)
namebuf db 128 dup(?)
namebuflen dd ?
namedel db 128 dup(?)
namedellen dd ?
htest db ?
htest1 db ?
hword1 db 128 dup(?)
word1len dd ?
oldkey db 128 dup(?)
oldkeylen dd ?
newkey db 128 dup(?)
ynewkey db 128 dup(?)
ynewkeylen dd ?
hflat db ?
holdkey db 128 dup(?)
holdkeylen dd ?
loginkey db 128 dup(?)
hname1 db 128 dup(?)
.data
strconnect db "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=",0
dbname db "data\test.mdb",0
SQLAppStmt db "insert into main (name,qq,email,hand,tp,code,address,mainm,message) values (?,?,?,?,?,?,?,?,?)",0
SQLAppStmt1 db "insert into word (password) values (?)",0
SQLnameStmt db "select name from main",0
SQLfindStmt db "select * from main where name=?",0
SQLfindStmt1 db "select * from word",0
SQLdelStmt db "delete from main where name=?",0
SQLdelStmt1 db "delete from word where password=?",0
SQLdelallStmt db "delete from main",0
connectcaption db "Complete Connecting String",0
appname db "ODBC Test",0
connfail db "Connection attempt failed",0
allocconnfail db "Connection handle allocation failed",0
setattrfail db "Cannot set desired ODBC version",0
allocenvfail db "Environment handle allocation failed",0
allocstmtfail db "Connection stmt allocation failed",0
connectstmt db "ODBC stmt",0
sformat0 db '%04d年%02d月%02d日',0
sformat1 db ' * 星期一 * %02d:%02d:%02d',0
sformat2 db ' * 星期二 * %02d:%02d:%02d',0
sformat3 db ' * 星期三 * %02d:%02d:%02d',0
sformat4 db ' * 星期四 * %02d:%02d:%02d',0
sformat5 db ' * 星期五 * %02d:%02d:%02d',0
sformat6 db ' * 星期六 * %02d:%02d:%02d',0
sformat7 db ' * 星期日 * %02d:%02d:%02d',0
sabout db '通讯录',0
stext db '徐州师范大学 周洛成',0
zlc db "语句句柄创建失败!",0
nomessage db "无",0
noname db "姓名不能为空,请输入用户的名字!",0
deltext db "确认要删除这一条记录吗?",0
delcaption db "删除选项",0
delalltext db "此执行将要删除“全部记录”!且无法恢复!!!",13,10
db " 确认要进行删除吗?",0
find db "查询失败",0
findfail db "没有查找到您所要的记录,请重新输入要查找的姓名",0
erroroldkey db "旧密码输入错误,请重新输入!",0
modifykey db "修改密码",0
errornewkey db "新密码输入不一致,请重新输入!",0
login db "登陆失败",0
errorlogin db "密码输入错误,请重新输入!",0
nameerrormod db "名字项不能被修改,请修改其它项!",0
nameerrorm db "修改错误",0
sadd db "添加选项",0
keyok db '密码修改成功!',0
.code
;**************设置创建数据库的路径********************************************
_GetProgramPath proc
invoke GetModuleFileName,NULL,addr progpath,sizeof progpath
std
mov edi,offset progpath
add edi,sizeof progpath-1
mov al,"\"
mov ecx,sizeof progpath
repne scasb
cld
mov byte ptr [edi+2],0
ret
_GetProgramPath endp
;**************建立与数据库test.mdb的连接**************************************
_odbcconnect proc hWnd:DWORD
invoke SQLAllocHandle,SQL_HANDLE_ENV,SQL_NULL_HANDLE,addr henv
.if ax==SQL_SUCCESS || ax==SQL_SUCCESS_WITH_INFO
invoke SQLSetEnvAttr,henv,SQL_ATTR_ODBC_VERSION,SQL_OV_ODBC3,0
.if ax==SQL_SUCCESS || ax==SQL_SUCCESS_WITH_INFO
invoke SQLAllocHandle,SQL_HANDLE_DBC,henv,addr hconn
.if ax==SQL_SUCCESS || ax==SQL_SUCCESS_WITH_INFO
invoke SQLSetConnectAttr,hconn,SQL_ATTR_ODBC_CURSORS,SQL_CUR_USE_ODBC,0
invoke lstrcpy,addr connectstring,addr strconnect
invoke lstrcat,addr connectstring,addr progpath
invoke lstrcat,addr connectstring,addr dbname
invoke SQLDriverConnect,hconn,hWnd,addr connectstring,sizeof connectstring,\
addr conn,sizeof conn,addr strlen,SQL_DRIVER_COMPLETE
.if ax==SQL_SUCCESS || ax==SQL_SUCCESS_WITH_INFO
invoke SQLAllocHandle,SQL_HANDLE_STMT,hconn,addr hstmt
.if !(ax==SQL_SUCCESS || ax==SQL_SUCCESS_WITH_INFO)
invoke MessageBox,hWnd,addr zlc,addr zlc,MB_OK OR MB_ICONERROR
.endif
.else
invoke SQLFreeHandle,SQL_HANDLE_DBC,hconn
invoke SQLFreeHandle,SQL_HANDLE_ENV,henv
invoke MessageBox,hWnd,addr connfail,addr appname,MB_OK OR MB_ICONERROR
.endif
.else
invoke SQLFreeHandle,SQL_HANDLE_ENV,henv
invoke MessageBox,hWnd,addr allocconnfail,addr appname,MB_OK OR MB_ICONERROR
.endif
.else
invoke SQLFreeHandle,SQL_HANDLE_ENV,henv
invoke MessageBox,hWnd,addr setattrfail,addr appname,MB_OK OR MB_ICONERROR
.endif
.else
invoke MessageBox,hWnd,addr allocenvfail,addr appname,MB_OK OR MB_ICONERROR
.endif
ret
_odbcconnect endp
;*****************设置关于对话框***********************************************
_DIALOGABOUT proc uses ebx esi edi hWnd,uMsg,wParam,lParam
.if uMsg==WM_CLOSE
invoke EndDialog,hWnd,NULL
.elseif uMsg==WM_INITDIALOG
invoke SendMessage, hWnd, WM_SETICON, ICON_BIG, hico
.elseif uMsg==WM_COMMAND
mov eax,wParam
.if ax==IDOK
invoke EndDialog,hWnd,NULL
.elseif ax==IDC_HELPZ
invoke ShellAbout,hWnd,offset sabout,offset stext,hico
.endif
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
_DIALOGABOUT endp
;*******************设置登陆界面***********************************************
_DLGLOGIN proc uses ebx esi edi hWnd,uMsg,wParam,lParam
.if uMsg==WM_CLOSE
mov byte ptr hflat,1
invoke EndDialog,hWnd,NULL
.elseif uMsg==WM_INITDIALOG
invoke LoadIcon,hInstance,ICO_3
invoke SendMessage, hWnd, WM_SETICON, ICON_BIG,eax
.elseif uMsg==WM_COMMAND
mov eax,wParam
.if ax==IDC_TC
mov byte ptr hflat,1
invoke EndDialog,hWnd,NULL
.elseif ax==IDC_LOGIN
invoke _odbcconnect,hWnd
invoke SQLExecDirect,hstmt,addr SQLfindStmt1,sizeof SQLfindStmt1
.if ax==SQL_SUCCESS || ax==SQL_SUCCESS_WITH_INFO
invoke SQLBindCol,hstmt,2,SQL_C_CHAR,addr holdkey,50,addr holdkeylen
invoke SQLFetch,hstmt
invoke SQLDisconnect, hconn
invoke SQLFreeHandle, SQL_HANDLE_DBC, hconn
invoke SQLFreeHandle, SQL_HANDLE_ENV, henv
invoke GetDlgItemText,hWnd,IDC_LOGINKEY,addr loginkey,sizeof loginkey
invoke lstrcmp,addr loginkey,addr holdkey
.if eax!=0
invoke MessageBox,hWnd,addr errorlogin,addr login,MB_OK or MB_ICONHAND
jmp @F
.else
mov byte ptr hflat,0
invoke EndDialog,hWnd,NULL
.endif
.endif
@@: .endif
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
_DLGLOGIN endp
;*******************设置"修改密码"对话框***************************************
_DLGMODIFYKEY proc uses ebx esi edi hWnd,uMsg,wParam,lParam
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -