吾爱分享资源网

 找回密码
 立即注册
吾爱分享资源网 易语言相关 查看内容

详细讲解易语言的各类基础知识

2017-9-21 20:32| 发布者: admin| 查看: 31| 评论: 0|原作者: admin

摘要: 易语言的基础知识 下面详细讲解各方面的一些基本知识 在易语言应用程序的编写过程中,用户涉及到定义各类名称,如:子程序名、变量名、数据类型名等等,这些名称的命名规则为:名称的首字母必须为全半角字母或汉字 ...
易语言的基础知识 下面详细讲解各方面的一些基本知识
在易语言应用程序的编写过程中,用户涉及到定义各类名称,如:子程序名、变量名、数据类型名等等,这些名称的命名规则为:名称的首字母必须为全半角字母或汉字,其它字符必须为全半角字母、全半角数字或者汉字。虽然名称中允许半角字符“_”存在,但它被保留为系统专用,因此不要使用。与其它的编程语言相比,易语言的命名规则有以下特点:

无长度限制,用户可以尽情地使用长名称来进行名称描述;

永远不会与易语言的关键字产生冲突。譬如:现已存在“如果”命令,但用户仍然可以定义一个名称为“如果”的变量,两者之间不会产生任何冲突。

程序的启动方式

  每个易语言应用程序都可以在两种启动方式中选择一种,即:

通过名称为“_启动窗口”的窗口启动;

通过名称为“_启动子程序”的子程序启动。

系统安装后默认为第一种启动方式,用户可以使用“程序” → “系统配置 - 通常夹 - 程序启动方式”菜单功能进行更改。

在第一种启动方式下,程序运行时系统将自动查找并载入名称为“_启动窗口”的窗口。在第二种启动方式下系统将自动执行名称为“_启动子程序”的子程序。

易语言的语言要素

  所有的易应用程序,都由下列语言要素或其中的一部分组成:

  一、 数据类型

  数据类型分为系统基本数据类型、库定义数据类型、用户自定义数据类型三类。

· 系统基本数据类型列表及其说明如下:

1. 字节型。可容纳 0 到 255 之间的数值。

2. 短整数型。可容纳 -32,768 到 32,767 之间的数值,尺寸为 2 个字节。

3. 整数型。可容纳 -2,147,483,648 到 2,147,483,647 之间的数值,尺寸为 4 个字节。

4. 长整数型。可容纳 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 之间的数值,尺寸为 8 个字节。

5. 小数型。可容纳 3.4E +/- 38 (7位小数) 之间的数值,尺寸为 4 个字节。

6. 双精度小数型。可容纳 1.7E +/- 308 (15位小数) 之间的数值,尺寸为 8 个字节。

7. 逻辑型。值只可能为“真”或“假”,尺寸为 2 个字节。“真”和“假”为系统预定义常量,其对应的英文常量名称为“true”和“false”。

8. 日期时间型。用作记录日期及时间,尺寸为 8 个字节。

9. 文本型。用作记录一段文本,文本由以字节 0 结束的一系列字符组成。

10. 字节集。用作记录一段字节型数据。字节集与字节数组之间可以互相转换,在程序中允许使用字节数组的地方
也可以使用字节集,或者相反。字节数组的使用方法,譬如用中括号对(“[]”)加索引数值引用字节成员,使用数组型数值数据进行赋值等等,都可以被字节集所使用。两者之间唯一的不同是字节集可以变长,因此可把字节集看作可变长的字节数组。

11. 子程序指针。用作指向一个子程序,尺寸为 4 个字节。

  在以上的基本数据类型中,字节型、短整数型、整数型、长整数型、小数型、双精度小数型被统称为“数值型”,它们之间可以任意转换。不过编程需要注意转换可能带来的精度丢失。譬如:将整数 257 转换为字节后的结果为 1 ,这是因为值 257 超出了字节型数据的最大上限 255 ,从而产生了溢出。

  另外,通用型数据类型仅在系统内部使用,它能够匹配所有的系统基本数据类型、库定义数据类型、自定义数据类型。

· 库定义数据类型:

  库定义数据类型由运行支持库提供,用户在程序中可以直接使用,就如同是系统基本数据类型一样。

· 自定义数据类型:

  用户可以随时在程序中自行定义新的数据类型。自定义数据类型时需要设置数据类型的名称及其成员。数据类型成员各属性的设置方法等同于变量设置设置方法。

· 引用库定义或自定义数据类型对象的成员:

  数据类型成员等同于对象的属性,必须通过具有该数据类型的对象来引用。引用方法参见编程基础知识中的《引用对象的属性及方法》节。

  二、命令及操作符

  命令由运行支持库提供给用户在程序中使用,它们被分为很多类。有些命令的最后一个参数可以被扩展,譬如“相加”,它的“加数”参数可以被无限制地扩展,用作支持连续相加。这些命令在录入到程序中后在编辑窗口内其首部会显示出一个右双箭头作为标志。命令中的某些参数也有可能可以被省略,即调用时可以不提供参数数据。具体情况请参阅《支持库手册》。

  下面列出所有具有操作符的命令及其操作符运算优先级,值越小运算优先级越高。优先级高的命令在计算表达式时将被先执行,同优先级的命令按顺序执行:

命令名称 优先级 中文操作符号 英文操作符号

负 1 - -

相乘 2 × *

相除 2 ÷ / 整除 3 \ \

求余数 4 % % 或 Mod

相加 5 + +

相减 5 - -
不等于 6 ≠ <> 或 !=

等于 6 = = 或 ==

小于 6 < <

大于 6 > >

小于等于 6 ≤ <=

大于等于 6 ≥ >=

近似等于 6 ≈ ?=

并且 7 且 And 或 &&

或者 8 或 Or 或 ||=

赋值 9 = =

三、子程序

将程序分割成较小的逻辑组件就可以简化程序设计任务,这些逻辑组件被称为子程序。 子程序可用于压缩重复任务或共享任务,例如,压缩频繁的计算处理等等。

用子程序编程有两大好处:

· 子程序可使程序划分成离散的逻辑组件,每个组件都比无子程序的整个程序容易调试及理解;

· 一个应用程序中的子程序,往往不必修改或只需稍作改动,便可以成为另一个程序的子程序。

  每次调用子程序时,子程序中的所有语句都将被从第一条开始顺序执行,当执行到子程序尾部或者遇到“返回”命令时即返回到调用此子程序语句的下一条语句处。

  子程序可以接收参数数据和返回值。参数数据由调用子程序的语句传递过来,子程序的返回值被返回到调用子程序的语句处。

  子程序如需要返回值,必须先在子程序定义表的“返回值类型”栏中定义欲返回值的数据类型,然后在子程序中使用“返回”命令返回相应格式的数据。

  子程序如需要接收参数数据,必须先在子程序定义表中参数表部分定义与欲接收数据数目相同的参数。调用子程序时所传递过来的数据将被顺序地填入对应的参数中。如果所传递过来的数据与对应位置处的参数数据类型不一致,在可以互相转换时,系统将自动进行转换,否则会产生运行时错误。参数仅能在子程序内部使用。

定义子程序参数时需要定义以下几项主要属性:

· 参数名。 定义该参数在子程序中的使用名称。参数可以如同变量一样使用;

· 类型。所定义的数据类型应该与欲接收数据的数据类型相同或者能够互相转换;

· 参考。设置系统为当前子程序参数传递数据时是否为传递指向数据的指针。如果所传递过来的参数数据为数组、用户定义数据类型、库定义数据类型、字节集型、文本型数据,则无论此属性是否为真,都将传递指针。如果所传递过来数据的类型与相应位置处参数的数据类型不一致但可以相互转换,譬如将“整数型”数据传递到“小数型”的参数中,则在数据被实际传递前,系统将首先自动将“整数型”数据转换为“小数型” 数据,然后再进行传递。因此在这种情况下,即使本属性为真,系统也无法传递指向原参数数据的指针,只能传递数据本身。如果系统将数据指针成功地传递过来,那么在子程序中对此参数的内容的更改将会相应地反映到调用子程序时所提供的参数数据上。

· 可空。如果本属性为真,那么在调用本子程序时,调用方可以不为此位置处的参数传递数据。主要用作支持具有默认值的参数,也可以在为子程序添加了新参数后又不想去更改以前调用此子程序的语句时使用。在子程序中可以使用“是否为空”命令来查询调用方是否提供了参数数据。

· 数组。设置当前子程序参数是否为接收数组数据。如果本属性为真,则调用方应该为本参数传递数组数据,否则只能传递非数组数据。

四、Dll 命令

  在易应用程序中可以直接调用系统外部动态连接库(即 Dll 库)中的命令。在调用前,必须首先进行定义,定义Dll 命令涉及到以下主要属性:

· Dll 命令名。定义该 Dll 命令在易程序中的使用名称;

· 返回值类型。定义 Dll 命令返回值的数据类型,只能为无、字节、短整数、整数、逻辑及文本型;

· Dll 库文件名。 定义当前 Dll 命令所在动态连接库的文件名。如果不指定库文件名,系统将默认在 Kernel32.dll、Gdi32.dll、User32.dll、Mpr.dll、Advapi32.dll 等 Windows 系统的基本应用程序界面函数(API)库中搜寻指定命令;

· Dll 命令在 Dll 库中的对应命令名。定义当前 Dll 命令在其所在动态连接库中的名称,如果不指定,系统将默认等同于 Dll 命令名;

· 定义 Dll 命令参数时的主要属性:

1. 类型。Dll 命令参数所定义的数据类型应该与实际的 Dll 库命令一致。可以使用除了文本数组及字节集数组外的任何数据类型,包括库自定义和用户自定义数据类型。

2. 传址。某些实际 Dll 库命令的参数需要接收数据地址,设置本属性为真可以确保将参数数据的地址传递过去。如果参数数据的类型为数组、文本、字节集、用户定义数据类型、库定义数据类型,则无论此属性是否为真,都将传递数据地址。如果本属性为真且调用 Dll 命令时所传递过来数据的类型与相应位置处所定义参数的数据类型不一致但可以相互转换,则系统先分配一块临时内存空间,然后进行转换并将转换后的数据存放到该空间,最后将此内存空间的地址传递到实际的 Dll 库命令。参见例程 sample.e 中的相应部分。

3. 数组。意义同上.
五、程序集

程序集顾名思义即子程序的集合,用作将应用程序中的子程序分组归类。在程序编辑过程中,每个程序集将在单独的编辑窗口内进行编辑。

六、变量

  在易语言应用程序执行期间,可以使用赋值语句在变量内临时存储数据。变量有名字(用来引用变量所包含内容的词)和数据类型(确定变量能够存储数据的种类)。

变量有使用范围,在全局变量表内定义的变量被称为“全局变量”(图1),整个应用程序中的所有子程序都可以使用;在程序集变量表内定义的变量被称为“程序集变量”(图2), 仅能够被此程序集中的所有子程序使用;在子程序变量表内定义的变量被称为“局部变量”(图3),仅能够被此子程序所使用。

· 变量的初始化

  所有全局变量、程序集变量、局部静态变量在程序被启动运行前、所有非静态局部变量在其所处子程序被开始执行前,都将被自动分配空间并初始化。其中,数值型变量被初始化为零,逻辑型变量被初始化为假,日期时间型变量被初始化为 1899 年 12 月 30 日 0 时 0 分 0 秒,文本型变量被初始化为空文本(“”),字节集型变量被初始化为空字节集,子程序指针型变量被初始化为空子程序指针。

  特例:系统在对库定义数据类型的对象变量进行初始化时,将首先查询该数据类型的各成员在库中是否指定了初始值。如果指定了初始值,则使用该值进行初始化。譬如:“字体”为系统核心支持库中所提供的库定义数据类型,其“字体大小”成员的初始值在库中被指定为 9 点(1 点等于 1 / 72 英寸),“字体名称”成员的初始值被指定为“宋体”。

· 变量的赋值

  非数组变量可以通过赋予一个常数、常量、资源、对象或者变量来赋值。所赋予过来数据的数据类型必须与被赋予变量的数据类型一致或者可以互相转换。可以将一个对象赋予给变量后再使用该变量间接引用此对象。譬如:假设存在一个数据类型为“标签”,名为“变量1”的变量,使用“变量1 = 窗口1.标签1”语句可以将“窗口1”上的“标签1”窗口组件对象参考到“变量1”上,以后在程序中就可以直接使用“变量1.标题”来引用“窗口1”上“标签1”组件的标题属性。

  数组变量可以通过赋予一个常数集或者另外一个数组变量来赋值。

· 定义变量时的主要属性

1. 变量名。 定义该变量在程序中的使用名称;

2. 类型。定义该变量所能储存数据的数据类型;

3. 静态。本属性仅在定义局部变量时需要被设置。如果局部变量在定义时此属性被设置为假,那么运行应用程序时,此变量在其所在子程序开始被执行前自动分配存储空间并初始化,在所在子程序执行完毕后自动释放所分配的存储空间。也就是说,变量的存储空间仅在其所在子程序执行过程中存在;如果此属性被设置为真,那么此变量与全局、程序集变量一样,被分配给在程序运行期间永久存在的存储空间并仅在应用程序启动运行前被初始化一次。

4. 数组。设置当前变量是否为数组变量及数组各维的上限值(即成员数目)。如为多维数组,定义时各上限值之间用逗号分隔。引用变量数组中某成员的方法为使用被中括号括住的从 1 开始的索引数值,如:“[1]”(单维数组),“[2][1]”(多维数组)。所有多维数组均可以使用单维数组格式引用其成员。譬如:数组定义为“2, 3”的多维数组,其成员“[2][2]”可以被单维数组格式“[5]”所引用。

七、常数

  常数为可以直接在程序中使用的数据,具有以下几种类型:

· 数值型常数。如: 1、100 ;

· 逻辑型常数。如: 真、假 ;

· 日期时间型常数。日期时间常数的内容必须用中括号括住,并且应按以下格式之一提供,年份后的时间部分可以被省略:

1、[1982年4月23日12时30分25秒]

2、[1982/4/23/12/30/25]

3、[1982/4/23/12:30:25]

4、[1982-4-23-12-30-25]

5、[1982-4-23-12:30:25]

6、[19820423123025]

· 文本常数。文本常数的内容为一段文本,必须使用全角或半角双引号括住。如:“文本”、“文本”等等;

· 子程序指针常数。子程序指针常数为指向程序中某一子程序代码地址的指针数值,表达方式为符号“&”再加上子程序名称。如:“&子程序1”、“&_启动子程序”等等;

· 常数集。常数集用作提供其它各类常数或常量的数组形式。表达方式为使用大花括号括住一系列相同类型且通过逗号分隔的各类常数或常量。如:“{ 1, 2, 3 }”、“{ “abc”, “bcd” }”、“{ [1982年4月23日], [2000年1月1日12时] }”、“{ &子程序1, &_启动子程序 }”、“{ #红色,#黑色 }”、“{ #图片1,#声音1 }”等等。常数集也可以为空,表达方式为“{ }”,此时它将被认为包含有 0 个数值型常数,可以用作重新初始化一个数值数组或者将某字节集清空,譬如:“数值数组1 = { }”、“字节集1 = { }”等等。

八、常量

  常量用作存储在整个应用程序执行过程中保持不变的数据,其类型可以为数值、文本、逻辑值和日期时间。易语言核心支持库中已经提供了许多常量,但用户也可以在程序中自行定义。常量的引用表达方式为符号“#”再加上常量名称。如:“#pi”常量等同于数值“3.1415926535”、“#换行符”常量等同于文本 <回车> + <换行> 等等。

九、资源

资源用作存储用户需要在程序中所使用的图片、声音等等字节数据,其数据类型为字节集型。引用表达方式等同于常量

十、窗口、窗口组件及窗口程序集

  窗口为应用程序的界面,窗口组件为窗口的组成成员。每个窗口拥有一个专用程序集,名为窗口程序集。此窗口上所有的事件处理子程序都必须放在此程序集中。窗口程序集中的子程序引用所属窗口上的窗口组件属性或方法时可以省略窗口对象。譬如:假设程序中存在名为“窗口1”的窗口,该窗口上绘制有一个名为“标签1”的标签窗口组件。在其它程序集中的子程序欲引用“窗口1”的“标题”属性需要使用“窗口1.标题”,引用“标签1” 的“标题”属性需要使用“窗口1.标签1.标题”。而在该窗口的窗口程序集中的子程序可以直接使用“标题”、“标签1.标题”来进行相同的引用。

  系统核心支持库中定义的“窗口”窗口组件数据类型的所有方法能够被其它所有非功能类窗口组件数据类型所共享,就好象这些方法是其本身所具有的一样。

  在一个程序集中可以就象引用窗口对象的属性或方法一样来引用另外一个窗口程序集中的程序集变量和子程序。譬如:假设存在名为“窗口1”的窗口,其窗口程序集中存在名为“变量1”的程序集变量,名为“子程序1”的子程序,在其它程序集中可以使用“窗口1.变量1”及“窗口1.子程序1”来引用此程序集变量和子程序。

  窗口组件的属性除了被标明为“只读”的外,其它属性在运行时皆既支持读也支持写。

窗口的载入

  程序内所设计的所有窗口,运行时在使用前都必须先载入。除开“_启动窗口”由系统在启动程序时自动载入外,其它窗口都必须使用“载入”命令载入。有关查阅“载入”命令详细信息的方法,请参见《支持库手册》。在窗口被载入后,所有对此窗口及其所有组件的对象属性的修改,在窗口被关闭后都将自动被复原到设计状态。但是如果在窗口被载入前修改了窗口或其组件的固定属性,则此属性值将永久存在而不会被复原,就好象是在设计窗口时所设置的一样。

窗口组件的固定事件

  所谓窗口组件固定事件,即由系统而非窗口组件本身提供支持的窗口组件事件。其列表如下:

1、鼠标左键被按下:当在窗口组件上按下鼠标左键时产生本事件。

2、鼠标左键被放开:当在窗口组件上放开被按下的鼠标左键时产生本事件。

3、被双击:当在窗口组件上双击鼠标左键时产生本事件。

4、鼠标右键被按下:当在窗口组件上按下鼠标右键时产生本事件。

5、鼠标右键被放开:当在窗口组件上放开被按下的鼠标右键时产生本事件

6、鼠标位置被移动:当在窗口组件上移动鼠标时产生本事件。

事件(1 - 6)的事件参数为:

1、横向位置: 指示鼠标在当前所处窗口组件中的横坐标;

2、纵向位置: 指示鼠标在当前所处窗口组件中的纵坐标;

3、功能键状态:用于查看各功能键是否被同时按下。可以为以下常量值或其和: 1、#Ctrl键状态; 2、#Shift键状态; 4、#Alt键状态。要判断是否同时按下了某个功能键,在此参数值与想要得知功能键的状态常量值之间使用“位与”命令进行比较。如果所得的结果不为零,表示同时按下了此功能键。

7、按下某键:当用户按下某键时产生本事件。被按下某键的组件必须拥有焦点。

8、放开某键:当用户放开所按下的键时产生本事件。被放开某键的组件必须拥有焦点。

事件(7 - 8)的事件参数为:

1、键代码: 为键常量值,如:“#F1键”、“#回车键” 等等。具体所有的键常量见系统核心支持库的库常量表;

2、功能键状态。其意义同上。

  对于事件(1 - 8),对应的事件处理子程序皆可以返回一个逻辑值。如果返回假,则取消本事件,不再将此事件传递到所属窗口组件上去;如果不返回值或返回真,则将此事件继续传递到所属窗口组件上去。

9、获得焦点:当窗口组件获得输入焦点时产生本事件。

所谓“输入焦点”,即当前用户按键操作所对应的目标对象。譬如:用户正在编辑框中输入文本,那么此编辑框就具有输入焦点,因为它将获得目前用户所进行的所有按键操作。所谓“获得”或者“失去”输入焦点,即当前用户按键操作所对应的目标对象发生转移。譬如:现在用户正在编辑框1中输入文本,突然使用鼠标或其它方法切换到了编辑框2上去继续输入。那么此时,编辑框1就“失去”了输入焦点,编辑框2就“得到”了输入焦点,因为在此以后用户所进行的所有按键操作都将被改为编辑框2所获得。

10、失去焦点:当窗口组件失去输入焦点时产生本事件。

11、字符输入:当用户按下和松开一个字符键时产生此事件。

  字符键包括任何可打印的键盘字符及回车(Enter)和退格(BackSpace)键。在对应的事件处理子程序中,将事件处理完毕后可返回一个字符代码,用于替换将继续传递到所属窗口组件上字符键事件中的字符代码;如果返回 0 ,则取消此事件,不再将此事件传递到所属窗口组件上去;如果事件处理完毕后没有返回值,则将本字符键事件继续原样传递到所属窗口组件上去。

本事件的事件参数为:

1. 字符代码: 表明所按下的字符键所对应的字符代码,可以使用“字符”命令取出所对应的具体字符。

窗口组件的固定属性

  所谓窗口组件固定属性,即由系统而非窗口组件本身提供支持的窗口组件属性。在窗口组件属性表中,被显示在以粗线条隔开的第二组属性中。固定属性与普通属性在程序中的使用区别为:固定属性在窗口组件被创建之前也能被程序所使用,而普通属性则不能。其列表如下:

1、 左边、顶边、宽度、高度:指定窗口组件的位置及尺寸。如果窗口组件为“窗口”,其位置值相对于屏幕的左上角,如果为窗口内组件,其位置值相对于其所在窗口或者父组件的左上角。

2、标记:指定跟随于窗口组件的一段文本,用于在程序中取得或设置与该窗口组件相关联的数据。

3、可视:指定窗口组件是否具有可视外形。

4、禁止:指定窗口组件是否可以被操作者操作。

5、鼠标指针:指定鼠标移动到窗口组件上时鼠标的外形。

6、可停留焦点:设置当用户使用 TAB 或光标键在窗口上各组件之间移动输入焦点时是否允许在本组件上停留。

7、停留顺序:本属性必须在上一属性被置为真时才有效。用作设置用户使用 TAB 或光标键在窗口上各组件之间移动焦点时的顺序。当窗口被载入后,输入焦点将被交给具有最小停留顺序值的组件.

易语言数据库应用手册 易语言的数据库功能大部分基于 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 到 1024 之间。如果字段类型不为“文本型”,本属性无效。当写入数据到数据库中的文本型字段内时,多出的部分将被自动剪切。

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

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

值得告诉大家的是:这两个菜单功能皆通过调用 dbmanger.exe 文件(由 dbmanger.e 易程序生成)来完成,dbmanger.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 的错误值。

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

易模块开发手册

一、何为易模块:易模块实际上是一个特殊的易程序,它与普通的易程序相比,有以下特点:

1、必须具有程序名称(通过“程序”→“程序配置”菜单设置),此名称代表模块名称;(如图)

2、必须具有“_启动子程序”,此子程序负责进行易模块的初始化;(如图)

3、必须具有公开此易模块的对外接口,对外接口可以通过以下2种方法生成:

A:新建一个子程序,然后把“公开”选中,在易模块中任何程序集中选中“公开”的子程序都作为对外接口(如图)

B:新建一个接口程序集,然后把程序集名称改为“_接口程序集”,这个程序集下的所有子程序都不需要选中“公开”,均可由外部程序直接调用。(如图)

二、如何开发易模块:

  任何具有第一条中所述三个特点的易程序均可以作为易模块编译。开发易模块时注意点如下:


鲜花

握手

雷人

路过

鸡蛋

相关分类

QQ|Archiver|手机版|小黑屋|吾爱分享资源网 ( 苏ICP备17042175号 | 苏公网安备 32108102010177号 )

GMT+8, 2018-11-22 01:49 , Processed in 0.131846 second(s), 29 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

返回顶部