数据表和数据库的使用
数据表是为批量读取数据库而设计的特殊类型,可以自定义数据结构
然后直接把数据读取到相应结构内存中,无需使用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 | 日期 | DateTime | 64位整数 |
long | 大数 | BigInt | 64位整数 |
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 账号")
;注意使用的是读取,语句也不一样重置 账号表(长度)
;使用重置长度,或者在读取表时候指定长度都可以但是两者有很多区别,重置是新申请一个内存,原来申请过的话,就要使用销毁语句
而读取表时指定长度是会自动销毁原来的内存,重新申请指定长度的内存