极语言官方网站

数据表和数据库的使用

数据表是为批量读取数据库而设计的特殊类型,可以自定义数据结构

然后直接把数据读取到相应结构内存中,无需使用ADO等对象

通常我们使用ADO对象来读写数据,由于记录集对象结构过于复杂

每行每列的类型、名称、序号、长度、缓冲区指针和长度,以及各种属性、方法等

可是实际应用中,往往需要把记录集中的数据,再次读取到自己定义的变量(结构内存)中

所以极语言增加了直接读取数据到指定结构的功能

只要需要的字段数据读取出来,还可以直接改变数据类型

例如数据库中字段类型为整数,程序需要把整数类型数据全部转换成小数类型

同样的数值15,整数和单精度小数都占四字节,但是它们的数据却大不相同

程序定义为小数,数据库里是整数,就可以全部提取为小数数据

读取后的数据表读写方法为:表名(行号).字段名

如:lv=玩家表(0).等级;玩家表(3).职业=5; 表名.rows为行数 表名.cols为列数

读取数据是按查询的sql语句里的表名和字段顺序,并不是按照程序里的表名和字段名

所以程序代码里的表名和字段名是完全自定义的

数据表结构类型,跟自定义类型(type)的性质类似,类型是不支持数组的

所以可以用数据表代替类型,当自定义数组类型使用

长(表名)获取的是类型结构或者说每一行的数据长度

表名.len是申请的数组长度,使用前需要 重置 表名(数量)

申请的长度数量要大于或等于查询表的记录数,读取完数据之后,得到 表名.rows 数据表的实际读取记录数。

数据表的序号是从0开始的,100行记录就是按序号0-99获取

读取的数据存放是一段连续的内存,行列是连续整齐排列的。

数据表结构的名称定义和数据库(对象)的字段定义对比:

英文语法中文语法字段类型数值范围
char字符TinyInt-128~127
byte字节TinyInt数据同上,转为正数
short整形SmallInt-32768到32767
int整数Int-2147483648到2147483647
single小数Real参见数据类型
double浮点Float参见数据类型
string 文本VarChar[16]需指定长度
date日期DateTime64位整数
long大数BigInt64位整数
binary二进制Binary[1640]需指定长度

由于数据库中没有字节类型,把TinyInt读入字节类型时,负数会变成加256的正数

中文名英文名功能作用
.指针.Ptr数据缓冲区的指针
.长度.len初始化可存储行数
.行数.rows已读取数据的行数
.列数.cols每行数据的列数
读取表query读取数据到数组缓冲区
加数组addin把某列数据加到一维数组

数组,数据表和结构体都属于全局变量,数组可以是静态和动态两种

静态数组例如: 整数 一(10);字节 二(5);动态数组括号内为空,例如 整形()

结构体类型只支持是静态数组,静态数组不支持重置,保留和销毁

数据表只支持动态数组,申请的数据是清零的,支持重置,保留和销毁

使用示例:

1.先在全局段定义一个数据表

数据表 账号表{文本 密码[16],密保[16],邮箱[16];整数 性别}

2.像数组一样重置数据表的长度,数据表可以作为动态二维数组用

重置 账号表(5000);

此时账号表长度为5000,可以存入五千行数据

如果不用数据库的话,现在就可以直接使用账号表了,比如:
账号表(0).密码="ASDFGHretuivhJhj";
密码保护验证=账号表(105).密保;
邮箱地址=账号表(8868).邮箱;

3.多数情况下使用数据表,也是为了操作数据库,可以在模块列表里选中"数据库"

数据.连接(连接语句);首先要跟数据库建立连接

连接语句对于不同的数据库类型,使用不同的驱动连接字符串:

ACCACE数据库: "Driver={Microsoft Access Driver (*.mdb)};DBQ=game.mdb"
SQLite数据库: "Driver={SQLite3 ODBC Driver};Database=d:\game.db"
mssql远程连接: "Driver={SQL Server};Server=127.0.0.1;Database=game;Uid=sa;Pwd=admin;"
mssql本机连接: "Driver={SQL Server};SERVER=(local);Trusted_Connection=yes;DATABASE=game"

4.跟数据库建立连接之后,执行SQL语句,查询或更新

数据.执行("update 表名 set 字段名=数值")

数据库语句除了表名和字段可以用中文,其它都是英文,具体上网查

5.快速读取整个表

根据第一步定义的数据表结构,写好查询语句,读取到指定的数据表中

数据库模块提供有读取数据库里整个表字段的方法: 数据.读表

长度=数据.读表("账号");通过表名"账号"读取整个表,得到记录数:长度

读取表(库表,账号表,长度);这里有三个参数要重要说明一下

第一个参数库表是模块固定的一个变量,刚才读表就是把表对象地址指向库表这个变量

读取表是极语言封装的一个专用库,把整个表对象内数据读取到账号表这个定义的数据表中

第三个参数是可选参数,第二步如果没有重置表的长度,这里加上它就会自动重置长度

好处就是数据库里有多少行,就申请多少内存去存放数据,一点内存也不会浪费

还有第二种情况:如果账号表里很多字段,义的数据表只是用到的几个,就读取指定字段

数据.执行("select 密码,密保,邮箱,性别 from 账号");指定读取这四个字段

读取表(库表,账号表);读取表的时候不用指定长度

第二步已经重置了数据表的长度,就无需指定,如果想根据数据库里实际行数去重置数据表行数

长度=数据.读取("select count(*) from 账号");注意使用的是读取,语句也不一样

重置 账号表(长度);使用重置长度,或者在读取表时候指定长度都可以

但是两者有很多区别,重置是新申请一个内存,原来申请过的话,就要使用销毁语句

而读取表时指定长度是会自动销毁原来的内存,重新申请指定长度的内存