Office中國(guó)論壇/Access中國(guó)論壇

 找回密碼
 注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

12下一頁(yè)
返回列表 發(fā)新帖
查看: 9810|回復(fù): 16
打印 上一主題 下一主題

SQLServer 數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)設(shè)想和初步實(shí)現(xiàn)方法(ADP)

[復(fù)制鏈接]

點(diǎn)擊這里給我發(fā)消息

跳轉(zhuǎn)到指定樓層
1#
發(fā)表于 2014-12-11 10:26:33 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
在傳統(tǒng)的以SQLServer數(shù)據(jù)庫(kù)為基礎(chǔ)的Access客戶/服務(wù)器開(kāi)發(fā)方案中,數(shù)據(jù)庫(kù)的操作是基于鏈接表、傳遞查詢以及ADO等接口技術(shù)來(lái)實(shí)現(xiàn)的。其中,鏈接表技術(shù)和傳遞查詢是通過(guò)ODBC來(lái)連接數(shù)據(jù)庫(kù)。

這樣出現(xiàn)了一個(gè)問(wèn)題,那就是ODBC緩存的問(wèn)題,大家可能實(shí)驗(yàn)過(guò),如果,在數(shù)據(jù)庫(kù)中已經(jīng)有一個(gè)鏈接表能正常登錄服務(wù)器鏈接數(shù)據(jù)庫(kù)中的表,那么其它的鏈接到這個(gè)數(shù)據(jù)庫(kù)的鏈接表就不用通過(guò)安全驗(yàn)證也能鏈接數(shù)據(jù)表,這樣的好處就是只要一次連接成功,其它的鏈接表就不用保存密碼了。但同樣也有一問(wèn)題,不能控制斷開(kāi)與數(shù)據(jù)庫(kù)的連接,當(dāng)然,如果意外斷開(kāi)了數(shù)據(jù)庫(kù)連接,基本上無(wú)法再次連接數(shù)據(jù)庫(kù),只有關(guān)閉應(yīng)用程序重新打開(kāi)才能正常連接。
另外一個(gè)問(wèn)題就是數(shù)據(jù)緩存問(wèn)題,在Access選項(xiàng)設(shè)置有1000條記錄緩存的設(shè)置項(xiàng),平常一般都很少人注意,事實(shí)上Access的鏈接表,是利用DAO對(duì)遠(yuǎn)程數(shù)據(jù)庫(kù)的數(shù)據(jù)表進(jìn)行模擬,模擬成Access的本地表,便于按Access的常規(guī)操作來(lái)操作遠(yuǎn)程數(shù)據(jù)庫(kù)中的數(shù)據(jù)表,這樣一來(lái),帶來(lái)兩個(gè)方面的問(wèn)題,第一,應(yīng)用程序的磁盤占用會(huì)快速增長(zhǎng),第二,帶來(lái)很大的網(wǎng)絡(luò)流量,增加網(wǎng)絡(luò)的負(fù)擔(dān)。如果基于這個(gè)表再做查詢的話,基本上會(huì)緩存全部的數(shù)據(jù)表的內(nèi)容,那么,對(duì)磁盤占用和網(wǎng)絡(luò)的需求就會(huì)大大增加,應(yīng)用程序的運(yùn)行就會(huì)變得很慢。

于是乎,傳遞查詢的方案就得重要起來(lái),但傳遞查詢的使用要求很高,要求懂得SQLSerever T-SQL語(yǔ)言,而且設(shè)計(jì)不直觀,幾乎不是一般的人員可以使用得來(lái)、可以掌握得好的。

比較了這些方案之后,人們發(fā)現(xiàn)ADO似乎很好地解決了這些問(wèn)題,沒(méi)有本地緩存的困擾,連接易于控制,代碼也比較簡(jiǎn)潔,可是一到設(shè)計(jì)階段,人們發(fā)現(xiàn)使用ADO的不方便,設(shè)計(jì)程序不直觀,綁定數(shù)據(jù)復(fù)雜,并且,不能用ADO記錄集作為報(bào)表的數(shù)據(jù)源,使得很多人望而止步。

從Access 2000開(kāi)始,Access提供的ADP的解決方案,用以解決基于SQLServer數(shù)據(jù)庫(kù)的客戶/服務(wù)器的純ADO方案,設(shè)計(jì)直觀方便,能像Access本地?cái)?shù)據(jù)庫(kù)開(kāi)發(fā)一樣直接綁定,報(bào)表也能使用ADO記錄集,也能使用DLookup類的應(yīng)用程序函數(shù),使得這種C/S開(kāi)發(fā)方案極為簡(jiǎn)單,沒(méi)有了本地緩存的困擾,使用OpenConnection和CloseConnection能夠方便地控制連接以保證數(shù)據(jù)庫(kù)的安全和正常運(yùn)行。同時(shí),它還能完成數(shù)據(jù)庫(kù)的創(chuàng)建、維護(hù)和設(shè)計(jì)工作,這些是Access傳統(tǒng)應(yīng)用程序無(wú)法比擬的優(yōu)勢(shì),使得SQLServer數(shù)據(jù)庫(kù)的Access C/S開(kāi)發(fā)一條龍。

當(dāng)然,這種ADP方案不是沒(méi)有缺點(diǎn),第一,沒(méi)有本地?cái)?shù)據(jù),因此離線操作復(fù)雜;第二,只有一個(gè)數(shù)據(jù)庫(kù)連接,連接另一個(gè)數(shù)據(jù)庫(kù)只能斷開(kāi)當(dāng)前數(shù)據(jù)庫(kù),或者用ADO連接另一個(gè)數(shù)據(jù)庫(kù);第三,連接的數(shù)據(jù)庫(kù)只能是SQLServer數(shù)據(jù)庫(kù),當(dāng)然也能用ADO連接其它數(shù)據(jù)庫(kù)。

可惜的是,Access 2013取消了ADP的支持,轉(zhuǎn)移到Access Web數(shù)據(jù)庫(kù)上了。但是,Access 2010仍然支持。不管怎么說(shuō),ADP仍然不失為一種優(yōu)秀的開(kāi)發(fā)方案。


ADP的另一個(gè)優(yōu)點(diǎn)就是純粹應(yīng)用程序,不像傳統(tǒng)的Access應(yīng)用程序那樣包含數(shù)據(jù)部分,不會(huì)因?yàn)槭褂脮r(shí)間長(zhǎng)而應(yīng)用程序的磁盤占用增長(zhǎng),應(yīng)用程序加載快。

另外,有網(wǎng)友有這樣的疑問(wèn),ADP保存數(shù)據(jù)庫(kù)連接密碼,做不到數(shù)據(jù)庫(kù)安全,因?yàn),Access就應(yīng)用程序可能通過(guò)鏈接ADP而訪問(wèn)SQLServer的內(nèi)容;而不保存數(shù)據(jù)庫(kù)密碼,每次打開(kāi)ADP都要提示輸入數(shù)據(jù)庫(kù)連接登錄ID和密碼,造成用戶的困擾。其實(shí),這根本不是問(wèn)題,保存密碼完全是為了SQLServer數(shù)據(jù)庫(kù)設(shè)計(jì)和ADP應(yīng)用程序的設(shè)計(jì)方便,而在真正應(yīng)用時(shí)是不應(yīng)該保存ADP的數(shù)據(jù)庫(kù)連接密碼,數(shù)據(jù)庫(kù)的連接是要通過(guò)OpenConnection來(lái)連接數(shù)據(jù)庫(kù)和CloseConnecton來(lái)斷開(kāi)數(shù)據(jù)庫(kù)連接,并通過(guò)OpenConnection "Provider=;"來(lái)清除ADP的數(shù)據(jù)庫(kù)連接信息。這樣一來(lái)只要在退出ADP之前確保運(yùn)行如下語(yǔ)句:
  1. CloseConnection
  2. OpenConnection "Provder=;"
復(fù)制代碼

就能保證ADP啟動(dòng)時(shí)不出現(xiàn)輸入密碼的提示框,而通過(guò)OpenConnection來(lái)連接SQLServer數(shù)據(jù)庫(kù)。

ADP的缺陷,可以通過(guò)ADO來(lái)進(jìn)行彌補(bǔ)。
一,沒(méi)有本地?cái)?shù)據(jù),可以通過(guò)一個(gè)本地Access mdb數(shù)據(jù)庫(kù)的ADO連接來(lái)彌補(bǔ)。
二,對(duì)于第二個(gè)數(shù)據(jù)庫(kù),同樣可以通過(guò)第二個(gè)ADO連接來(lái)彌補(bǔ)。
三,對(duì)于其它數(shù)據(jù)庫(kù),也是一樣通過(guò)第二個(gè)ADO連接來(lái)彌補(bǔ)。

由于Access應(yīng)用程序,不管是傳統(tǒng)的還是ADP的方案都是長(zhǎng)連接方案,服務(wù)器負(fù)擔(dān)相對(duì)較重。傳統(tǒng)的方案無(wú)法控制連接,而ADP可以。

綜上所述,采用ADP方案進(jìn)行SQLServer數(shù)據(jù)庫(kù)C/S開(kāi)發(fā)是非常不錯(cuò)的。

下面,敘述一下ADP開(kāi)發(fā)方案的基本方法。
一,創(chuàng)建SQLServer數(shù)據(jù)庫(kù)。三種方法,1,用新建ADP的方法創(chuàng)建新的SQLServer數(shù)據(jù)庫(kù),此方法適合初學(xué)者,缺點(diǎn):數(shù)據(jù)庫(kù)初始大小和增長(zhǎng)速度不可控,數(shù)據(jù)庫(kù)文件文件位置在SQLServer的Data目錄中。2、利用SQLServer的企業(yè)管理器或者SQLServer Management Studio創(chuàng)建數(shù)據(jù)庫(kù),此法通用,缺點(diǎn):需要軟件。3、通過(guò)ADO連接,直接執(zhí)行創(chuàng)建數(shù)據(jù)庫(kù)的TSQL語(yǔ)句,此法適合高級(jí)用戶,缺點(diǎn):要懂VBA、ADO和TSQL。
二,創(chuàng)建數(shù)據(jù)庫(kù)對(duì)象。四種方法,1,在連接了數(shù)據(jù)庫(kù)的ADP中,使用Access創(chuàng)建數(shù)據(jù)庫(kù)中的表、索引、視圖、函數(shù)和存儲(chǔ)過(guò)程以及觸發(fā)器,適合初學(xué)者;2,利用SQLServer的企業(yè)管理器或者SQLServer Management Studio創(chuàng)建這些對(duì)象,適合初學(xué)者;3,通過(guò)ADO連接,使用T-SQL語(yǔ)句創(chuàng)建這些對(duì)象,適合有經(jīng)驗(yàn)的程序員;4,使用利用SQLServer的iSQL/oSQL或者SQLServer Management Studio,使用T-SQL語(yǔ)句創(chuàng)建這些對(duì)象,適合有經(jīng)驗(yàn)的程序員和數(shù)據(jù)庫(kù)管理員。
三,用傳統(tǒng)的Access應(yīng)用程序技術(shù)創(chuàng)建所需的窗體、報(bào)表以及所需的模塊和宏。這個(gè)時(shí)候,ADP已經(jīng)可以運(yùn)行起來(lái)了。
四,編寫控制ADP連接的代碼,控制ADP的啟動(dòng)和退出。
五,部署。

對(duì)于基于SQLServer數(shù)據(jù)庫(kù)使用傳統(tǒng)Access的應(yīng)用程序開(kāi)發(fā)方案的,也可以使用上述ADP的方法來(lái)創(chuàng)建數(shù)據(jù)庫(kù)和數(shù)據(jù)庫(kù)對(duì)象,這樣就不需要使用任何其它的第三方軟件,在Access中完成所有的事情。

評(píng)分

參與人數(shù) 1經(jīng)驗(yàn) +18 收起 理由
tmtony + 18

查看全部評(píng)分

本帖被以下淘專輯推薦:

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享分享 分享淘帖2 訂閱訂閱

點(diǎn)擊這里給我發(fā)消息

2#
發(fā)表于 2014-12-11 10:55:20 | 只看該作者
ODBC有它的優(yōu)點(diǎn),但的確存在這樣的問(wèn)題
使用ADO又無(wú)法使用ACCESS綁定的優(yōu)點(diǎn)

點(diǎn)擊這里給我發(fā)消息

3#
發(fā)表于 2014-12-11 10:59:12 | 只看該作者
關(guān)注中。。。
回復(fù)

使用道具 舉報(bào)

點(diǎn)擊這里給我發(fā)消息

4#
發(fā)表于 2014-12-11 11:02:23 | 只看該作者
ODBC連接 或ADO連接,如果不釋放連接,鏈接的MDB會(huì)打開(kāi)ldb
但如果斷開(kāi)連接,每次重連,也會(huì)增加開(kāi)銷

點(diǎn)擊這里給我發(fā)消息

5#
發(fā)表于 2014-12-11 11:36:10 | 只看該作者
好帖子,可以把數(shù)據(jù)勾引到本地表,然后再綁定給報(bào)表嘛

點(diǎn)評(píng)

當(dāng)然可以這么做,但復(fù)雜度很高,這是其一,其二,本地要建相應(yīng)的數(shù)據(jù)表,應(yīng)用程序會(huì)膨脹。  發(fā)表于 2014-12-11 11:43
6#
發(fā)表于 2014-12-11 12:48:12 | 只看該作者
拜讀完畢,沒(méi)看懂,不過(guò)也謝謝.

點(diǎn)評(píng)

說(shuō)明你很少接觸SQLServer數(shù)據(jù)庫(kù)開(kāi)發(fā)的問(wèn)題,或者沒(méi)有碰到過(guò)類似的困惑。呵呵  發(fā)表于 2014-12-11 13:00

點(diǎn)擊這里給我發(fā)消息

7#
發(fā)表于 2014-12-11 12:48:37 來(lái)自手機(jī) | 只看該作者
好帖要頂來(lái)自: Android客戶端
回復(fù)

使用道具 舉報(bào)

8#
發(fā)表于 2014-12-11 13:34:57 | 只看該作者
多年不關(guān)注MSSQL了
9#
發(fā)表于 2014-12-11 17:13:54 | 只看該作者
都是高手在出招阿.
10#
發(fā)表于 2014-12-16 08:03:38 | 只看該作者
學(xué)習(xí)了,不錯(cuò)。。。
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則

QQ|站長(zhǎng)郵箱|小黑屋|手機(jī)版|Office中國(guó)/Access中國(guó) ( 粵ICP備10043721號(hào)-1 )  

GMT+8, 2025-7-13 05:22 , Processed in 0.109981 second(s), 36 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回復(fù) 返回頂部 返回列表