日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

談ADO訪問不同數(shù)據(jù)庫的差別

Microsoft公司提供了統(tǒng)一的數(shù)據(jù)訪問接口ActiveX Data Object,簡(jiǎn)稱ADO 。但實(shí)際應(yīng)用編程中,訪問不同的數(shù)據(jù)庫,如Access、SQL Server或VFP,會(huì)存在一些“細(xì)微”差別,常常有這樣的情況,用ADO對(duì)象訪問某一數(shù)據(jù)庫的程序都調(diào)試通過了,但用同樣的程序訪問其他數(shù)據(jù)庫就存在這樣或那樣的問題,反之也一樣 。這種差別就筆者來看好像沒什么意義,因?yàn)槎际且粋€(gè)公司的產(chǎn)品;雖然這種差別不多,但要搞清它的來龍去脈,足以使用戶忙乎一陣子,a無端增加了用戶的負(fù)擔(dān) 。下面,本文就談?wù)動(dòng)嘘P(guān)SELECT語句在訪問不同數(shù)據(jù)庫方面的一些差別 。在SQL Server、Access、VFP三個(gè)數(shù)據(jù)庫中分別有以下的這樣一個(gè)表名都為“Employee”的數(shù)據(jù)表 。如圖1所示 。
圖1
【談ADO訪問不同數(shù)據(jù)庫的差別】訪問日期型字段的差別
在大多數(shù)情況下用SELECT語句分別去訪問這三個(gè)數(shù)據(jù)庫的這張表,沒有什么區(qū)別,即你若編寫了訪問SQL Server數(shù)據(jù)庫的SELECT語句,同樣可用于訪問Access數(shù)據(jù)庫或VFP數(shù)據(jù)庫,只要將連接的數(shù)據(jù)源改一改即可 。但你若要對(duì)“出生年月”這一日期型字段進(jìn)行查詢的話,問題就來了,例如要查詢1980年1月1日至1985年12月31日的員工資料,訪問SQL Server中的數(shù)據(jù)表的語句是:
Select * from employee where 出生年月 between 1980-01-01 and 1985-12-31
如果想當(dāng)然地用這條語句去訪問Access數(shù)據(jù)庫那就大錯(cuò)特錯(cuò)了,必須加上函數(shù)DateValue(),正確的寫法如下:
Select * from employee where 出生年月between DateValue(1980-01-01)and DateValue(1985-12-31)
如果要訪問VFP日期型字段又必須采用以下這種寫法:
select * from employee where 出生年月 between {^1980-01-01} and {^1985-12-31}
以上是SELECT語句對(duì)于訪問不同數(shù)據(jù)庫的日期型字段的差別,不了解這種差別,你會(huì)被搞得暈頭轉(zhuǎn)向,不知錯(cuò)在哪里 。
統(tǒng)計(jì)方面的差別
對(duì)上例的Employee數(shù)據(jù)表,按部門統(tǒng)計(jì)總工資和人數(shù),就用VB來編寫一段統(tǒng)計(jì)和顯示的代碼,若已經(jīng)建立了連接對(duì)象Conn,記錄集對(duì)象RS,并已連接到某一數(shù)據(jù)源,具體代碼如下所示:
打開連接對(duì)象Conn 可打開SQL Server、Access、VFP數(shù)據(jù)源
conn.CursorLocation = adUseClient 建立游標(biāo)至客戶端
……
rs.Open "select 部門, sum(工資), count(*) from employee group by 部門", conn
Set DataGrid1.DataSource = rs
將Rs綁定到DataGrid1控件并顯示
……
可以看到分別訪問SQL Server、Access、VFP這三個(gè)不同的數(shù)據(jù)庫中的Employee表所產(chǎn)生的統(tǒng)計(jì)表的字段名各不相同,(如圖2、圖3、圖4) 。對(duì)SQL Server中的數(shù)據(jù)表統(tǒng)計(jì)不產(chǎn)生字段名;對(duì)Access中的數(shù)據(jù)表統(tǒng)計(jì)產(chǎn)生了諸如“Expr1001”、“Expr1002”等的統(tǒng)計(jì)字段名,而對(duì)VFP 中的數(shù)據(jù)表統(tǒng)計(jì)則產(chǎn)生“sum_工資”、“cnt”的統(tǒng)計(jì)字段名 。這雖然不是很大的問題,也不會(huì)像上例那樣如果寫錯(cuò)日期型字段的格式,程序會(huì)終止運(yùn)行,但畢竟有所不同,知道了這些由來可以在編程中避免這些“細(xì)微”的差別所帶來的諸多煩惱 。
圖2
圖3
圖4
要解決這一問題,使訪問不同的數(shù)據(jù)庫有統(tǒng)一的代碼和統(tǒng)一的顯示界面,那就在寫SELECT語句時(shí)一定要在統(tǒng)計(jì)字段后面加上as 列名,該列名可任取,如下例修改后的代碼:
……
rs.Open "select 部門, sum(工資) as 總工資, count(*) as 人數(shù)from employee group by 部門", conn
……
修改后的代碼執(zhí)行后如圖5所示,以后若想調(diào)用統(tǒng)計(jì)字段,只要調(diào)用“總工資”或“人數(shù)”即可 。
圖5

    推薦閱讀