v eax,TRUEretQueryProc endpend start 分析 start:invoke GetModuleHandle, NULLmov hInstance,eaxcall GetProgramPath
当程序开始时,将获得实例句柄并获得所在路径.默认情况下数据库 test.mdb应与程序处于同一文件夹.
GetProgramPath procinvoke GetModuleFileName, NULL,addr ProgPath,sizeof ProgPathstdmov edi,offset ProgPathadd edi,sizeof ProgPath-1mov al,"\"mov ecx,sizeof ProgPathrepne scasbcldmov byte ptr [edi+2],0retGetProgramPath endp
GetProgramPath调用GetModuleFileName来获得程序的全路径名.接着在路径中查找最后一个"\"符",通过将文件名的第一个字符置为0获得(truncate)" 文件名. 因此我们在ProgPath中获得了程序的路径名.
然后程序将用DialogBoxParam显示主对话框.当主对话框第一次被载入时,它将获得菜单句柄和listview control句柄.接下来在listview control中插入三列(因为我们已经知道结果集将包含三列.因为是我们先建的表.)
现在,它就等待用户的动作了.如果用户在菜单中选择"connect",将会调用ODBCConnect函数.
ODBCConnect proc hDlg:DWORDinvoke SQLAllocHandle, SQL_HANDLE_ENV, SQL_NULL_HANDLE, addr hEnv.if ax==SQL_SUCCESS || ax==SQL_SUCCESS_WITH_INFO
它做的第一件事是调用SQLAllocHandle来分配一个环境句柄.
invoke SQLSetEnvAttr, hEnv,SQL_ATTR_ODBC_VERSION, SQL_OV_ODBC3,0.if ax==SQL_SUCCESS || ax==SQL_SUCCESS_WITH_INFO
获得环境句柄后,程序调用SQLSetEnvAttr来表示将要使用ODBC 3.x的语法.
invoke SQLAllocHandle, SQL_HANDLE_DBC, hEnv, addr hConn.if ax==SQL_SUCCESS || ax==SQL_SUCCESS_WITH_INFO
如果一切顺利,程序将通过调用SQLAllocHandle获得连接句柄来实现连接.
invoke lstrcpy,addr ConnectString,addr strConnectinvoke lstrcat,addr ConnectString, addr ProgPathinvoke lstrcat, addr ConnectString,addr DBName
接着填写连接字符串.完整的连接字符串将被用在ConnectionString
invoke SQLDriverConnect, h上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] 下一页
|