一种采用VBA编程简化数据库建表过程的方法

2022-06-12 00:53
现代工业经济和信息化 2022年4期
关键词:中文名脚本首字母

董 威

(国家税务总局苏州市税务局,江苏 苏州 215004)

引言

数据库应用已深入各个领域,数据的存储、分析都离不开数据库的支撑。将数据需求转化为数据库表,是每一个数据库系统初期建设阶段的必要工作。如果把建表所需要素按设定格式存放在表格中,那么可以用VBA实现一键生成建表语句。以下说明具体实现方法。

1 整理建表必要信息[1]

以ORACLE数据库为例,将待建数据表要素按如表1的格式填写。

表1 建表基本信息

2 编写VBA脚本

2.1 目标任务[2]

按表1的信息,需要生成的建表语句如下:

1 create tablet_spkcb(

2 sp_id cha(r6) not nul,

3 spmc varchar2(200) not null,

4 spsl number,

5 lrsj date,

6 lrr cha(r6)

7 );

8 comment on table is'商品库存表';

9 comment on column spkcb.sp_id is'商品_id';

10 comment on column spkcb.spmc is'商品名称';

11 comment on column spkcb.spsl is'商品数量';

12 comment on column spkcb.lrsj is'录入时间';

13 comment on column spkcb.lrr is'录入人';

14 alter table t_spkcb add constraint sp_id primary key(sp_id);

其中1~7行为基本建表语句,第8行增加表名备注,第9~13行增加字段备注,第14行为生成主键的语句。

2.2 脚本编写[3]

1)首先判断表1使用的行数,据此确定字段总数;

2)根据表1中的表名,拼接建表语句第1行;

3)根据表1中的表名及备注拼接第8行增加备注;

4)循环提取表1中4~8行信息:拼接9~13行字段备注语句;拼接2~7行建表基本语句,如果是末行加“);”

5)根据表1中E列的星号*位置,拼接第14行生成主键

按照以上思路,VBA脚本如下,其中vbCrLf为换行符,单引号后的楷体字为注释。

在建表界面插入表单控件按钮,修改名称为“Create SQL”,指定宏为CreateTable()。这样,在建表信息准备好之后,点击按钮,即可生成建表语句。

3 扩展功能[4]

实际应用中,数据库字段常采用中文拼音首字母的缩写表达。为实现这一功能,首先编写提取单个汉字拼音首字母的函数。在GB2312标准字符集中,一级汉字按拼音字母顺序排列的,因此可以分段来确定首字母。该字符集的区位码经过加20H和80H转为内码[3],和VBA中ASC()函数值相匹配。内码与VBA的ASC()函数[5]值均以首个一级汉字的对应值归零为基准进行分段,结果一致。相关的转换过程及公式示意如图1所示。

图1 汉字编码转换过程示意图

提取拼音首字母的函数脚本如下:

这段代码以GB2312字符集[2]为依据,可以识别3 755个一级汉字的拼音首字母。如果遇到数字、字母和下划线“_”则保持不变,二级汉字及其他字符均不输出。在此基础上,如果是多个汉字,则循环拼接,即可完成多个汉字的首字母拼音转换。脚本如下:

需要说明的是,EXCEL单元格中不显示的特殊字符有可能影响转换结果。所以这段代码进行了去空格和去换行符的处理,如遇到其他字符也需要类似操作。

这种方式下,表1的信息中不再需要填写a列的字段名,只需要将字段中文名填入c列,a列通过函数py()自c列获取,即在CreateTable()脚本里for循环体中,将第2句:

修改为两句:

表名也类似,不过增加“t_”以符合表名命名规则。在CreateTable()脚本中,将第3句:tab_name=Range("a2")

修改为两句:

这样,表1只需填写表中文名、字段中文名、字段数据类型、是否为空、主键标识等信息,然后点击“Create SQL”,即可快速生成相应的SQL语句,同时在a列生成表名和字段名,供进一步确认。

在实际应用中,还可能需要的有:不同字段的中文名有可能对应相同的字母组合,而数据库不允许重名字段,因此脚本还需要增加检测和处理功能;为使生成建表语句本格式更加规范,还可以采用space(n)函数在适当的位置添加空格;语句的最后一行,还可以加一段拼接select或desc语句的脚本,确认新表创建成功;语句第一行增加drop table语句,以适应重复建表。这些都属于应用中的细节,此处不再赘述。

以上,是利用VBA快速生成建表语句的方法。与此类似,如果需要将数据批量插入数据表,或者补充大量表及字段备注等语句,也可参照以上思路实现。

猜你喜欢
中文名脚本首字母
加媒点评政客中文名
自动推送与网站匹配的脚本
新目标英语八年级(上)Unit5 STEP BY STEP随堂通
新目标英语八年级(上)Unit4 STEP BY STEP随堂通
Unit 12 STEP BY STEP 随堂通
Unit 7 STEP BY STEP 随堂通Section A
友谊的小船说翻就翻
举一反三新编
愚公移山