• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      Gm d VFP中使用函數(shù)對檔案數(shù)據(jù)庫進行模糊查詢

      2015-10-31 09:17:59
      中國科技縱橫 2015年14期
      關(guān)鍵詞:子項關(guān)鍵字命令

      陳 元

      (中國建筑西北設(shè)計研究院有限公司,陜西西安 710018)

      Gm d VFP中使用函數(shù)對檔案數(shù)據(jù)庫進行模糊查詢

      陳元

      (中國建筑西北設(shè)計研究院有限公司,陜西西安 710018)

      VFP6.0是一種優(yōu)秀的小型數(shù)據(jù)庫管理軟件,功能齊全,程序語言簡潔直觀,將它作為工具用于單位工程檔案數(shù)據(jù)庫的建立與管理是比較理想的選擇。用這兩種方法設(shè)計的檢索程序在投入實際工作后,在快速查找,數(shù)據(jù)匯總等方面大大提高了工作效率,使用至今,比較穩(wěn)定可靠,給檔案處日常工作帶來的便利是實實在在的,目前準備繼續(xù)擴展功能,從而使其更好地在工作中發(fā)揮作用。

      VFP 函數(shù) 檔案數(shù)據(jù)庫

      本單位使用VFP的表設(shè)計器建立了30多年已歸檔的工程檔案數(shù)據(jù),包含設(shè)計編號,工程名稱,子項名稱,設(shè)計單位,設(shè)總姓名,底圖柜,歸檔時間,設(shè)計階段,電子文件等字段,數(shù)據(jù)庫文件名為shuju. dbf,目前記錄了約3萬個項目的信息,只列舉少數(shù)部分如表1。

      對數(shù)以萬計的記錄如果靠手工查詢統(tǒng)計,效率是很低下的。所以必需設(shè)計相應(yīng)的程序,應(yīng)當說明的是,數(shù)據(jù)庫處于基礎(chǔ)位置,所有程序都是對它進行操作,數(shù)據(jù)庫文件本身的重要性不言而喻。

      工作中要求對工程名稱,子項名稱等實施快速檢索,輸入關(guān)鍵字后將符合要求的記錄輸出,如果找不到則輸出空白提示。對此,最簡單的辦法是直接使用查詢數(shù)據(jù)庫記錄命令FIND和SEEK,但這兩個命令都有一個不盡人意的地方,雖然它們也可以模糊查詢,并不一定要求輸入的關(guān)鍵字與記錄的字段內(nèi)容完全一致,但卻要求輸入的關(guān)鍵字必須是數(shù)據(jù)庫記錄內(nèi)容字符串前面的一部分才認為匹配成功,而在實際中,我們很難作到輸入的關(guān)鍵字一定是數(shù)據(jù)庫記錄的前一個或幾個關(guān)鍵字,假如,查詢子項名稱時輸入“大廈”,名稱為“信息大廈”的記錄卻被濾掉,這在實際工作中是絕不被允許的,而且如果輸入為空時,F(xiàn)IND和SEEK會立即報錯并退出整個程序,穩(wěn)定性也不令人滿意。

      表1

      為解決這個問題,可以在VFP中采取了如下兩種方法做到真正的模糊查詢,首先介紹函數(shù)法,使用STORE SPACE()TO和READ命令建立內(nèi)存變量用于讀入用戶輸入的關(guān)鍵字,建立的內(nèi)存變量應(yīng)有能容納5個漢字以上的空間以確保能夠接受內(nèi)容多少不一的關(guān)鍵字,然后用RTRIM()和LTRIM()函數(shù)除去輸入內(nèi)容左右兩邊的空格,除去空格的目的是,1.絕大多數(shù)情況下,空格不是查找的關(guān)鍵字,2.如果輸入的關(guān)鍵字未能占滿內(nèi)存變量,那么輸入的內(nèi)容將是“輸入的關(guān)鍵字+剩余的幾個空格”,所以必需要以經(jīng)處理的字符串作為查詢依據(jù),然后打開數(shù)據(jù)庫,用SORT命令重排數(shù)據(jù)庫——按需要查詢的字段名排序(相當于使用FIND、SEEK命令前對數(shù)據(jù)庫的索引),打開新數(shù)據(jù)庫,建立循環(huán),接著就是最關(guān)鍵的一步——利用判斷子串函數(shù)AT()去判斷經(jīng)處理后的關(guān)鍵字是否為第一個相應(yīng)字段內(nèi)容的子串,如果是則將該記錄全部或部分字段內(nèi)容輸出,不是則繼續(xù)用AT()判斷下一條記錄的相應(yīng)字段內(nèi)容。在滿足條件記錄較多的情況下,可以輸出幾條記錄后就用CLEAR命令清屏,在原位置上重新輸出,直到將所有記錄判斷完畢,結(jié)束循環(huán)。

      如果對子項名稱執(zhí)行檢索,程序代碼如下:(注:程序后引號內(nèi)文字是對程序的說明)

      SET TALK OFF

      CLEAR

      DO WHILE.T.

      STORE SPACE(12) TO DG

      @ 8,18 SAY"請輸入關(guān)鍵字:" GET DG

      READ “建立并提示輸入關(guān)鍵字,并讀入”

      DG1=RTRIM(DG)

      DG2=LTRIM(DG1) “除去空格”

      CLEAR

      F=2

      USE shuju.dbf

      SORT ON 工程名稱 TO shuju1

      USE

      USE TUSHU1“對數(shù)據(jù)庫排序,打開新數(shù)據(jù)庫”

      DO WHILE .not.eof()

      DX=工程名稱

      IF AT(DG2,DX)<>0 “判斷是否滿足條件,是則輸出全部

      @ f,15 say 工程名稱 字段內(nèi)容,否則判斷下一條記錄”

      @ f,87 say 子項名稱

      F=F+1

      @ f,22 say 合同號

      @ f,59 say 設(shè)計所

      @ f,77 say 底圖柜

      F=F+1

      @ f,22 say 設(shè)總

      @ f,85 say 歸檔時間

      F=F+1

      @ F,15 SAY"記錄分界線"

      SKIP

      F=F+1

      ELSE

      SKIP

      ENDIF

      if f=18 “屏幕已滿,用亮帶提示繼續(xù)查找或結(jié)束”

      F=F+1

      @F,20 PROMPT"繼續(xù)"MESSAGE""

      @F,40 PROMPT"結(jié)束"MESSAGE""

      SET MESSAGE TO 20

      D=1

      MENU TO D

      DO CASE

      CASE D=1

      F=2

      CLEAR

      LOOP

      CASE D=2

      CLEAR

      EXIT

      ENDCASE

      ENDIF

      ENDDO

      F=F+1

      IF F=3 “提示未能找到符合條件的記錄”

      @6,35 SAY"未找到匹配的記錄"

      ENDIF

      @F,30 PROMPT"重新開始"MESSAGE"" “數(shù)據(jù)庫查找完畢,用亮帶

      @F,50 PROMPT"結(jié)束退出"MESSAGE"" 提示開始新的查找或結(jié)束”

      C=1

      SET MESSAGE TO 20

      MENU TO C

      DO CASE

      CASE C=1

      CLEAR

      LOOP

      CLEAR

      CASE C=2

      EXIT

      CLEAR

      ENDCASE

      ENDDO

      CLEAR

      USE

      DELETE FILE TUSHU1.DBF

      RETURN

      (上述程序在VFP6.0下運行通過)

      這種方法實現(xiàn)了真正意義的模糊查詢,如果對程序稍加修改,輸入多個字符串,在一次循環(huán)中使用多次AT()函數(shù),就能實現(xiàn)多字段的復(fù)合查找,如果使用在程序中使用SET DEVICE TO FILE(PRINTER)命令,就可以將查找的的內(nèi)容直接輸出到文件或打印機。嚴格說,這個過程是重組數(shù)據(jù)庫然后再按順序?qū)ζ洳檎?,因此速度肯定不及FIND和SEEK命令,但實際使用中是感覺不到的,主要存在的問題是,程序代碼比較多,程序設(shè)計有相當多“@”命令,只是為了設(shè)置屏幕輸出的位置,而且,查詢結(jié)果不能直接生成文件,所以還是有值得改進的地方。

      “面向?qū)ο蟆痹O(shè)計的方法具有人機對話界面直觀,在設(shè)計器中直接建立完成,程序代碼相對較少等優(yōu)點,而且輸出結(jié)果能夠一次完成,拖動滾動條即可全部顯示,直接調(diào)用菜單欄的“另存”即可生成文件,快捷方便,程序不再需要繁瑣的屏幕輸出顯示設(shè)置,因此編程工作得到了簡化。首先使用表單設(shè)計器直接建立起應(yīng)用界面如圖1。

      仍舊使用原來的數(shù)據(jù)庫文件shuju.dbf,直接用于查詢的命令語句仍需在對應(yīng)的設(shè)計器內(nèi)使用函數(shù),除原先的AT函數(shù)可用外,SELECT命令同樣有此功能且更加簡潔,讀入輸入的數(shù)據(jù),首先也要濾掉空格,在SELSCT命令行加入LIKE選項,判斷其是否是被查詢字段的子串,是則選中,否則對下一條字段內(nèi)容繼續(xù)判斷,比對完所有數(shù)據(jù)庫后將選中的記錄按設(shè)定的順序全部輸出,找不到時直接輸出空表。選擇子項名稱后運行界面及源代碼如下圖2;圖3。

      點擊“確定”源代碼如下

      PUBLIC GUJ1

      DO form GUJ1

      PUBLIC M

      M=GUJ1.TEXT1.TEXT

      M1=RTRIM(M)

      M2=LTRIM(M1)

      M3="%"+M2+"%"

      select 設(shè)計編號,子項號,工程名稱,子項名稱 FROM shuju WHERE 工程名稱 LIKE M3 ORDER BY 設(shè)計編號

      CLOSE ALL

      GUJ1.RELEASE

      點擊“退出”源代碼如下

      GUJ.RELEASE

      (上述程序在VFP6.0下運行通過)

      結(jié)語:用這兩種方法設(shè)計的檢索程序在投入實際工作后,在快速查找,數(shù)據(jù)匯總等方面大大提高了工作效率,使用至今,比較穩(wěn)定可靠,給檔案處日常工作帶來的便利是實實在在的,目前準備繼續(xù)擴展功能,發(fā)揮檔案處已保存有多年的電子文件的優(yōu)勢,將在查詢結(jié)果追加一個鏈接輸出,指向被查詢項目CAD文件在硬盤的存儲路徑,用戶只需選擇打開就能看到CAD文件。實現(xiàn)看到文字和數(shù)字結(jié)果的同時也能迅速找到圖形信息的目的。程序設(shè)計的目的是為了為現(xiàn)實工作服務(wù),因此,歡迎為以上程序設(shè)計的不足提供寶貴的修改意見,使其更好地在工作中發(fā)揮作用。

      猜你喜歡
      子項關(guān)鍵字命令
      履職盡責求實效 真抓實干勇作為——十個關(guān)鍵字,盤點江蘇統(tǒng)戰(zhàn)的2021
      華人時刊(2022年1期)2022-04-26 13:39:28
      只聽主人的命令
      成功避開“關(guān)鍵字”
      移防命令下達后
      右擊桌面就能控制系統(tǒng)
      這是人民的命令
      淺析劃分子項不得相容與詞語意義的模糊性
      戲劇之家(2015年16期)2015-02-28 01:57:50
      藍色命令
      基于用戶反饋的關(guān)系數(shù)據(jù)庫關(guān)鍵字查詢系統(tǒng)
      誘導(dǎo)性虛假下載鏈接不完全評測
      张家界市| 错那县| 麻栗坡县| 贵州省| 合水县| 饶河县| 景德镇市| 师宗县| 突泉县| 文化| 靖江市| 宜良县| 绩溪县| 吉木萨尔县| 高州市| 崇义县| 精河县| 宁化县| 洛南县| 石景山区| 新河县| 焉耆| 临桂县| 枞阳县| 徐水县| 衡山县| 芜湖市| 襄城县| 巴彦淖尔市| 浪卡子县| 连平县| 新蔡县| 偏关县| 嵩明县| 筠连县| 西充县| 武夷山市| 临泽县| 四会市| 佛学| 深州市|