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

管理信息系統數據查詢與修改模塊的設計與實現

2009-04-29 00:00:00秦鴻霞
中國管理信息化 2009年13期

[收稿日期]2008-12-20

[摘 要]本文以會計科目的查詢與修改操作為例,詳細分析與探討了利用Visual FoxPro設計與實施管理信息系統數據查詢與修改模塊的基本原理、方法和步驟,并提供了相應的程序代碼。

[關鍵詞]管理信息系統;會計科目;數據查詢;數據修改;Visual FoxPro程序設計

doi:10.3969/j.issn.1673-0194.2009.13.001

[中圖分類號]F232[文獻標識碼]A[文章編號]1673-0194(2009)13-0004-04

數據查詢與修改操作是管理信息系統必不可少的基本操作,查詢與修改模塊則是管理信息系統中極其重要的功能模塊。數據查詢與修改處理的基本原理是:先提供查詢條件,然后在數據表中查詢符合條件的記錄,再以只讀方式顯示出查詢結果。如果只進行查詢操作,則不允許對查詢結果進行修改;如果要在所顯示的查詢結果中修改數據,則需要先將顯示結果變為非只讀方式,然后進行修改,待相關數據修改完畢后,仍需將顯示結果再變為只讀方式。本文以Visual FoxPro為關系數據庫管理系統,以會計科目的查詢與修改為例,分析與探討管理信息系統數據查詢與修改模塊的實現方法。本文所提供的程序代碼已通過上機驗證。

1 數據表的結構

由于查詢與修改操作是對相應數據表中的相關數據進行查詢與修改處理,所以,必須首先弄清楚相應數據表的結構。假設會計科目相關信息保存在會計科目表中,會計科目表的數據結構如表1所示,其文件名為kjkm.dbf,存儲在默認目錄下。可以將會計科目表文件kjkm.dbf添加到相應的賬務處理數據庫中加以管理。

2 查詢與修改表單界面的設計

根據表1所示的會計科目表的結構,在Visual FoxPro的表單設計器中設計如圖1所示的查詢與修改表單。其中,矩形對應于一個容器控件,該容器控件之上放置有標簽、組合框、文本框等對象,“查詢條件”、“待選項目:”、“比較符:”、“值:”是為各標簽設置的Caption屬性,Combo 1、Combo 2是各組合框的默認的Name屬性,Text 1、Text 2是各文本框的默認的Name屬性。而“查詢”、“修改”、“退出”是為各命令按鈕控件設置的Caption屬性。另外,“查詢與修改項目”是為表單設置的Caption屬性。以上控件或對象都是借助“表單控件”工具欄畫出的,各控件的Caption屬性通過相應的“屬性”對話框進行設置。

需要說明的是,Text 1和Text 2文本框實際是重疊在一起的,并與Combo 1及Combo 2組合框水平對齊,運行時同一時刻只能顯示其中一個文本框,感覺上就像只有一個文本框一樣。這里只是為了方便描述和便于理解,才以圖1中所示的呈現形式進行布局。

表單的下方是一個表格控件,設計該表格控件的步驟和方法是:①在“表單控件”工具欄選中“表格”控件,再在表單上適當的位置畫一個大小適中的表格,其Name屬性默認為Grid 1;②用鼠標右鍵單擊Grid 1表格,再在彈出的快捷菜單中選擇“生成器”,則出現表格生成器對話框,可在其“表格項”選項卡選擇或設置此表格關聯的數據表kjkm(或選擇文件kjkm.dbf),并選定該表格關聯的全部字段,再在“布局”選項卡將表格各欄對應的標題設定為圖1中表格的標題,最后單擊表格生成器的“確定”按鈕即可。這樣設置后,就為表單建立了數據環境,且數據環境設計器中對應的數據表就是kjkm,數據環境和kjkm數據表的Name屬性分別為Dataenvironment和Cursor1。

3 查詢與修改模塊的功能目標

數據庫或數據表中的數據量一般都比較大,無論是進行數據查詢還是進行數據修改,都需要指定相應的查詢或修改條件,再進行相應的操作。因此,要實現查詢與修改功能,應能通過其表單界面指定查詢條件,并執行相應的查詢或修改操作,操作完畢后應使表單能夠退出內存。具體來說,查詢與與修改模塊就是要實現以下功能目標:

(1)指定查詢條件。圖1所示的表單運行后,組合框Combo 1是一個下拉列表框,可以從其下拉列表項“科目編號”、“科目名稱”、“借貸方向”、“期初余額”中任意選擇其中一項,默認的選項為“科目名稱”。同樣,Combo 2也是一個下拉列表框,可以在其下拉列表中分別選擇以下比較運算符:<、<=、=、==、>=、>、<>,默認的比較符選項為=。當從Combo 1下拉列表中選擇“科目編號”、“科目名稱”或“借貸方向”時,Text 2文本框隱藏,而Text 1文本框顯示并獲得焦點,對應的字符型數據可在Text 1文本框內輸入;否則,當從Combo 1下拉列表中選擇“期初余額”時,Text 1文本框隱藏,同時Text 2文本框顯示并獲得焦點,可將對應的數值型數據輸入到Text 2文本框。這樣,由Combo 1、Combo 2中選擇的內容與Text 1或Text 2中指定的內容就構成了一個條件。

(2)進行查詢或修改操作。表單運行后,表格Grid 1中起初并不顯示任何數據,只有單擊“查詢”按鈕時,才將滿足查詢條件的全部記錄顯示在表格中,顯示結果不允許修改,只有單擊“修改”按鈕后才能修改表格中顯示的數據。焦點離開表格至再次單擊“修改”按鈕前,表格中的數據禁止被修改。

(3)退出。單擊“退出”按鈕,表單退出內存。

4 查詢與修改模塊功能的實現

4.1 “指定查詢條件”功能的實現

4.1.1 定義表單的Load事件與Unload事件

表單的Load事件是表單對象建立之前引發的事件,而Unload事件則是表單對象釋放時最后一個要引發的事件。可在表單的Load事件中使用Public聲明含4個元素的數組xiangmu和含7個元素的數組bijiao,其中數組xiangmu各元素分別保存Combo 1下拉列表框中的待選項目,包括科目編號、科目名稱、借貸方向、期初余額;數組bijiao各元素分別保存比較運算符,包括小于(<)、小于或等于(<=)、等于(=)、全等于(==)、大于或等于(>=)、大于(>)、不等于(<>)。另外,為使表單運行后能采用精確匹配方式進行字符串比較,還應在Load事件的開始添加set exact on語句。表單的Load事件的程序代碼對應如下:

set exact on

public xiangmu(4),bijiao(7)

xiangmu(1)=\"科目編號\"

xiangmu(2)=\"科目名稱\"

xiangmu(3)=\"借貸方向\"

xiangmu(4)=\"期初余額\"

bijiao(1)=\"<\"

bijiao(2)=\"<=\"

bijiao(3)=\"=\"

bijiao(4)=\"==\"

bijiao(5)=\">=\"

bijiao(6)=\">\"

bijiao(7)=\"<>\"

由于在Load事件中使用了set exact on語句,因而需要定義表單的Unload事件,并將其Unload事件的程序代碼設置為set exact off,以便退出表單時將Visual FoxPro設置為默認的字符串比較方式。

如果在表單的Load事件中不包含set exact on語句,就表明程序中采用默認的set exact off方式進行字符串的比較,此時便不需要專門為表單的Unload事件設置相應的程序代碼。但在采用set exact off方式進行字符串的比較運算時,只要關系表達式中比較運算符“=”、“<=”或“>=”右邊的字符串與其左邊字符串前面的部分內容相匹配,即可得到邏輯真#8226;T#8226;的結果。

4.1.2 指定Combo 1和Combo 2關聯的數據源

由于Combo 1是一種下拉列表框形式的組合框,其下拉列表項分別為科目編號、科目名稱、借貸方向和期初余額,對應于數組xiangmu中各元素的值,因此可依次將Combo 1組合框的RowSourceTye、RowSource和Style屬性分別設定為5-數組、xiangmu、2-下拉列表框,這樣就分別設定了該組合框控件中數據值的源的類型、數據值的源及組合框的類型。同樣,可將Combo 2的RowSourceTye、RowSource和Style屬性分別設定為5-數組、bijiao、2-下拉列表框。

這樣設置并運行后,Combo 1下拉列表框中就會包含科目編號、科目名稱、借貸方向和期初余額等列表項,而Combo 2下拉列表框中包含<、<=、=、==、>=、>、<>等列表項,可供選擇。

4.1.3 定義表單的Init事件

Init事件是在對象建立時引發的事件。要使表單啟動后,Combo 1默認選擇為“科目名稱”,Combo 2默認選擇為等號“=”,可在表單的Init事件中分別使Combo 1、Combo 2的listindex屬性設置為2和3,其中2對應于4.1.1節中定義的數組xiangmu第二個元素xiangmu(2)的值,3對應于數組bijiao的第三個元素bijiao(3)的值。為確保顯示在表格中的數據不能被隨意修改(除非單擊“修改”按鈕),可使表格Grid 1的ReadOnly屬性設置為#8226;t#8226;以使表格只讀。另外,當Combo 1中選擇“期初余額”時,應將Text 1的visible屬性設置為#8226;f#8226;,以使Text 1隱藏;同時將Text 2的visible屬性設置為#8226;t#8226;,以使Text 2顯式顯示,應利用setfocus方法使Text 2獲得焦點,以便于數值型數據的輸入。否則,當Combo 1中選擇了“科目編號”、“科目名稱”或“借貸方向”時,應使采用同樣的方法使Text 2隱藏,使Text 1可見并獲得焦點,以便于字符型數據的輸入。表單的Init事件的程序代碼對應如下:

thisform.Combo 1.listindex=2

thisform.Combo 2.listindex=3

thisform.grid1.readonly=#8226;t#8226;

if thisform.Combo 1.value=\"期初余額\"

thisform.Text 1.visible=#8226;f#8226;

thisform.Text 2.visible=#8226;t#8226;

thisform.Text 2.setfocus

else

thisform.Text 2.visible=#8226;f#8226;

thisform.Text 1.visible=#8226;t#8226;

thisform.Text 1.setfocus

endif

4.1.4 定義Combo 1的InteractiveChange事件

表單運行后,經常在Combo 1和Combo 2中選擇下拉列表項,根據Combo 1中選擇的內容是否為“期初余額”,需要確定是在Text 2中還是在Text 1中輸入數據。當Combo 1中選擇的內容改變時,如果變為“期初余額”,則應使Text 1隱藏,Text 2可見并獲得焦點,以便于輸入數值型數據;否則,如果Combo 1中的內容變為其他項(科目編號、科目名稱、借貸方向),則Text 2不可見,Text 1可見并獲得焦點,以便于輸入字符型數據。可在Combo 1的InteractiveChange事件中設置相關代碼,當用戶使用鍵盤或鼠標更改此控件的值時,其InteractiveChange事件中的代碼被立即執行。Combo 1的InteractiveChange事件的程序代碼對應如下:

if this.value=\"期初余額\"

thisform.Text 1.visible=#8226;f#8226;

thisform.Text 2.visible=#8226;t#8226;

thisform.Text 2.setfocus

else

thisform.Text 2.visible=#8226;f#8226;

thisform.Text 1.visible=#8226;t#8226;

thisform.Text 1.setfocus

endif

同樣,Combo 2中選擇的比較符發生改變時,如果Combo 1中選擇的是“期初余額”,則使Text 2獲得焦點;否則,如果Combo 1中選擇的是“科目編號”、“科目名稱”或“借貸方向”,則使Text 1獲得焦點,以便于在對應的文本框內輸入對應待選項目的相關數據。可在Combo 2的InteractiveChange事件中設置相關代碼,Combo 2的InteractiveChange事件的程序代碼對應如下:

if thisform.Combo 1.value=\"期初余額\"

thisform.Text 2.setfocus

else

thisform.Text 1.setfocus

endif

4.1.5 設置Text 2的數據類型和輸入掩碼

由于Text 2文本框用于輸入期初余額,對應于數值型數據,所以應將其數據類型設置為數值型,并且最好指定其輸入掩碼,使輸入的數值型數據符合表1中qcye字段(即期初余額字段)的寬度與小數位數。設置方法是:在表單設計器,用鼠標右鍵單擊Text 2控件,在彈出的快捷菜單中選擇“生成器”選項,則出現“文本框生成器”對話框,可在“格式”選項卡將數值類型設定為“數值型”,并將輸入掩碼設置為999999999.99,再單擊“文本框生成器”對話框中的“確定”按鈕即可。

另外,由于Text 1文本框用于輸入科目編號、科目名稱或借貸方向等字符型數據,而Text 1默認的數據類型正好為字符型,所以不需專門對Text 1控件的數據類型進行設置。

4.1.6 定義Text 1和Text 2的Click事件

由于多次操作,Text 1及Text 2中可能保留有上次輸入的內容。如果單擊Text 1時,能使Text 1中的字符型數據自動被清空,或者單擊Text 2時,能使Text 2中的數值型數據自動置零,則輸入操作將變得更加方便。可以分別在Text 1和Text 2的Click事件中將其Value屬性值對應設置為space(0)和0.00,其中space(0)表示由0個空格組成的空字符串。這樣,Text 1的Click事件的程序代碼為:this.value=space(0);而Text 2的Click事件的程序代碼為:this.value=0.00。

4.2 “查詢與修改”功能的實現

4.2.1 設置Cursor 1的Filter屬性與Combo 2的ControlSource屬性

Cursor 1是數據環境Dataenvironment中對應于會計科目表kjkm的游標的默認Name屬性(參見第2節所做的設置),它與表單上的Grid 1表格控件相互關聯。為了使表單初始運行后,表格Grid 1中不顯示任何初始數據,可在屬性窗口將Cursor 1的Filter屬性設置為.F.,Filter屬性的功能就是使對應于Cursor 1的表格顯示Filter屬性值為真的記錄,當設置為邏輯假值時,所關聯的表格就不會顯示任何數據了。

Combo 2下拉列表框的可選項是比較運算符對應的字符串,如“<”、“<=”等,為了使在Combo 2中選擇的列表項對應于真正意義的比較運算符,而不是字符串,就需要首先設置其ControlSource屬性,以便與某個字符型變量綁定,然后再用宏替換函數表示該字符型變量對應的比較運算符。假設在表單設計器的屬性窗口將Combo 2的ControlSource屬性設置為bj,則可以用bj.表示從Combo 2中選擇的列表項對應的比較運行符,其中表示宏替換函數。例如,從Combo 2中選擇<,則bj的值為字符串“<”,而bj.則表示小于號<,而不是字符串“<”。這樣設置,主要是為了縮短查詢程序代碼的長度。

4.2.2 定義“查詢”按鈕的Click事件

當在Combo 1、Combo 2下拉列表框中選擇待查詢項目和比較運算符,且在Text 1或Text 2輸入對應的數據后,如果單擊“查詢”按鈕,則查詢結果應能夠以只讀方式顯示在表格Grid 1中。因此,“查詢”按鈕的Click事件的程序代碼應依次執行以下功能:①使表格Grid 1只讀;②表示出從Combo 1下拉列表中選擇不同項時對應的查詢條件;③將數據環境Dataenvironment中對應于會計科目表kjkm的游標Cursor1的Filter屬性設置為對應的查詢條件;④根據Combo 1中選擇的項是否“期初余額”來決定是Text 2還是Text 1獲得焦點;⑤刷新表單。這樣,“查詢”按鈕的Click事件的程序代碼對應如下:

thisform.grid1.readonly=.t.

do case

case thisform.Combo 1.value=\"科目編號\"

tj=\"allt(kmbh)bj.'\"+allt(thisform.Text 1.value) + \"'\"

case thisform.Combo 1.value=\"科目名稱\"

tj=\"allt(kmmc)bj.'\"+allt(thisform.Text 1.value)+\"'\"

case thisform.Combo 1.value=\"借貸方向\"

tj=\"allt(jdfx)bj.'\"+allt(thisform.Text 1.value)+\"'\"

case thisform.Combo 1.value=\"期初余額\"

tj=\"qcyebj.thisform.Text 2.value\"

endcase

thisform.dataenvironment.cursor1.filter=tj

if thisform.Combo 1.value=\"期初余額\"

thisform.Text 2.setfocus

else

thisform.Text 1.setfocus

endif

thisform.refresh

上述代碼的相關說明對應如下:

(1)thisform.grid1.readonly=#8226;t#8226;是將表格Grid 1的只讀屬性設置為邏輯真值,使表格中的數據不允許被修改。

(2)分支語句do case…… endcase用于定義從Combo 1選擇不同列表項時對應的查詢條件,并用變量tj表示。例如:當從Combo 1選擇“科目編號”時,tj=\"allt(kmbh)bj.' \"+allt(thisform.Text 1.value) + \"' \",其中bj.表示與從Combo 2中選擇的項相對應的比較運算符,allt()的作用是將字符串的前導和末尾空格去掉;此時,當從Combo 2中選擇<=、在Text 1中輸入201時,tj=\"allt(kmbh)<='201'\"。同理,當從Combo 1選擇“期初余額”、Combo 2中選擇<=、在Text 2中輸入1 000時,tj=\"qcye<=1 000.00\"。

(3)語句thisform.dataenvironment.cursor1.filter=tj就是將Cursor1的Filter屬性設置為tj對應的查詢條件,例如:thisform.dataenvironment.cursor1.filter=\"allt(kmbh)<=' 201' \"。

(4)選擇語句if…… else…… endif的作用是,如果Combo 1中選擇了“期初余額”,則使Text 2獲得焦點以便于輸入數值型數據,否則(表示選擇了“科目編號”、“科目名稱”或“借貸方向”),則使Text 1獲得焦點以便于輸入字符型數據。由于表單的Init事件和Combo 1的InteractiveChange事件的程序代碼規定了,如果在Combo 1中選擇列表項“期初余額”,則使Text 1隱藏、Text 2可見;否則,會使Text 2隱藏、Text 1可見,因此,在任何時候,只要Combo 1中選擇了“期初余額”,就只可能在可見的Text 2中輸入數據,而不能在隱藏的Text 1中輸入數據;同樣,只要Combo 1中選擇的不是“期初余額”,就不能在隱藏的Text 2中輸入數據。這樣,就不必擔心數據輸錯文本框的問題。

(5)thisform.refresh的功能是刷新表單,以便在表格Grid 1中顯示出滿足查詢條件的記錄。

4.2.3 修改功能的實現

單擊“修改”按鈕時,表格Grid 1控件中顯示的數據應能夠被修改。因此,可在“修改”按鈕的Click事件中將Grid 1的ReadOnly屬性設置為#8226;f#8226;,并使Grid 1獲得焦點,就允許對表格中顯示的數據進行修改了。“修改”按鈕的Click事件的程序代碼對應如下:

thisform.grid1.readonly=#8226;f#8226;

thisform.grid1.setfocus

當使用鼠標或鍵盤使焦點移出表格時,表明本次修改操作結束。以后即使由于單擊“查詢”按鈕或直接單擊表格,而使表格再次獲得焦點,表格中的數據也不允許進行修改,除非再次單擊了“修改”按鈕。因此,焦點在移出表格Grid 1前,還應將其ReadOnly屬性設置為#8226;t#8226;,使得只有再次單擊“修改”按鈕時,才能去修改表格中的數據。可以利用Grid 1的Valid事件達到此目的,控件的Valid事件中的代碼在控件將要失去焦點前被執行。表格Grid 1的Valid事件的程序代碼對應為:this.readonly=#8226;t#8226;。

4.3 “退出”功能的實現

退出功能最簡單的實現方法就是單擊“退出”按鈕時立即使表單從內存中釋放。因此,可以在“退出”按鈕的Click事件中利用表單的release方法實現退出操作。“退出”按鈕的Click事件對應的程序代碼為:thisform.release。

主要參考文獻

[1] 李國紅.管理信息系統數據輸入模塊的設計與實現——兼論會計科目的輸入設計[J].中國管理信息化,2006(11).

[2] 王利.全國計算機等級考試二級教程——Visual FoxPro程序設計[M].北京:高等教育出版社,2005.

[3] 陳洛資,陳昭平.數據庫系統及應用基礎[M].北京:清華大學出版社,北京交通大學出版社,2005.

主站蜘蛛池模板: 亚洲天堂视频在线播放| 青草娱乐极品免费视频| 99激情网| 亚洲AⅤ无码国产精品| 国产特一级毛片| 亚洲国产欧美中日韩成人综合视频| 国产欧美在线视频免费| 久久久久亚洲av成人网人人软件| 国产精品亚洲а∨天堂免下载| 亚洲男人天堂久久| 偷拍久久网| 2021最新国产精品网站| 尤物视频一区| 又粗又大又爽又紧免费视频| 久久精品丝袜| 真实国产乱子伦高清| 久久久久人妻一区精品色奶水| 波多野结衣第一页| 啪啪免费视频一区二区| 激情综合婷婷丁香五月尤物| 亚洲精品你懂的| a级毛片免费看| 欧美精品另类| 国产熟睡乱子伦视频网站| 亚洲国产在一区二区三区| 国产无码高清视频不卡| 亚洲欧洲自拍拍偷午夜色无码| 亚洲天堂网在线播放| 亚洲欧美国产视频| 黄色网在线| 在线播放国产99re| 国产成人喷潮在线观看| 人妻一区二区三区无码精品一区| 成人小视频网| 日本三区视频| 亚洲男人在线| 国产精品刺激对白在线| 日韩高清在线观看不卡一区二区| 国产91小视频| 啪啪国产视频| 亚洲国产欧美目韩成人综合| 国产性猛交XXXX免费看| 国产小视频a在线观看| 四虎永久在线精品国产免费| 国产成人精品午夜视频'| 欧美亚洲一二三区| 波多野结衣一区二区三区AV| 国产精品九九视频| 91偷拍一区| 99性视频| 久久国产成人精品国产成人亚洲 | 热re99久久精品国99热| 女人av社区男人的天堂| 精品久久777| 欧美69视频在线| 亚洲狼网站狼狼鲁亚洲下载| 国产精品视频久| аⅴ资源中文在线天堂| 国产亚洲精品自在久久不卡 | 亚洲色精品国产一区二区三区| 久久精品亚洲中文字幕乱码| 亚洲成A人V欧美综合天堂| 亚洲黄网在线| 精品三级在线| 亚洲欧洲国产成人综合不卡| 少妇极品熟妇人妻专区视频| 国产乱子精品一区二区在线观看| 国产自在线播放| 天天综合色天天综合网| 欧美成人看片一区二区三区 | 国产美女精品人人做人人爽| 思思热在线视频精品| 亚洲国产高清精品线久久| 免费人成又黄又爽的视频网站| 国产在线视频二区| 欧美黄色a| 国产亚洲美日韩AV中文字幕无码成人 | 黄色福利在线| 亚洲精品福利视频| 自拍亚洲欧美精品| 亚洲午夜综合网| 国产精品午夜电影|