999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

淺談VFP使用SPT技術(shù)開發(fā)C/S應(yīng)用系統(tǒng)

2017-06-08 19:22:32陳蘭貞陳玉祥
中文信息 2017年5期
關(guān)鍵詞:數(shù)據(jù)庫用戶

陳蘭貞 陳玉祥

前言

Visual FoxPro數(shù)據(jù)庫開發(fā)工具(以下簡稱 VFP)具有易于掌握、易于開發(fā)、項目管理方便靈活、擁有強大編程語言、對系統(tǒng)資源要求不高等特性。長期以來,VFP以其小而巧的特點,受到中、小型數(shù)據(jù)庫開發(fā)者的青睞。隨著VFP程序應(yīng)用的深入,我們會發(fā)現(xiàn)VFP數(shù)據(jù)庫文件(.dbc)、表文件(.dbf)存在一些弊端,因為這些固有的問題,開發(fā)人員不得不去尋求更安全的開發(fā)策略,保證我們的應(yīng)用程序,穩(wěn)定可靠,安全無患。通常的解決辦法是使用結(jié)構(gòu)化查詢語言服務(wù)器SQL Server,提供后臺數(shù)據(jù)服務(wù)。

一、做在前面

1.在設(shè)計VFP表單時,改善對DBF表的訪問:

通常,F(xiàn)oxPro應(yīng)用程序都使用DBF表來存儲數(shù)據(jù)。對于單用戶的應(yīng)用DBF表是很有效的。可以獨占的打開表并綁定表的字段到表單控件(如文本框和復選框)。可以不再使用內(nèi)存變量來復制數(shù)據(jù)字段以用于增加或編輯。可以簡單的把緩沖模式設(shè)為3(開放式行緩沖)以有效地把表單與數(shù)據(jù)字段分離開來,然后發(fā)出TableUpdate(.T.)以永久地修改數(shù)據(jù),或者發(fā)出TableRevert(.T.)以忽略所發(fā)生的改變。

對于多用戶的應(yīng)用,只需要以共享方式(SHARED)打開所有的DBF表。

通常,在表單的數(shù)據(jù)環(huán)境里我們會加入所有的表和視圖以便其自動打開。由于在表單控件創(chuàng)建前所有別名已經(jīng)打開(具體的說表單對象在表單的Load和Init事件間生成),使用表單數(shù)據(jù)環(huán)境可以節(jié)省我們的開發(fā)時間。當把一個表加入表單的數(shù)據(jù)環(huán)境里,當表打開時,表的記錄指針將會移動指向當前索引標識的第一個記錄。

但是使用數(shù)據(jù)環(huán)境,在多用戶環(huán)境下,要有效控制數(shù)據(jù)表,卻不是很順利,可能會有很多“表已打開的”的提示。

所以,要開發(fā)多用戶應(yīng)用系統(tǒng),我們經(jīng)常用自己的代碼,在表單的Load事件里打開光標和表。這樣,我們可以控制得更多。而這種控制,將會讓我們在以后面對更多用戶時,不再措手不及。

2.建立數(shù)據(jù)字典

在表單的Load事件里,以上面調(diào)用OpenDBF過程的方式來創(chuàng)建每一個光標,這是一種很好的方法。但是這種方法還是存在一定的隱患,雖然這種幾率是非常的小。OpenDBF.PRG打開的是物理存在的表,萬一該表被誤刪了或損壞了,這么辦?相信每位程序員都會有自己的應(yīng)對策略。我的方法是建一個所有臨時表的備份,當打開表不成功時,用備份覆蓋一下。

有一種更好的方法:可以建立一個包含所有需要創(chuàng)建的光標的信息的數(shù)據(jù)字典,然后調(diào)用下面講述的CreatCursor()函數(shù)。用這種方法,雖然前期工作要多一點,但是臨時表現(xiàn)場建立,那“表不存在”,“不是一個表”等錯誤提示,想出來也沒人去叫它了。

二、建立SPT連接

為了使用SPT,程序必須建立一個服務(wù)器連接。通常使用SQLConnect()函數(shù)或SQLStringConnect()函數(shù)來建立該連接。

1.方式一:使用SQLConnect()函數(shù)建立SPT連接

SQLConnect()使用DSN,使用“控制面板”中的“ODBC數(shù)據(jù)源管理器”創(chuàng)建某個數(shù)據(jù)庫的ODBC 數(shù)據(jù)資源名,即DSN,這樣以后可以通過使用數(shù)據(jù)庫DSN連接具體的數(shù)據(jù)庫。

“ODBC數(shù)據(jù)源管理器”提供了三種DSN,分別為用戶DSN、系統(tǒng)DSN和文件DSN。其中,用戶DSN會把相應(yīng)的配置信息保存在Windows的注冊表中,但是只允許創(chuàng)建該DSN的登錄用戶使用。系統(tǒng)DSN同樣將有關(guān)的配置信息保存在系統(tǒng)注冊表中,但是與用戶DSN不同的是系統(tǒng)DSN允許所有登錄服務(wù)器的用戶使用。

與上述兩種數(shù)據(jù)庫DSN不同,文件DSN把具體的配置信息保存在硬盤上的某個具體文件中。文件DSN允許所有登錄服務(wù)器的用戶使用,而且即使在沒有任何用戶登錄的情況下,也可以提供對數(shù)據(jù)庫DSN的訪問支持。此外,因為文件DSN被保存在硬盤文件里,所以可以方便地復制到其它機器中。這樣,用戶可以不對系統(tǒng)注冊表進行任何改動就可直接使用在其它機器上創(chuàng)建的DSN。

在以上三種數(shù)據(jù)庫DSN中,建議大家選擇系統(tǒng)DSN或文件DSN,如果更喜歡文件DSN的可移植性,可以通過在NT系統(tǒng)下設(shè)定文件的訪問權(quán)限獲得較高的安全保障。

2.方式二: 使用連接串SQLStringConnect()函數(shù)建立SPT連接

StrCmd=[Server=(local);Driver={SQL Server};Database=One;UserID=sa;pwd=sa;]

Handle = SQLStringConnect ( strCmd )

lr= SQLExec ( Handle, [SELECT * FROM CUSTOMER], [AllCusts] )

這將返回整個customer表給命名為“AllCusts”的光標。

3.上面兩種方法之一取回需要的數(shù)據(jù)后,用SQLDisconnect(句柄) 語句來關(guān)閉連接

SQLDisconnect( lh )

三、從SQL Server返回數(shù)據(jù)到本地光標

可是,上面返回的光標并不是我們綁定于表單控件的光標,因為SQLExec()總是創(chuàng)建一個新的光標,我們不能使用已經(jīng)存在的光標作為SQLExec()的第三個參數(shù)。當我們在設(shè)計表單時,經(jīng)常從表單數(shù)據(jù)環(huán)境的表里拖出字段到屏幕上,于是自動設(shè)置該表的這個字段為該控件的綁定數(shù)據(jù)源(ControlSource)。

該如何在不斷開綁定的情況把這兩者連接起來?鑒于我們的經(jīng)驗,可以使用了一個簡單的解決辦法,僅以較小的性能損失用以免除大量的編程。在表單的Load事件里,我們已按“做在前面”所說,創(chuàng)建好了我們需要的光標,并把表單控件梆定于它。然后,當我們用SPT從SQL Server返回數(shù)據(jù)給SQL光標時,只需要簡單地ZAP本地光標并把返回的SQL光標數(shù)據(jù)追加進來,或者直接把返回的SQL光標數(shù)據(jù)追加到Load事件里打開的光標,那么它不會斷開表單上各控件的數(shù)據(jù)綁定。

需要注意的是返回光標字段名與Load事件里打開的光標的字段名應(yīng)該是相同的。

四、將新增、修改、刪除記錄寫回到SQL?Server數(shù)據(jù)庫

前面講過SQL Server是一個簡單的機制,常用的就是4條命令:Insert、Select、Update、Delete。

那么我們怎么用SPT將我們的數(shù)據(jù)變化寫回到SQL Server數(shù)據(jù)庫?

我們可以構(gòu)造Insert、Update、Delete語句來發(fā)送數(shù)據(jù)到SQL Server。Update、Delete語句必須包含一個或多個關(guān)鍵字段以唯一地標識需要更新或刪除的記錄。沿用前面建立SPT連接的句柄Handle:

1.新增數(shù)據(jù)

StrCmd_1 = [INSERT INTO authors (au_id, au_lname, au_fname, phone, address,;

city,state,zip,contract) VALUES ('999-99-9999', 'White', 'Johnson', )

StrCmd_2 = ['408 496-7223','Bigge Rd', 'Menlo Park', 'CA','31002', '1')]

lr = SQLExec ( Handle, StrCmd_1+ StrCmd_2)

IF lr<0

Msg = [新增數(shù)據(jù)失敗!]

MESSAGEBOX( Msg, 64, _VFP.Caption )

ENDIF

值得注意的是:這里要遵守對該表數(shù)據(jù)的約束,要不然,總會以失敗告終。

2.修改數(shù)據(jù)

StrCmd = [UPDATE authors SET phone = '999 496-7223', address = '2036 shiqiaoyjl' ;

WHERE (au_id = '999-99-9999') AND (au_lname = 'White')]

lr = SQLExec ( Handle, StrCmd )

IF lr<0

Msg = [修改數(shù)據(jù)失敗!]

MESSAGEBOX( Msg, 64, _VFP.Caption )

ENDIF

3.刪除數(shù)據(jù)

StrCmd = [delete authors WHERE (au_id = '999-99-9999') AND (au_lname = 'White')]

lr = SQLExec ( Handle, StrCmd )

IF lr<0

Msg = [刪除數(shù)據(jù)失敗!]

MESSAGEBOX( Msg, 64, _VFP.Caption )

ENDIF

五、經(jīng)驗之談

1.用SPT方式可以很好的使用事物處理

也許我們記憶憂新,在使用DBF表時,是用開放式行緩沖方式,然后發(fā)出TableUpdate(.T.)以永久地修改數(shù)據(jù),或者發(fā)出TableRevert(.T.)來忽略數(shù)據(jù)更改的。還有在用遠程視圖方式整合SQL Server開發(fā)時,用的也是緩沖的機制。這種機制猶如黑匣子,我們控制不了其操作過程。用SPT方式就不一樣,用這種方式,我們可以想回滾到哪里就回滾到哪里。

2.保留選項表的本地備份

可以復制部分SQLSerever表為DBF表到本地應(yīng)用程序目錄。你也許會感到奇怪,我用了SQLSerever表,為什么還要用DBF表?原因很簡單,是因為性能。DBF表小而巧的特性,對數(shù)據(jù)量少,單用戶獨占使用的環(huán)境下有其無可比擬的性能優(yōu)勢。

我們的很多表單會有組合框或者列表框,這些組合框和列表框顯示的數(shù)據(jù)源大多來自小的數(shù)據(jù)表,而且這些數(shù)據(jù)不是經(jīng)常改變的。那就沒必要在每次實例化表單時為每一個小表都連接到SQLServer。取而代之的是,可以以DBF表的方式為這些表在本地保留完整的備份,只在服務(wù)器表數(shù)據(jù)改變時再刷新它。

參考文獻

[1]《在VFP里操作和管理SQL?SERVER(介紹SQL-DMO) 》,作者:buffer,下載地址:http://www.myf1.net/bbs/dispbbs.asp boardID=1&replyID=189716

&ID=180379&skin=1

[2]《FoxPro開發(fā)者學SQL》,作者:婁山關(guān).下載地址:http://www.myf1.net/bbs/dispbbs.asp?boardID=1&replyID=217870&ID=238414&skin=1

[3]《SQL SERVER 起步》,作者:陳純.下載地址:http://www.vfp.cn/article_

view.asp id=493

猜你喜歡
數(shù)據(jù)庫用戶
數(shù)據(jù)庫
財經(jīng)(2017年15期)2017-07-03 22:40:49
數(shù)據(jù)庫
財經(jīng)(2017年2期)2017-03-10 14:35:35
關(guān)注用戶
商用汽車(2016年11期)2016-12-19 01:20:16
關(guān)注用戶
商用汽車(2016年6期)2016-06-29 09:18:54
數(shù)據(jù)庫
財經(jīng)(2016年15期)2016-06-03 07:38:02
關(guān)注用戶
商用汽車(2016年4期)2016-05-09 01:23:12
數(shù)據(jù)庫
財經(jīng)(2016年3期)2016-03-07 07:44:46
數(shù)據(jù)庫
財經(jīng)(2016年6期)2016-02-24 07:41:51
Camera360:拍出5億用戶
100萬用戶
主站蜘蛛池模板: 最新日韩AV网址在线观看| 久久中文字幕2021精品| 丁香六月综合网| 欧美在线一二区| 日本人妻一区二区三区不卡影院| 中文字幕在线视频免费| 日本在线亚洲| 国产黄色视频综合| 国产一区二区三区夜色| 99热6这里只有精品| 狠狠色狠狠综合久久| 色国产视频| 久久婷婷色综合老司机| 成人欧美在线观看| a网站在线观看| a在线观看免费| 亚洲人成色在线观看| 日韩中文无码av超清| 少妇人妻无码首页| 熟女日韩精品2区| 国产精品女熟高潮视频| 在线视频一区二区三区不卡| 污网站在线观看视频| 一区二区午夜| 国产激情在线视频| 欧美全免费aaaaaa特黄在线| 国产jizzjizz视频| 亚洲人在线| 国产成人综合日韩精品无码不卡| 亚洲码一区二区三区| 一级毛片免费观看不卡视频| 91成人在线观看视频| 久久亚洲国产视频| 亚洲国产高清精品线久久| 久久免费成人| 国产成人综合网| 综合五月天网| 亚洲成人网在线播放| 国产精品亚洲va在线观看| 欧美精品H在线播放| 国产成人精品男人的天堂下载 | 香蕉久久国产精品免| 国产xxxxx免费视频| 亚洲日本中文综合在线| 亚洲天堂2014| 亚洲日韩AV无码一区二区三区人| 婷婷色婷婷| 精品综合久久久久久97超人| 91精品啪在线观看国产60岁| 亚洲欧洲自拍拍偷午夜色无码| 免费观看成人久久网免费观看| 米奇精品一区二区三区| 一本色道久久88| 亚洲精品人成网线在线| 亚洲色图欧美一区| 日韩精品专区免费无码aⅴ| a级免费视频| 2020国产免费久久精品99| 福利在线免费视频| 1024你懂的国产精品| 国产精品99在线观看| 青青国产成人免费精品视频| 亚洲视频免费在线| 亚洲国产清纯| 91黄视频在线观看| 欧美天天干| 欧洲高清无码在线| 国产99免费视频| 亚洲视频无码| 日本亚洲最大的色成网站www| 4虎影视国产在线观看精品| 成人午夜网址| 超碰精品无码一区二区| 四虎影视无码永久免费观看| 三级国产在线观看| 国产尤物视频网址导航| 欧美亚洲国产视频| 亚洲无码视频喷水| 内射人妻无码色AV天堂| 99久久国产综合精品2020| 成人午夜在线播放| 国产精品55夜色66夜色|