易语言

1.2数据库应用手册

奶瓶 · 4月9日 · 2020年 · · 29次已读

易语言的数据库功能大部分基于 XBASE 方式,所以您如果曾经接触过 XBASE 数据库系统中的任何一款,如:DBASE、FOXBASE、FOXPRO 等等,就能够相当快地了解并应用易语言的数据库。

所有易语言数据库支持命令的具体解释请在数据库命令参考手册中查看,下面介绍一些概念和编程应用知识。

一、易语言数据库文件的组成:

.edb    数据库主文件
.edt    数据库辅助数据文件,仅在数据库中存在备注型或者字节集型字段时才存在,文件名称除了后缀外与数据库主文件相同,它必须与.edb文件放在同一目录中。
.enx    数据库索引文件。使用 B+ 树结构,由用户根据需要自行创建,用作加快记录的查找速度。

二、数据库的内部结构:

    易语言数据库由行和列组成,如下面的数据库内容:

    其中每一行被称为一条记录,每一列称为一个字段。如上面的数据库就有四条记录和四个字段。

    字段具有“名称”、“类型”、“最大文本长度”三个属性,有关介绍如下:

    <1>、名称: 字段名称文本的长度必须在 16 个字符以内;(一个英文字母为一个字符长度,一个中文为两个字符长度)
    <2>、类型: 可以为以下常量值之一: 1、#字节型; 2、#短整数型; 3、#整数型; 4、#长整数型; 5、#小数型; 6、#双精度小数型; 7、#逻辑型; 8、#日期时间型; 10、#文本型; 11、#字节集型; 12、#备注型;
    <3>、最大文本长度: 此属性仅当字段类型为“文本型”时才有效,用作指定文本的最大可能长度,其值范围必须在 1 到 512 之间。如果字段类型不为“文本型”,本属性无效。当写入数据到数据库中的文本型字段内时,多出的部分将被自动剪切。

三、系统中的“数据库”菜单功能:

    您可以使用“数据库”菜单下的“结构编辑器”来创建一个指定结构的数据库或者修改一个已存在数据库的现有结构。然后,使用“记录编辑器”可以加入或修改初始记录数据。

    值得告诉大家的是:这两个菜单功能皆通过调用 dbmanger.exe 文件(由 数据库管理器.e 易程序生成)来完成,数据库管理器.e 源程序已经随系统一起提供,用户可以对其进行修改或者扩充,使之更能满足您的需要。


    下面介绍一些数据库应用程序中常用的编程知识,首先请下载并查看一下示例工资数据库 工资.edb ,其结构如下:

其中的“实发”字段在本数据库中并没有被实际使用,仅用作方便对某些命令进行举例。

一、编程前的准备工作:

强烈推荐:在开始编写数据库应用程序之前,请将程序中所需使用数据库的名称及其内所有字段名设置为常量,因为常量可以使用系统内部的输入法来很快地输入。如:上面数据库内具有一个名称为“姓名”的字段,如果此字段名已经被设置为了常量,那么在程序中需要引用它时可以简单地输入 #xm , 而如果没有设置为常量,您就必须使用 Windows 系统的输入法来一个字一个字地输入 “姓名” ,这样岂非太麻烦了吗?为了让您能够快速地加入所有的相关数据库常量,在“数据库”菜单下有一个“加入数据库常量”功能,使用此功能可以一次性将指定数据库的名称及其所有字段名加入为常量。下面的讲述中假设您已经做了此准备工作。

二、数据库本身的常用操作:

1、创建数据库:

    欲在程序中创建数据库请使用“创建”命令,如欲创建上面的示例工资数据库 工资.edb ,可以使用类似以下代码:

2、打开数据库:

    欲打开指定数据库,请使用“打开”命令。可以同时打开多个数据库(其数目仅受 Windows 操作系统限制)。

    注意易语言的数据库抛弃了 XBASE 的工作区概念,以便可以同时打开更多的数据库。

3、置当前数据库:

    系统内部有一个“当前数据库”状态值,它被用来指向某一个已被打开的数据库。绝大部分数据库操作命令都针对当前数据库,譬如:记录指针的移动、字段的读写等等。用户可以使用“置当前库”命令来改变系统中“当前数据库”状态值的指向。如:

4、关闭数据库:

欲关闭当前数据库,请使用“关闭”命令。欲一次性关闭已打开的所有数据库,请使用“全部关闭”命令。(如图)

三、记录范围、字段范围、数据库表达式:

    易语言中很多数据库命令都支持定义记录范围和字段范围,如:“复制记录”命令能够将当前数据库的记录复制到另外一个数据库文件,其调用格式的后半部分如下:

    复制记录 (数据库文件名,记录条件字段范围,… )

    其中,“记录条件”参数即用作让用户定义记录范围,用户需要使用一个子语句来提供参数数据。如,将示例数据库中所有姓王的员工记录都拷贝到新数据库 工资表.edb 中:

   
    输入方法:fzjl("工资表",d(#xm)?="王")

    其中:读 (#姓名) ≈ “王” 即是用作定义记录范围的子语句,这与 XBASE 的格式基本一样,只不过在 XBASE 中可以直接使用字段名称,而易语言由于不是解释型语言,所以使用 读 (xxx) 替换(其中 xxx 为字段名)。

    假如您只想把示例数据库中的“姓名”和“工资”字段复制过去,就需要使用字段范围参数:

字段范围参数一般都为数据库命令的最后一个参数,以便让用户通过增加参数来同时提供多个字段,不过您也可以使用数组来做同样的工作:         

假如您想把数据库中所有员工的工资都加上 100 元,就需要使用数据库表达式。完成此工作的相关数据库命令“替换”的调用格式的后半部分如下:

    替换 (替换范围,字段名称或替换数据,… )

    其每一个“字段名称或替换数据”参数对应“字段名称”、“替换数据”参数各一个。

    语句如下:

其中,#工资 为字段名称,读 (#工资) + 100 即为数据库表达式,用作提供“工资”字段替换数据的获取方法。

可以同时替换多个字段,如:

语句可以同时将“扣除”字段清零。

数据库表达式中也可以同时使用多个字段,如:

语句可以计算出每一个员工的实发工资。

    还有很多数据库命令使用了数据库表达式,如:

计算最大的实发工资并跳到其员工记录:  

根据实发工资排序到 工资表.edb : 

四、当前记录指针:

    每一个被打开的数据库都有一个“当前记录指针”状态值,它指向数据库中的某一条记录,用作为一些记录读写命令提供位置指示。如:“读”、“写”、“删除”等等。它除了指向正常的记录外,还可能具有以下状态值之一:

    1、首记录前。表明当前记录指针已经移动到了数据库首记录的前面,此时如果执行读写当前记录的命令肯定会失败,因为无法找到对应的记录读写位置。使用“首记录前”命令可以测试到此状态值;

    2、尾记录后。表明当前记录指针已经移动到了数据库最后一条记录的后面,此时如果执行读写当前记录的命令也会失败。使用“尾记录后”命令可以测试到此状态值;

    使用“取记录号”命令可以取回当前记录指针所指向记录的编号(从 1 开始)。如果为 0 ,表示在首记录前,如果大于最大记录编号,表明在尾记录后。

    “到首记录”命令可以将当前记录指针移动到数据库的首记录上,“到尾记录”命令可以将当前记录指针移动到数据库的最后一条记录上。“跳过”命令可以相对移动当前记录指针值。

    通过移动当前记录指针,我们可以遍历数据库中的所有记录:

    反向遍历:

五、读写字段:

    记录字段的读写均在当前数据库的当前记录处进行,主要为以下命令:

1、“读”。如:    可以返回当前记录处员工的姓名;
    2、“写”。如:    可以将当前记录处员工的姓名改为“张三”;
    3、“读字段”和“写字段”可以读写非当前数据库内的记录字段;
    4、“修改”命令可以一次性修改当前记录的多个字段。如:  

  语句可以将当前记录的员工姓名改变为“王五”,工资改为 2000 ,扣除改为 100 。

六、添加记录:

    使用“加空记录”命令可以在当前数据库的尾部添加一条新的空记录。

使用“加记录”命令可以同时提供欲添加数据。如:  

  语句可以在当前数据库的尾部添加一条名为“王五”,工资为 2000 ,扣除为 0 的新员工记录。

    使用“添加”命令可以将其它数据库内的记录添加到本数据库,如:   添加 (“工资表”, , )  可以将 工资表edb 数据库中的所有记录添加到当前数据库的尾部;  语句可以仅添加前 10 条记录;   语句可以仅添加所有未被删除的记录。

七、删除记录:

    与 XBASE 数据库一样,记录使用“删除”命令删除,但删除后并不马上从数据库中清除,仅仅只被加上一个删除标记,依旧存在并可以正常访问。只有当执行“彻底删除”命令后,这些被加上删除标记的记录才会被从数据库中真正清除。

    使用“是否已删除”命令可以查看当前记录是否被加上了删除标记,被加上删除标记的记录可以使用“恢复删除”命令取消其删除标记。

    使用“清空”命令可以彻底删除当前数据库内的所有记录。

八、查找记录:

    查找记录有两种方法:不使用索引和使用索引。

1、不使用索引:

    查找在示例数据库中所有姓王的员工记录的方法类似如下:

    到首记录 ()    如果当前记录指针在首记录上,则不需要此语句。
    判断循环首 (查找 (读 (#姓名) ≈ “王”))
        进行所需操作。
        跳过 ()
    判断循环尾 ()

    注意与 XBASE 不同的是:易语言的查找从当前记录开始。

    与易语言中的拼音处理类命令结合可以解决在汉字中极常见的近音搜寻问题:

    语句中的“删全部空”命令用作预先去除字段数据中可能存在的全半角空格,如果确定所有记录的该字段数据中都不存在空格,可以去掉此命令。

    第一条语句可以查找出当前数据库中所有姓名发音为“王屋”的员工,如:“王五”、“王舞”等等; 第二条语句完成类似的工作,不过使用的是全拼拼音编码;第三条语句使用的是首拼拼音编码。

2、使用索引:

    可以使用结构管理器预先在 工资.edb 上建立索引文件,也可以在程序中创建:

    上面的语句建立了一个名为 工资.enx 的索引文件,它基于示例数据库的“姓名”字段,您也可以建立基于多个字段的索引文件。

索引只有被打开后才能被使用。使用“新建索引”命令新建的索引会被自动打开并设置为当前索引。对于已经存在的索引文件,您必须在打开数据库时同步打开:

    此语句同步打开了 工资.enx 数据库索引文件,并将其设置为当前索引。

    在数据库中搜寻所有姓名为“王五”的员工:

    为了解决近音汉字搜寻问题,易语言中可以建立发音索引文件:

这两条语句分别建立了一个基于标准读音和一个基于南方读音的索引文件。

    使用发音索引文件即可进行近音搜寻,如:  就可以找到“王五”。

    在打开数据库时应该使用其“索引文件表”参数同时打开所有的索引文件,以便索引文件能够得到及时的更新。您也可以使用“更新索引”命令来强制更新当前索引文件。

九、查看数据库命令是否执行成功:

    大多数的数据库命令执行完毕后都会返回一个逻辑值,表明是否执行成功。但是也有一部分命令无法做到这一点,如:“取最大值”等。

    您可以在任何数据库命令执行完毕后立即调用“取错误码”命令来查看其是否执行成功。如果成功,“取错误码”命令将返回 0 ,否则将返回一个非 0 的错误值。

    另外,如果发现命令执行失败,立即调用“取错误信息”命令可以取回对应的错误信息文本,当然是全中文的。

0 条回应