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

📄 通讯录.asm

📁 软件名称:通讯录 作者:小样 软件说明:此软件主要针对ACCESS数据库的添加、删除、查询、修改等功能的实现。能够方便大家的通讯记录。希望能和大家很好的交流。 软件登录时无需密码
💻 ASM
📖 第 1 页 / 共 3 页
字号:
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;	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 + -