亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? odbc-e5.htm

?? odbc教程真的很不錯
?? HTM
?? 第 1 頁 / 共 2 頁
字號:
<html>
<head>
<title>ODBC Programming Tutorial: An ODBC Example</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body bgcolor="#000000" text="#FFFFFF" link="#FFFFCC" vlink="#FFCCCC" alink="#CCFFCC">
<h1 align="center"><font face="Tahoma" color="#FFFFCC">An ODBC Example</font></h1>
<p><font face="Tahoma" size="-1">In this tutorial, we will put everything we have 
  learned so far together. Specifically, we will code a program that makes use 
  of ODBC APIs. For simplicity, I choose Microsoft Access database (Microsoft 
  Access 97) for this program.</font></p>
<p><font face="Tahoma" size="-1">Download <a href="../files/odbc5.zip"><b>the example</b></a>. 
  </font></p>
<p><font face="Tahoma" size="-1"><b><font color="#FFFFCC">Note</font></b>: If 
  you use windows.inc version 1.18 or below, you have to fix a small bug before 
  you can assemble the example. Search windows.inc for &quot;SQL_NULL_HANDLE&quot;. 
  You'll find the line:</font></p>
<p><font face="Tahoma" size="-1"><b><font color="#CCFFCC">SQL_NULL_HANDLE equ 
  0L</font></b></font></p>
<p><font face="Tahoma" size="-1">Delete the &quot;L&quot; following 0, like this:</font></p>
<p><font face="Tahoma" size="-1" color="#CCFFCC"><b>SQL_NULL_HANDLE equ 0</b></font></p>
<p><font face="Tahoma" size="-1"> This program is a dialog-based one with a simple 
  menu. When the user selects &quot;connect&quot;, it tries to connect to test.mdb, 
  our database. After the connection was successful, it displays the final complete 
  connection string returned by the ODBC driver. After that, the user can select 
  &quot;View All Records&quot;, to populate the listview control with all data 
  in the database. Alternatively, the user can select &quot;Query&quot; to search 
  for a specific record. The program will present a small dialog box prompting 
  the user to type the name of the person he wants to search. When the user presses 
  OK button or just kits the return key, the program runs a query to select the 
  record(s) that match(es) the name. When the user is done, he can select &quot;disconnect&quot; 
  to disconnect from the database.</font></p>
<p><font face="Tahoma" size="-1">Now let's see the source code:</font></p>
<pre><font face="Tahoma"><b>.386
.model flat,stdcall
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\odbc32.inc
include \masm32\include\comctl32.inc
include \masm32\include\user32.inc
includelib \masm32\lib\odbc32.lib
includelib \masm32\lib\comctl32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib

IDD_MAINDLG                     equ 101
IDR_MAINMENU                   equ  102
IDC_DATALIST                   equ  1000
IDM_CONNECT                     equ 40001
IDM_DISCONNECT                 equ 40002
IDM_QUERY                       equ 40003
IDC_NAME                        equ 1000
IDC_OK                          equ 1001
IDC_CANCEL                     equ 1002
IDM_CUSTOMQUERY                 equ 40004
IDD_QUERYDLG                    equ 102


DlgProc proto hDlg:DWORD, uMsg:DWORD, wParam:DWORD, lParam:DWORD
QueryProc proto hDlg:DWORD, uMsg:DWORD, wParam:DWORD, lParam:DWORD
SwitchMenuState proto :DWORD
ODBCConnect proto :DWORD
ODBCDisconnect proto :DWORD
RunQuery proto :DWORD

.data?
hInstance dd ?
hEnv dd ?
hConn dd ?
hStmt dd ?
Conn db 256 dup(?)
StrLen dd ?
hMenu dd ?	; handle to the main menu
hList dd ?		; handle to the listview control
TheName db 26 dup(?)
TheSurname db 26 dup(?)
TelNo db 21 dup(?)
NameLength dd ?
SurnameLength dd ?
TelNoLength dd ?
SearchName db 26 dup(?)
ProgPath db 256 dup(?)
ConnectString db 1024 dup(?)

.data
SQLStatement db "select * from main",0
WhereStatement db " where name=?",0
strConnect db  "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=",0
DBName db "test.mdb",0
ConnectCaption db "Complete Connection String",0
Disconnect db "Disconnect successful",0
AppName db "ODBC Test",0
AllocEnvFail db "Environment handle allocation failed",0
AllocConnFail db "Connection handle allocation failed",0
SetAttrFail db "Cannot set desired ODBC version",0
NoData db "You must type the name in the edit box",0
ExecuteFail db "Execution of SQL statement failed",0
ConnFail db "Connection attempt failed",0
AllocStmtFail db "Statement handle allocation failed",0
Heading1 db "Name",0
Heading2 db "Surname",0
Heading3 db "Telephone No.",0

.code
start:
	invoke GetModuleHandle, NULL
	mov hInstance,eax
	call GetProgramPath
	invoke DialogBoxParam, hInstance, IDD_MAINDLG,0,addr DlgProc,0
	invoke ExitProcess,eax
	invoke InitCommonControls
DlgProc proc hDlg:DWORD, uMsg:DWORD, wParam:DWORD, lParam:DWORD
	.if uMsg==WM_INITDIALOG
		invoke GetMenu, hDlg
		mov hMenu,eax
		invoke GetDlgItem, hDlg, IDC_DATALIST
		mov hList,eax
		call InsertColumn
	.elseif uMsg==WM_CLOSE
		invoke GetMenuState, hMenu, IDM_CONNECT,MF_BYCOMMAND
		.if eax==MF_GRAYED
			invoke ODBCDisconnect, hDlg
		.endif
		invoke EndDialog,hDlg, 0
	.elseif uMsg==WM_COMMAND
		.if lParam==0
			mov eax,wParam
			.if ax==IDM_CONNECT
				invoke ODBCConnect,hDlg
			.elseif ax==IDM_DISCONNECT
				invoke ODBCDisconnect,hDlg
			.elseif ax==IDM_QUERY
				invoke RunQuery,hDlg
			.elseif ax==IDM_CUSTOMQUERY
				invoke DialogBoxParam, hInstance, IDD_QUERYDLG,hDlg, addr QueryProc, 0
			.endif
		.endif
	.else
		mov eax,FALSE
		ret
	.endif
	mov eax,TRUE
	ret
DlgProc endp	

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

SwitchMenuState proc Flag:DWORD
	.if Flag==TRUE 
		invoke EnableMenuItem, hMenu, IDM_CONNECT, MF_GRAYED
		invoke EnableMenuItem, hMenu, IDM_DISCONNECT, MF_ENABLED
		invoke EnableMenuItem, hMenu, IDM_QUERY, MF_ENABLED
		invoke EnableMenuItem, hMenu, IDM_CUSTOMQUERY, MF_ENABLED
	.else
		invoke EnableMenuItem, hMenu, IDM_CONNECT, MF_ENABLED
		invoke EnableMenuItem, hMenu, IDM_DISCONNECT, MF_GRAYED
		invoke EnableMenuItem, hMenu, IDM_QUERY, MF_GRAYED
		invoke EnableMenuItem, hMenu, IDM_CUSTOMQUERY, MF_GRAYED
	.endif
	ret
SwitchMenuState endp

ODBCConnect proc hDlg: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 lstrcpy,addr ConnectString,addr strConnect
				invoke lstrcat,addr ConnectString, addr ProgPath
				invoke lstrcat, addr ConnectString,addr DBName
				invoke SQLDriverConnect, hConn, hDlg, addr ConnectString, sizeof ConnectString, addr Conn, sizeof Conn,addr StrLen, SQL_DRIVER_COMPLETE
				.if ax==SQL_SUCCESS || ax==SQL_SUCCESS_WITH_INFO
					invoke SwitchMenuState,TRUE
					invoke MessageBox,hDlg, addr Conn,addr ConnectCaption,MB_OK+MB_ICONINFORMATION
				.else
					invoke SQLFreeHandle, SQL_HANDLE_DBC, hConn
					invoke SQLFreeHandle, SQL_HANDLE_ENV, hEnv
					invoke MessageBox, hDlg, addr ConnFail, addr AppName, MB_OK+MB_ICONERROR
				.endif
			.else
				invoke SQLFreeHandle, SQL_HANDLE_ENV, hEnv
				invoke MessageBox, hDlg, addr AllocConnFail, addr AppName, MB_OK+MB_ICONERROR
			.endif
		.else
			invoke SQLFreeHandle, SQL_HANDLE_ENV, hEnv
			invoke MessageBox, hDlg, addr SetAttrFail, addr AppName, MB_OK+MB_ICONERROR
		.endif
	.else
		invoke MessageBox, hDlg, addr AllocEnvFail, addr AppName, MB_OK+MB_ICONERROR	
	.endif
	ret
ODBCConnect endp

ODBCDisconnect proc hDlg:DWORD
	invoke SQLDisconnect, hConn
	invoke SQLFreeHandle, SQL_HANDLE_DBC, hConn
	invoke SQLFreeHandle, SQL_HANDLE_ENV, hEnv
	invoke SwitchMenuState, FALSE
	invoke ShowWindow,hList, SW_HIDE
	invoke MessageBox,hDlg,addr Disconnect, addr AppName,MB_OK+MB_ICONINFORMATION
	ret
ODBCDisconnect endp

InsertColumn proc
	LOCAL lvc:LV_COLUMN
	mov lvc.imask,LVCF_TEXT+LVCF_WIDTH
	mov lvc.pszText,offset Heading1
	mov lvc.lx,150
	invoke SendMessage,hList, LVM_INSERTCOLUMN,0,addr lvc
	mov lvc.pszText,offset Heading2
	invoke SendMessage,hList, LVM_INSERTCOLUMN, 1 ,addr lvc	
	mov lvc.pszText,offset Heading3
	invoke SendMessage,hList, LVM_INSERTCOLUMN, 3 ,addr lvc	
	ret		
InsertColumn endp

FillData proc
	LOCAL lvi:LV_ITEM
	LOCAL row:DWORD

	invoke SQLBindCol, hStmt,1,SQL_C_CHAR, addr TheName, sizeof TheName,addr NameLength
	invoke SQLBindCol, hStmt,2,SQL_C_CHAR, addr TheSurname, sizeof TheSurname,addr SurnameLength
	invoke SQLBindCol, hStmt,3,SQL_C_CHAR, addr TelNo, sizeof TelNo,addr TelNoLength
	mov row,0
	.while TRUE
		mov byte ptr ds:[TheName],0
		mov byte ptr ds:[TheSurname],0
		mov byte ptr ds:[TelNo],0
		invoke SQLFetch, hStmt
		.if ax==SQL_SUCCESS || ax==SQL_SUCCESS_WITH_INFO
			mov lvi.imask,LVIF_TEXT+LVIF_PARAM
			push row
			pop lvi.iItem	
			mov lvi.iSubItem,0
			mov lvi.pszText, offset TheName
			push row
			pop lvi.lParam
			invoke SendMessage,hList, LVM_INSERTITEM,0, addr lvi
			mov lvi.imask,LVIF_TEXT
			inc lvi.iSubItem
			mov lvi.pszText,offset TheSurname
			invoke SendMessage,hList,LVM_SETITEM, 0,addr lvi
			inc lvi.iSubItem
			mov lvi.pszText,offset TelNo
			invoke SendMessage,hList,LVM_SETITEM, 0,addr lvi
			inc row
		.else
			.break
		.endif
	.endw
	ret
FillData endp

RunQuery proc hDlg:DWORD
	invoke ShowWindow, hList, SW_SHOW
	invoke SendMessage, hList, LVM_DELETEALLITEMS,0,0
	invoke SQLAllocHandle, SQL_HANDLE_STMT, hConn, addr hStmt

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲午夜久久久久久久久电影网 | 成人免费视频app| 色综合久久天天| 欧美精品一区二区三区一线天视频 | 韩国女主播一区| 欧美在线播放高清精品| 国产日产欧美一区二区视频| 日韩国产精品久久久久久亚洲| 97精品国产97久久久久久久久久久久| 日韩视频一区二区三区在线播放| 亚洲最新视频在线观看| 99re这里只有精品视频首页| 26uuu亚洲| 久久疯狂做爰流白浆xx| 51午夜精品国产| 午夜欧美视频在线观看 | 国产成人综合视频| 日韩一区和二区| 日本欧美肥老太交大片| 欧美亚洲一区二区在线| 亚洲激情网站免费观看| 色狠狠综合天天综合综合| 国产精品美女久久久久久久 | 亚洲色图欧美激情| 成人午夜激情在线| 国产精品久久久久久久久久久免费看| 精品中文字幕一区二区| 日韩欧美精品在线| 国产在线观看一区二区| 精品国产乱码久久久久久蜜臀| 麻豆精品在线观看| 亚洲精品在线免费播放| 国产在线一区二区| 中文字幕不卡三区| 成人av综合在线| 亚洲欧洲综合另类| 欧美日韩视频不卡| 秋霞影院一区二区| 26uuu亚洲婷婷狠狠天堂| 国产高清视频一区| 成人欧美一区二区三区白人| 色综合色狠狠天天综合色| 亚洲自拍偷拍欧美| 91精品免费在线| 国产在线播放一区三区四| 国产欧美日韩精品一区| 91蜜桃传媒精品久久久一区二区| 亚洲在线中文字幕| 日韩欧美一区二区在线视频| 国产在线麻豆精品观看| 日韩一区欧美一区| 欧美久久久一区| 国产河南妇女毛片精品久久久| 日韩理论片在线| 欧美丰满一区二区免费视频| 韩国成人在线视频| 亚洲日本成人在线观看| 91精品久久久久久久91蜜桃| 大胆亚洲人体视频| 亚洲成人综合在线| 国产午夜精品一区二区三区视频 | 欧美日韩精品一区二区三区四区| 久久99久久99| 亚洲猫色日本管| 日韩欧美自拍偷拍| 色综合久久综合| 美腿丝袜一区二区三区| 亚洲欧美日韩国产另类专区| 欧美一卡二卡在线| 成人av免费在线| 麻豆精品一区二区三区| 一区二区国产视频| 久久色中文字幕| 欧美日韩在线精品一区二区三区激情| 美女任你摸久久| 亚洲精品高清在线| 久久精品视频在线免费观看| 欧美精品久久99| 91视频免费观看| 国产一区二区三区在线看麻豆| 亚洲自拍与偷拍| 国产精品国产三级国产aⅴ入口| 91麻豆精品国产91久久久使用方法 | 精品国偷自产国产一区| 欧美性受xxxx黑人xyx性爽| 国产成人自拍在线| 麻豆91在线看| 日日夜夜免费精品视频| 亚洲少妇屁股交4| 中文字幕精品一区二区精品绿巨人| 欧美一级日韩不卡播放免费| 欧美在线观看18| 91视频在线看| 91亚洲午夜精品久久久久久| 处破女av一区二区| 国产毛片精品视频| 久久99日本精品| 人人爽香蕉精品| 视频在线在亚洲| 亚洲午夜在线视频| 亚洲一区视频在线观看视频| 亚洲色图在线视频| 中文字幕一区二区不卡| 国产精品色眯眯| 中文字幕av不卡| 中文天堂在线一区| 国产欧美视频在线观看| 久久久亚洲精品一区二区三区| 精品国产人成亚洲区| 日韩免费视频线观看| 欧美成人在线直播| 日韩视频在线观看一区二区| 欧美一级搡bbbb搡bbbb| 欧美α欧美αv大片| 欧美刺激午夜性久久久久久久 | 4hu四虎永久在线影院成人| 欧美精选午夜久久久乱码6080| 欧美日韩中文字幕精品| 欧美高清视频一二三区 | 国产一区欧美二区| 国产一区二区在线观看视频| 国产成人综合亚洲网站| www.欧美色图| 欧美亚洲一区二区三区四区| 欧美绝品在线观看成人午夜影视| 欧美一区三区四区| 精品国产麻豆免费人成网站| 国产日本欧洲亚洲| 依依成人综合视频| 日本女人一区二区三区| 国产精品中文欧美| 99视频精品免费视频| 欧美三级三级三级爽爽爽| 日韩一区二区精品葵司在线| 久久久久久久综合狠狠综合| 国产精品国产三级国产| 国产精品一区二区黑丝| 国产成人在线色| 欧美视频精品在线观看| 日韩片之四级片| |精品福利一区二区三区| 亚洲v中文字幕| 国产福利一区二区| 在线亚洲欧美专区二区| 欧美大片一区二区| 中文字幕一区免费在线观看| 亚洲图片欧美综合| 国产成人在线观看免费网站| 一本到一区二区三区| 日韩一区二区在线免费观看| 国产精品美女久久久久久久网站| 五月婷婷激情综合| 成人午夜精品在线| 欧美一区二区精品久久911| 国产精品高潮久久久久无| 日本不卡一二三| 色综合一区二区| 欧美videos中文字幕| 亚洲综合色婷婷| 国产成人综合在线| 日韩女优毛片在线| 亚洲韩国一区二区三区| 懂色av一区二区三区免费观看| 欧美日韩国产精选| 一区二区中文字幕在线| 久久av老司机精品网站导航| 欧日韩精品视频| 中文字幕在线观看一区二区| 久久精品国产澳门| 欧美午夜精品电影| 欧美韩国一区二区| 久久电影网电视剧免费观看| 欧美性生交片4| 亚洲视频中文字幕| 国产伦精一区二区三区| 日韩欧美国产综合一区 | 午夜精品久久久久| 91黄色激情网站| 亚洲欧美另类小说视频| 99久久精品情趣| 国产精品免费视频观看| 国产综合色精品一区二区三区| 在线电影一区二区三区| 亚洲综合色婷婷| 欧美性色aⅴ视频一区日韩精品| 亚洲欧美在线高清| 99精品视频一区二区三区| 亚洲国产精品av| 国产精品亚洲综合一区在线观看| 精品国产一区二区三区av性色 | 日韩高清电影一区| 欧美高清激情brazzers| 老司机免费视频一区二区| 欧美精品精品一区| 午夜激情久久久| 欧美精品乱码久久久久久按摩| 视频一区视频二区中文字幕| 欧美日韩dvd在线观看| 视频一区二区三区在线| 欧美日韩aaa|