易語(yǔ)言的數(shù)據(jù)庫(kù)功能大部分基于
XBASE 方式,所以您如果曾經(jīng)接觸過 XBASE 數(shù)據(jù)庫(kù)系統(tǒng)中的任何一款,
如:DBASE、FOXBASE、FOXPRO
等等,就能夠相當(dāng)快地了解并應(yīng)用易語(yǔ)言的數(shù)據(jù)庫(kù)。 所有易語(yǔ)言數(shù)據(jù)庫(kù)支持命令的具體解釋請(qǐng)?jiān)?span lang="EN-US">數(shù)據(jù)庫(kù)命令參考手冊(cè)中
查看,下面介紹一些概念和編程應(yīng)用知識(shí)。 一、易語(yǔ)言數(shù)據(jù)庫(kù)文件的組成:
二、數(shù)據(jù)庫(kù)的內(nèi)部結(jié)構(gòu): 易語(yǔ)言數(shù)據(jù)庫(kù)由行和列組成,如下面的數(shù)據(jù)庫(kù)內(nèi)容: 其中每一行被稱為一條記錄,每一列稱為一個(gè)字
段。如上面的數(shù)據(jù)庫(kù)就有四條記錄和四個(gè)字段。 字段具有“名稱”、“類型”、“最大文本長(zhǎng)度”三個(gè)屬性,有關(guān)介
紹如下: <1>、名稱: 字段名稱文本的長(zhǎng)度必須在 16 個(gè)字符以內(nèi);(一個(gè)英文字母為一個(gè)字符長(zhǎng)度,一
個(gè)中文為兩個(gè)字符長(zhǎng)度) 三、系統(tǒng)中的“數(shù)據(jù)庫(kù)”菜單功能: 您可以使用“數(shù)據(jù)庫(kù)”菜單下的“結(jié)構(gòu)編輯器”來創(chuàng)建一個(gè)指定結(jié)構(gòu)
的數(shù)據(jù)庫(kù)或者修改一個(gè)已存在數(shù)據(jù)庫(kù)的現(xiàn)有結(jié)構(gòu)。然后,使用“記錄編輯器”可以加入或修改初始記錄數(shù)據(jù)。 值得告訴大家的是:這兩個(gè)菜單功能皆通過調(diào)用 dbmanger.exe 文件(由 dbmanger.e 易
程序生成)來完成,dbmanger.e 源程序已經(jīng)隨系統(tǒng)一起提供,用戶可以對(duì)其進(jìn)行修改或者擴(kuò)
充,使之更能滿足您的需要。 下面介紹一些數(shù)據(jù)庫(kù)應(yīng)用程序中常用的編程知識(shí),首先請(qǐng)下載并
查看一下示例工資數(shù)據(jù)庫(kù) 工資.edb ,其結(jié)構(gòu)如下: 其中的“實(shí)發(fā)”字段在本數(shù)據(jù)庫(kù)中并沒有被實(shí)際使用,僅用作方便對(duì)
某些命令進(jìn)行舉例。 一、編
程前的準(zhǔn)備工作: 強(qiáng)
烈推薦:在開始編寫數(shù)據(jù)庫(kù)應(yīng)用程序之
前,請(qǐng)將程序中所需使用數(shù)據(jù)庫(kù)的名稱及其內(nèi)所有字段名設(shè)置為常量,因?yàn)槌A靠梢允褂孟到y(tǒng)內(nèi)部的輸入法來很快地輸入。如:上面數(shù)據(jù)庫(kù)內(nèi)具有一
個(gè)名稱為“姓名”的字段,如果此字段名已經(jīng)被設(shè)置為了常量,那么在程序中需要引用它時(shí)可以簡(jiǎn)單地輸入 #xm , 而如果沒有設(shè)置為常量,您就必須使用
Windows 系統(tǒng)的輸入法來一個(gè)字一個(gè)字地輸入 “姓名” ,這樣豈非太麻煩了嗎?為了讓您能夠快速地加入所有的相關(guān)數(shù)據(jù)庫(kù)常量,在“數(shù)據(jù)庫(kù)”菜單下有一個(gè)“加
入數(shù)據(jù)庫(kù)常量”功能,使用此功能可以一次性將指定數(shù)據(jù)庫(kù)的名稱及其所有字段名加入為常量。下面的講述中假設(shè)您已經(jīng)做了此準(zhǔn)備工作。 二、數(shù)據(jù)庫(kù)本身的常用操作: 1、創(chuàng)建數(shù)據(jù)庫(kù): 欲在程序中創(chuàng)建數(shù)據(jù)庫(kù)請(qǐng)使用“創(chuàng)建”命令,如欲創(chuàng)建上面的示例工
資數(shù)據(jù)庫(kù)
工資.edb ,可以使用類似以下代碼: 2、打開數(shù)據(jù)庫(kù): 欲打開指定數(shù)據(jù)庫(kù),請(qǐng)使用“打開”命令??梢酝瑫r(shí)打開多個(gè)數(shù)據(jù)庫(kù)
(其數(shù)目?jī)H受 Windows 操作系統(tǒng)限制)。 注意易語(yǔ)言的數(shù)據(jù)庫(kù)拋棄了
XBASE 的工作區(qū)概念,以便可以同時(shí)打開更多的數(shù)據(jù)庫(kù)。 3、置當(dāng)前數(shù)據(jù)庫(kù): 系統(tǒng)內(nèi)部有一個(gè)“當(dāng)前數(shù)據(jù)庫(kù)”狀態(tài)值,它被用來指向某一個(gè)已被打
開的數(shù)據(jù)庫(kù)。絕大部分?jǐn)?shù)據(jù)庫(kù)操作命令都針對(duì)當(dāng)前數(shù)據(jù)庫(kù),譬如:記錄指針的移動(dòng)、字段的讀寫等等。用戶可以使用“置當(dāng)前庫(kù)”命令來改變系統(tǒng)中“當(dāng)前數(shù)據(jù)庫(kù)”
狀態(tài)值的指向。如: 4、關(guān)閉數(shù)據(jù)庫(kù): 欲關(guān)閉當(dāng)前數(shù)據(jù)庫(kù),請(qǐng)使
用“關(guān)閉”命令。欲一次性關(guān)閉已打開的所有數(shù)據(jù)庫(kù),請(qǐng)使用“全部關(guān)閉”命令。(如圖) 三、記錄范圍、字段范圍、數(shù)據(jù)庫(kù)表達(dá)式: 易語(yǔ)言中很多數(shù)據(jù)庫(kù)命令都支持定義記錄范圍和字段范圍,如:“復(fù)
制記錄”命令能夠?qū)?dāng)前數(shù)據(jù)庫(kù)的記錄復(fù)制到另外一個(gè)數(shù)據(jù)庫(kù)文件,其調(diào)用格式的后半部分如下: 復(fù)制記錄 (數(shù)據(jù)庫(kù)文件名,記錄條件,字段
范圍,…
) 其中,“記錄條件”參數(shù)即用作讓用戶定義記錄范圍,用戶需要使用
一個(gè)子語(yǔ)句來提供參數(shù)數(shù)據(jù)。如,將示例數(shù)據(jù)庫(kù)中所有姓王的員工記錄都拷貝到新數(shù)據(jù)庫(kù)
工資表.edb 中: 其中:讀 (#姓
名) ≈ “王” 即是用作定義記錄范圍的子語(yǔ)句,這與
XBASE 的格式基本一樣,只不過在 XBASE 中可以直接使用字段名稱,而易
語(yǔ)言由于不是解釋型語(yǔ)言,所以使用
讀 (xxx) 替換(其中 xxx 為
字段名)。 假如您只想把示例數(shù)據(jù)庫(kù)中的“姓名”和“工資”字段復(fù)制過去,就
需要使用字段范圍參數(shù): 字段范圍參數(shù)一般都為數(shù)
據(jù)庫(kù)命令的最后一個(gè)參數(shù),以便讓用戶通過增加參數(shù)來同時(shí)提供多個(gè)字段,不過您也可以使用數(shù)組來做同樣的工作: 假如您想把數(shù)據(jù)庫(kù)中所有
員工的工資都加上 100 元,就需要使用數(shù)據(jù)庫(kù)表達(dá)式。完成此工作的相關(guān)數(shù)據(jù)庫(kù)命
令“替換”的調(diào)用格式的后半部分如下: 替換 (替換范圍,字段名稱或替換數(shù)據(jù),… ) 其每一個(gè)“字段名稱或替換數(shù)據(jù)”參數(shù)對(duì)應(yīng)“字段名稱”、“替換數(shù)
據(jù)”參數(shù)各一個(gè)。 語(yǔ)句如下: 其中,#工
資
為字段名稱,讀 (#工資)
+ 100
即為數(shù)據(jù)庫(kù)表達(dá)式,用作提供“工資”字段替換數(shù)據(jù)的獲取方法。 可以同時(shí)替換多個(gè)字段,
如: 語(yǔ)句可以同時(shí)將“扣除”字段清零。 數(shù)據(jù)庫(kù)表達(dá)式中也可以同
時(shí)使用多個(gè)字段,如: 語(yǔ)句可以計(jì)算出每一個(gè)員工的實(shí)發(fā)工資。 還有很多數(shù)據(jù)庫(kù)命令使用了數(shù)據(jù)庫(kù)表達(dá)式,如: 計(jì)算最大的實(shí)發(fā)工資并跳到其員工記錄: 根據(jù)實(shí)發(fā)工資排序到
工資表.edb : 四、當(dāng)前記錄指針: 每一個(gè)被打開的數(shù)據(jù)庫(kù)都有一個(gè)“當(dāng)前記錄指針”狀態(tài)值,它指向數(shù)
據(jù)庫(kù)中的某一條記錄,用作為一些記錄讀寫命令提供位置指示。如:“讀”、“寫”、“刪除”等等。它除了指向正常的記錄外,還可能具有以下狀態(tài)值之一: 1、首記錄前。表明當(dāng)前記錄指針已經(jīng)移動(dòng)到了數(shù)據(jù)
庫(kù)首記錄的前面,此時(shí)如果執(zhí)行讀寫當(dāng)前記錄的命令肯定會(huì)失敗,因?yàn)闊o法找到對(duì)應(yīng)的記錄讀寫位置。使用“首記錄前”命令可以測(cè)試到此狀態(tài)值; 2、尾記錄后。表明當(dāng)前記錄指針已經(jīng)移動(dòng)到了數(shù)據(jù)
庫(kù)最后一條記錄的后面,此時(shí)如果執(zhí)行讀寫當(dāng)前記錄的命令也會(huì)失敗。使用“尾記錄后”命令可以測(cè)試到此狀態(tài)值; 使用“取記錄號(hào)”命令可以取回當(dāng)前記錄指針?biāo)赶蛴涗浀木幪?hào)(從 1 開始)。如果為 0 ,表示在首記錄前,如果大
于最大記錄編號(hào),表明在尾記錄后。 “到首記錄”命令可以將當(dāng)前記錄指針移動(dòng)到數(shù)據(jù)庫(kù)的首記錄上,
“到尾記錄”命令可以將當(dāng)前記錄指針移動(dòng)到數(shù)據(jù)庫(kù)的最后一條記錄上?!疤^”命令可以相對(duì)移動(dòng)當(dāng)前記錄指針值。 通過移動(dòng)當(dāng)前記錄指針,我們可以遍歷數(shù)據(jù)庫(kù)中的所有記錄: 反向遍歷: 五、讀寫字段: 記錄字段的讀寫均在當(dāng)前數(shù)據(jù)庫(kù)的當(dāng)前記錄處進(jìn)行,主要為以下命
令: 1、
“讀”。如: 可以返回當(dāng)前記錄處員工的姓名; 語(yǔ)句可以將當(dāng)前記錄的員工姓名改變?yōu)椤巴跷濉?,工資改為 2000 ,扣除改為 100 。 六、添加記錄: 使用“加空記錄”命令可以在當(dāng)前數(shù)據(jù)庫(kù)的尾部添加一條新的空記
錄。 使用“加記錄”命令可以
同時(shí)提供欲添加數(shù)據(jù)。如:
語(yǔ)句可以在當(dāng)前數(shù)據(jù)庫(kù)的尾部添加一
條名為“王五”,工資為 2000 ,扣除為 0 的
新員工記錄。 使用“添加”命令可以將其它數(shù)據(jù)庫(kù)內(nèi)的記錄添加到本數(shù)據(jù)庫(kù),如: 添加 (“工資表”, ,
) 可以將 工資表edb 數(shù)據(jù)庫(kù)中的所有記錄添加到當(dāng)前數(shù)據(jù)庫(kù)的尾部;
語(yǔ)句可以僅添加前 10 條記錄;
語(yǔ)句可以僅添加所有未被刪除的記錄。 七、刪除記錄: 與 XBASE 數(shù)
據(jù)庫(kù)一樣,記錄使用“刪除”命令刪除,但刪除后并不馬上從數(shù)據(jù)庫(kù)中清除,僅僅只被加上一個(gè)刪除標(biāo)記,依舊存在并可以正常訪問。只有當(dāng)執(zhí)行“徹底刪除”命令
后,這些被加上刪除標(biāo)記的記錄才會(huì)被從數(shù)據(jù)庫(kù)中真正清除。 使用“是否已刪除”命令可以查看當(dāng)前記錄是否被加上了刪除標(biāo)記,
被加上刪除標(biāo)記的記錄可以使用“恢復(fù)刪除”命令取消其刪除標(biāo)記。 使用“清空”命令可以徹底刪除當(dāng)前數(shù)據(jù)庫(kù)內(nèi)的所有記錄。 八、查找記錄: 查找記錄有兩種方法:不使用索引和使用索引。 1、不使用索引: 查找在示例數(shù)據(jù)庫(kù)中所有姓王的員工記錄的方法類似如下: 到首記錄
() 如果當(dāng)前記錄指針在首記錄上,則不需要此語(yǔ)句。 注意與 XBASE 不
同的是:易語(yǔ)言的查找從當(dāng)前記錄開始。 與易語(yǔ)言中的拼音處理類命令結(jié)合可以解決在漢字中極常見的近音搜
尋問題: 語(yǔ)句中的“刪全部空”命令用作預(yù)先去除字段數(shù)據(jù)中可能存在的全半
角空格,如果確定所有記錄的該字段數(shù)據(jù)中都不存在空格,可以去掉此命令。 第一條語(yǔ)句可以查找出當(dāng)前數(shù)據(jù)庫(kù)中所有姓名發(fā)音為“王屋”的員
工,如:“王五”、“王舞”等等;
第二條語(yǔ)句完成類似的工作,不過使用的是全拼拼音編碼;第三條語(yǔ)句使用的是首拼拼音編碼。 2、使用索引: 可以使用結(jié)構(gòu)管理器預(yù)先在 工資.edb
上建立索引文件,也可以在程序中創(chuàng)建: 上面的語(yǔ)句建立了一個(gè)名為 工資.enx
的索引文件,它基于示例數(shù)據(jù)庫(kù)的“姓名”字段,您也可以建立基于多個(gè)字段的索引文件。 索引只有被打開后才能被
使用。使用“新建索引”命令新建的索引會(huì)被自動(dòng)打開并設(shè)置為當(dāng)前索引。對(duì)于已經(jīng)存在的索引文件,您必須在打開數(shù)據(jù)庫(kù)時(shí)同步打開:
此語(yǔ)句同步打開了 工資.enx 數(shù)據(jù)庫(kù)索引文件,并將其設(shè)置為當(dāng)前索引。 在數(shù)據(jù)庫(kù)中搜尋所有姓名為“王五”的員工: 為了解決近音漢字搜尋問題,易語(yǔ)言中可以建立發(fā)音索引文件: 這兩條語(yǔ)句分別建立了一個(gè)基于標(biāo)準(zhǔn)讀音和一個(gè)基于南方讀音的索
引文件。 使用發(fā)音索引文件即可進(jìn)行近音搜尋,如:
就可以找到“王五”。 在打開數(shù)據(jù)庫(kù)時(shí)應(yīng)該使用其“索引文件表”參數(shù)同時(shí)打開所有的索引
文件,以便索引文件能夠得到及時(shí)的更新。您也可以使用“更新索引”命令來強(qiáng)制更新當(dāng)前索引文件。 九、查看數(shù)據(jù)庫(kù)命令是否執(zhí)行成功: 大多數(shù)的數(shù)據(jù)庫(kù)命令執(zhí)行完畢后都會(huì)返回一個(gè)邏輯值,表明是否執(zhí)行
成功。但是也有一部分命令無法做到這一點(diǎn),如:“取最大值”等。 您可以在任何數(shù)據(jù)庫(kù)命令執(zhí)行完畢后立即調(diào)用“取錯(cuò)誤碼”命令來查
看其是否執(zhí)行成功。如果成功,“取錯(cuò)誤碼”命令將返回 0 ,否則將返回一個(gè)非 0 的錯(cuò)誤值。 另外,如果發(fā)現(xiàn)命令執(zhí)行失敗,立即調(diào)用“取錯(cuò)誤信息”命令可以取
回對(duì)應(yīng)的錯(cuò)誤信息文本,當(dāng)然是全中文的。 |
|