国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

Visual FoxPro多表視圖或查詢中聯(lián)接條件的設(shè)置

2013-02-20 05:37楊春波
計(jì)算機(jī)時(shí)代 2013年2期
關(guān)鍵詞:視圖

楊春波

摘 要: Visual FoxPro中為建立多表視圖或查詢進(jìn)行聯(lián)接條件設(shè)置時(shí),在向?qū)Ш驮O(shè)計(jì)器的使用中需要特別注意一些問(wèn)題,否則聯(lián)接結(jié)果很可能是不正確的。為此,以不同的實(shí)例分析了在向?qū)Ш驮O(shè)計(jì)器中設(shè)置多表聯(lián)接條件過(guò)程中可能出現(xiàn)的錯(cuò)誤,并分析歸納了最簡(jiǎn)潔有效的正確設(shè)置方法。

關(guān)鍵詞: Visual FoxPro; 多表; 視圖; 查詢; 聯(lián)接條件

中圖分類號(hào):G64 文獻(xiàn)標(biāo)志碼:A 文章編號(hào):1006-8228(2013)02-52-03

Settings of connection condition in Visual FoxPro multi-table graphs or query

Yang Chunbo

(Binzhou Medical University Health Management College, Yantai, Shandong 264003, China)

Abstract: Some special problems need to be paid attention when setting up connection conditions for multi-table graph and query in Visual FoxPro, otherwise the connection result is very possibly not correct. The errors that may arise during the procedure to set up in wizard and designer are analyzed by using three tables as example. The most concise and effective correct setting method is summarized.

Key words: Visual FoxPro; multi-table; graph; query; connection condition

0 引言

Visual Foxpro具有功能強(qiáng)大、可視性強(qiáng)、面向?qū)ο蟮忍攸c(diǎn)。在利用Visual Foxpro進(jìn)行多表查詢時(shí),如聯(lián)接條件設(shè)置不當(dāng),則聯(lián)接結(jié)果會(huì)產(chǎn)生錯(cuò)誤。本文對(duì)Visual Foxpro多表查詢條件的向?qū)Ш驮O(shè)計(jì)器的設(shè)置進(jìn)行了分析和研究,以找出產(chǎn)生問(wèn)題的根由和解決問(wèn)題的方法。

1 聯(lián)接條件設(shè)置基礎(chǔ)理論

在進(jìn)行Visual Foxpro的多表查詢前需要設(shè)置表間的聯(lián)接條件,以三個(gè)表為例,三個(gè)表需要設(shè)置兩個(gè)聯(lián)接條件。假設(shè)A表和B表通過(guò)關(guān)鍵字段F來(lái)建立聯(lián)接,聯(lián)接條件表達(dá)式有兩種書寫格式:A.F=B.F和B.F=A.F,這兩種書寫格式不僅在順序上存在差別,在實(shí)質(zhì)含義上也是不一樣的,位于等于號(hào)左邊的表是父表,位于等于號(hào)右邊的表是子表[1]。

2 實(shí)例操作

因?yàn)椴樵兣c視圖都對(duì)應(yīng)一條SELECT查詢語(yǔ)句,其建立步驟及注意事項(xiàng)完全相同,所以以視圖的建立為代表,以查詢“學(xué)生成績(jī)”為例,從學(xué)生信息表、課程信息表、成績(jī)信息表查詢包含學(xué)號(hào)、姓名、課程號(hào)、課程名、成績(jī)字段的數(shù)據(jù)信息,其中學(xué)生信息表與成績(jī)信息表通過(guò)“學(xué)號(hào)”字段建立聯(lián)接,課程信息表與成績(jī)信息表通過(guò)“課程號(hào)”字段建立聯(lián)接[2,3]。

2.1 向?qū)е卸啾砺?lián)接的建立

在使用向?qū)?chuàng)建查詢時(shí),在“步驟2-為表建立關(guān)系”中,如果已經(jīng)設(shè)置了第1個(gè)聯(lián)接條件“xsda.學(xué)號(hào)=xscj.學(xué)號(hào)”,則第2個(gè)聯(lián)接條件不能設(shè)置為“kc.課程號(hào)=xscj.課程號(hào)”,如圖1所示;否則會(huì)出現(xiàn)“一個(gè)表不能同時(shí)為兩個(gè)父表的子表”的錯(cuò)誤提示。這第2個(gè)聯(lián)接條件只有設(shè)為“xscj.課程號(hào)=kc.課程號(hào)”才能夠添加,但是按照該設(shè)置得到的結(jié)果肯定是錯(cuò)誤的,返回檢查后會(huì)發(fā)現(xiàn):向?qū)Ь谷灰呀?jīng)將剛才的兩個(gè)聯(lián)接條件調(diào)換了位置,導(dǎo)致結(jié)果錯(cuò)誤。解決方法為:將已經(jīng)調(diào)換位置的兩個(gè)聯(lián)接條件先行移去,再按照調(diào)換之前的情況重新添加一次,向?qū)Ь筒粫?huì)再將正確的聯(lián)接條件調(diào)換位置而導(dǎo)致出錯(cuò)。

在先設(shè)置第1個(gè)聯(lián)接條件為“kc.課程號(hào)=xscj.課程號(hào)”時(shí)也會(huì)出現(xiàn)類似情況,第2個(gè)聯(lián)接條件不能設(shè)置為“xsda.學(xué)號(hào)=xscj.學(xué)號(hào)”,否則會(huì)出現(xiàn)“一個(gè)表不能同時(shí)為兩個(gè)父表的子表”的錯(cuò)誤提示。第2個(gè)聯(lián)接條件只有設(shè)為“xscj.學(xué)號(hào)=xsda.學(xué)號(hào)”才能夠添加,但是同樣出現(xiàn)以上問(wèn)題,向?qū)?huì)自行將該正確設(shè)置的兩個(gè)聯(lián)接條件調(diào)換位置從而導(dǎo)致結(jié)果出錯(cuò),解決方法相同。而對(duì)于“一個(gè)表不能同時(shí)為兩個(gè)父表的子表”的錯(cuò)誤提示,在設(shè)計(jì)器中可以設(shè)置一個(gè)表同時(shí)為兩個(gè)父表的子表,并且結(jié)果是正確的。

圖1 一個(gè)表不能同時(shí)為兩個(gè)父表的子表

如果已經(jīng)設(shè)置了第1個(gè)聯(lián)接條件“xscj.學(xué)號(hào)=xsda.學(xué)號(hào)”,則第2個(gè)聯(lián)接條件不能設(shè)置為“xscj.課程號(hào)=kc.課程號(hào)”,如圖2所示,否則會(huì)出現(xiàn)“一個(gè)表不能同時(shí)為兩個(gè)子表的父表”的錯(cuò)誤提示。第2個(gè)聯(lián)接條件只有設(shè)為“kc.課程號(hào)=xscj.課程號(hào)”才能夠添加,但這是一種錯(cuò)誤的設(shè)置,而錯(cuò)誤的設(shè)置向?qū)Ь捅3衷械腻e(cuò)誤情況,不會(huì)進(jìn)行位置的調(diào)換,實(shí)際上,如果這兩個(gè)聯(lián)接條件調(diào)換位置,結(jié)果就是正確的[4]。

圖2 一個(gè)表不能同時(shí)為兩個(gè)子表的父表

2.2 設(shè)計(jì)器中多表聯(lián)接的建立

在設(shè)計(jì)器中,指定兩個(gè)字段分別給另外兩個(gè)表建立聯(lián)接條件,成績(jī)信息表為B表,其他兩個(gè)表分別為A表和C表,如學(xué)生信息表為A表,課程信息表為C表(亦可指定課程信息表為A表,學(xué)生信息表為C表,但是B表只能為成績(jī)信息表),則三表之間聯(lián)接條件的設(shè)置可有如下8種設(shè)置方式:

⑴ A=B B=C

⑵ A=B C=B

⑶ C=B A=B

⑷ C=B B=A

⑸ B=A B=C

⑹ B=A C=B

⑺ B=C A=B

⑻ B=C B=A

例如第⑴情況的聯(lián)接條件設(shè)置如圖3所示。

圖3 A=B B=C聯(lián)接條件設(shè)置方式

聯(lián)接條件可直接使用鼠標(biāo)按指定順序拖放關(guān)聯(lián)字段來(lái)設(shè)置建立。

經(jīng)過(guò)驗(yàn)證,前4種設(shè)置方式可以得出正確的結(jié)果,而后4種情況得出的結(jié)果是錯(cuò)誤的,其中⑸和⑹兩種情況出現(xiàn)C表課程信息表數(shù)據(jù)重復(fù)出現(xiàn)的錯(cuò)誤,如圖4所示,⑺和⑻兩種情況出現(xiàn)A表學(xué)生信息表數(shù)據(jù)重復(fù)出現(xiàn)的錯(cuò)誤,如圖5所示。

圖4 C表課程信息表數(shù)據(jù)重復(fù)出現(xiàn)

圖5 A表課程信息表數(shù)據(jù)重復(fù)出現(xiàn)

總結(jié)規(guī)律如下:

⑴ 凡是第1個(gè)聯(lián)接條件中B表作為子表的設(shè)置方式即⑴、⑵、⑶、⑷種情況結(jié)果均是正確的。

⑵ 凡是第1個(gè)聯(lián)接條件中B表作為父表的設(shè)置方式即⑸、⑹、⑺、⑻種情況結(jié)果均是錯(cuò)誤的。

分析原因,上述8種設(shè)置方式對(duì)應(yīng)的具體聯(lián)接設(shè)置代碼為:

⑴ xsda JOIN xscj JOIN kc ON Xscj.課程號(hào)=Kc.課程號(hào)ON Xsda.學(xué)號(hào)=xscj.學(xué)號(hào)

⑵ xsda JOIN xscj JOIN kc ON Kc.課程號(hào)=Xscj.課程號(hào)ON Xsda.學(xué)號(hào)=xscj.學(xué)號(hào)

⑶ kc JOIN xscj JOIN xsda ON Xsda.學(xué)號(hào)=Xscj.學(xué)號(hào)ON Kc.課程號(hào)=Xscj.課程號(hào)

⑷ kc JOIN xscj JOIN xsda ON Xscj.學(xué)號(hào)=Xsda.學(xué)號(hào)ON Kc.課程號(hào)=Xscj.課程號(hào)

⑸ xscj JOIN xsda JOIN kc ON Xscj.課程號(hào)=Kc.課程號(hào)ON Xscj.學(xué)號(hào)=Xsda.學(xué)號(hào)

⑹ xscj JOIN xsda JOIN kc ON Kc.課程號(hào)=Xscj.課程號(hào)ON Xscj.學(xué)號(hào)=Xsda.學(xué)號(hào)

⑺ xscj JOIN kc JOIN xsda ON Xsda.學(xué)號(hào)=Xscj.學(xué)號(hào)ON Xscj.課程號(hào)=Kc.課程號(hào)

⑻ xscj JOIN kc JOIN xsda ON Xscj.學(xué)號(hào)=Xsda.學(xué)號(hào)ON Xscj.課程號(hào)=Kc.課程號(hào)

可以看出⑸、⑹、⑺、⑻種情況出錯(cuò)的原因在于:B表成績(jī)信息表應(yīng)該同時(shí)與A表學(xué)生信息表和B表課程信息表建立聯(lián)接條件,但是在這種情況下只與其中的一個(gè)表建立了聯(lián)接條件,從而導(dǎo)致聯(lián)接條件對(duì)應(yīng)不正確,出現(xiàn)錯(cuò)誤的結(jié)果。而造成這種情況的原因取決于第1個(gè)聯(lián)接條件的設(shè)置,不受第2個(gè)聯(lián)接條件的影響,因此具體設(shè)置操作規(guī)律可簡(jiǎn)化如下:第1個(gè)聯(lián)接條件中B表只能作為子表出現(xiàn)[5,6]。

3 結(jié)束語(yǔ)

向?qū)е腥绻O(shè)置的聯(lián)接條件是正確的,向?qū)Ь蜁?huì)調(diào)換兩個(gè)聯(lián)接條件的位置從而造成設(shè)置錯(cuò)誤,而如果設(shè)置的聯(lián)接條件是錯(cuò)誤的,則向?qū)Р粫?huì)調(diào)換位置,維持原有錯(cuò)誤設(shè)置。這應(yīng)該是視圖和查詢向?qū)е械囊粋€(gè)很嚴(yán)重的BUG。設(shè)計(jì)器中多表聯(lián)接的設(shè)置主要牽涉到與其他兩個(gè)表建立聯(lián)接的B表是否在JOIN中與其他兩個(gè)表都建立了聯(lián)接,只有與其他兩個(gè)表都建立了JOIN聯(lián)接才能得出正確的結(jié)果。數(shù)據(jù)庫(kù)中表之間聯(lián)接條件尤其是多表之間的聯(lián)接條件很容易出現(xiàn)錯(cuò)誤,只有深入分析研究,才能真正掌握其實(shí)質(zhì),從而避免在實(shí)際應(yīng)用中出現(xiàn)錯(cuò)誤。

參考文獻(xiàn):

[1] 黃河,王賢志.SQL語(yǔ)言與關(guān)系數(shù)據(jù)庫(kù)[M].電子工業(yè)出版社,2011.

[2] 雷國(guó)華,胡西厚.數(shù)據(jù)庫(kù)技術(shù)與醫(yī)學(xué)應(yīng)用[M].中國(guó)石油大學(xué)出版社,2012.

[3] 雷國(guó)華,胡西厚.醫(yī)學(xué)計(jì)算機(jī)技術(shù)與應(yīng)用[M].人民衛(wèi)生出版社,2009.

[4] 張高亮.Visual FoxPro程序設(shè)計(jì)[M].科學(xué)出版社,2012.

[5] 畢文才.Visual FoxPro編程方法與技巧[M].鄭州大學(xué)出版社,2008.

[6] 魏茂林.數(shù)據(jù)庫(kù)應(yīng)用技術(shù)—Visual FoxPro 6.0(第4版)[M].電子工業(yè)出版社2012.

猜你喜歡
視圖
關(guān)于SQL視圖優(yōu)點(diǎn)和缺點(diǎn)的淺探
5.3 視圖與投影
視圖
Y—20重型運(yùn)輸機(jī)多視圖
SA2型76毫米車載高炮多視圖
Django 框架中通用類視圖的用法
韶山市| 财经| 交口县| 万年县| 龙岩市| 合阳县| 宁德市| 年辖:市辖区| 新乡县| 康平县| 沂南县| 长沙市| 大埔区| 海伦市| 民县| 永川市| 定安县| 长沙市| 高唐县| 丰城市| 上杭县| 辽阳县| 微博| 桑植县| 壶关县| 永宁县| 河源市| 大连市| 北海市| 新绛县| 仲巴县| 新化县| 贵德县| 建湖县| 喜德县| 苏尼特左旗| 苗栗市| 峨山| 克拉玛依市| 利辛县| 襄樊市|