孟彬
(西安翻译学院,西安 710105)
微软公司旗下有两款使用桌面数据库开发工具,一个是源自兼并的FOX Software公司的FoxPro,其更高版本为VFP(全称Visual FoxPro),另一个是微软Microsoft Office中的成员ACCESS[1]。VFP作为微软公司的一款基于Windows操作平台的关系数据库管理软件,具备了简单易学、操作简便、开发成本低、可视化强等优点,但在数据安全问题上存在一些缺陷[2]。而ACCESS具有较高的安全性。本文从使用者的角度将ACCESS与VFP两款数据库管理系统进行对比分析,比较两者之间的差异,阐述ACCESS数据库中的对象及编程方法,引导VFP用户过渡到ACCESS的使用中来。
VFP提供了面向对象的程序设计工具,使用向导、设计器和生成器使得设计数据库应用程序更为简单、快速、灵活,充分发挥了其可视化强、编程技术面向对象和事件驱动方式的优势。但是在数据安全上,由于DBF文件只是具有一定格式的文本文件,数据库本身无法保证数据的安全。随着Office系列软件使用的普及,ACCESS数据库管理系统也被越来越多的用户接受并使用。ACCESS是微软把数据库引擎的图形用户界面和软件开发工具结合在一起的一个关系数据库管理系统,具有功能强大、易学易用、界面友好等优点,ACCESS共有表、查询、窗体、报表、宏、模块6类数据库对象,提供了多种向导、生成器和模板,规范了数据存储、数据查询、界面设计等操作,并通过众多的内建向导、友好的用户界面以及微软办公软件的的高度整合能力,使得普通用户不须编写程序,也使得ACCESS成为越来越多非专业人士的最佳选择[3];另外相比VFP而言,ACCESS文件单一,具有较高的安全性,并与Office中的VBA、网站脚本编程语言VBScript有着直接联系,应用较为广泛。
尽管ACCESS的使用及编程方法同VFP有很多相似之处,但是由于两种软件在文件组织、数据类型、编程语言等方面与VFP有很大的差异,使得很多的VFP用户在学习ACCESS时感到困惑,甚至放弃对ACCESS的学习。本文通过对VFP和ACCESS从以下几方面进行比较分析,帮助传统VFP用户利用已知的VFP知识更方便地学习ACCESS。
2.1 数据库内容
1)两种软件的文件组织方式不同。VFP创建的数据库中包含表、程序、查询、索引、报表、菜单等各种类型的文件,这些文件通过项目统一进行管理,并存储于磁盘中; 相对ACCESS的数据库由表(Table)、查询(Query)、窗体(Form)、报表(Report)、宏(Macro)以及模块(Module)6种数据库对象组成,并将所有对象保存在一个数据库文件中,扩展名是“.Mdb”[4]。
2)在VFP中表可以设置字段的名称、值域、默认值、输入掩码等属性,但是索引的建立、维护和使用必须通过Index on,set index to等命令操作完成。在ACCESS中字段属性的设置更加方便和灵活,例如要为表中某字段建立索引,只需在表的设计视图中通过选择该字段的索引属性即可,包括索引的建立、维护和使用都可以通过ACCESS中表的设计视图完成。
3)在VFP中如果要创建表间关系,多对一和一对多的关系的创建需要通过set relation、set skip命令来完成,而ACCESS中的表间关系创建在图形界面中就可操作,如果需要保证相关表中记录之间关系的有效性,杜绝意外操作更改或删除相关数据,可以在图形界面中建立数据参照完整性,同时选中级联更新与级联删除即可。另外需要注意VFP中的记录删除分为两种,可恢复的逻辑删除和不可恢复的物理删除,而ACCESS中的记录删除无法恢复。
4)在VFP中的查询是只读的,且选择查询的功能有限。相比较ACCESS中查询使用灵活,功能强大。ACCESS中的查询实质就是SQL的数据操纵语言,利用查询可以查看、更改和分析数据;通过查询可以完成对表、记录、字段的多数操作;在进行选择查询时,还可以在表与查询间建立关系,查询结果也可以作为窗体和报表的记录来源。
2.2 数据类型
1)在VFP中,如果定义数值型的字段,要求给出字段类型、字段宽度和小数位数3个属性,当在该字段内存放数据时,VFP会自动将数据后面的小数部分进行四舍五入,只保留设定位数的小数部分。在ACCESS数据库中数值类型的字段种类较多,包括短整型、长整型、单精度、双精度和货币型,用户定义时首先选择其中一种类型,在此基础上设置字段属性,但和VFP不同,设置ACCESS小数位数和格式的主要功能是用于确定数据的显示方式,如果存储数据时需要用户直接将数据按照要求处理后再进行输入[5]。除此之外,VFP和ACCESS数据库中的数据类型还有一些区别,在下面表1中显示了两种数据库管理系统的数据类型的不同之处。
2)在VFP中,如果存储记录时没有在字段中输入具体内容,则文本型字段的内容自动保存为空字符串、数值型字段的内容自动保存为零值。而在ACCESS中如果存储记录时没有在字段中输入具体内容,字段中值自动保存为空值NULL,NULL在ACCESS中不能赋予非Variant变量。
2.3 表中记录序号
在VFP中查看表,默认表浏览窗口中每条记录前面都会显示记录号。在ACCESS中通过数据表视图方式显示的数据没有记录号,但可以通过将表中第一个字段定义为“自动编号”类型来显示记录号。
2.4 编程语言
在程序语言方面,VFP除了同Xbase语言的相容能力外,同时引入了部分的SQL语言与全新的控件向导语言[6]。ACCESS则是以Basic语言为基础,并加入了部分SQL语言,如果比较简单的程序设计可以使用宏[7]。
表1 VFP数据类型和ACCESS数据类型比较
2.5 应用领域及规模
在数据处理量方面,VFP比ACCESS宽松许多,因此VFP更适合开发文件服务器的数据库应用系统。在报表设计能方面,ACCESS显得更加出色。在规模方面,VFP属于中型数据库开发软件,ACCESS严格来说很少用于商业用途的开发,并且只能在Office环境下运行,受Office本身的限制,规模属于小型的数据库应用软件。
前面已经讨论了VFP和ACCESS两个数据库管理系统之间的主要差异,其实两者之间也有很多相通的地方,甚至可以相互转化[8]。
3.1 VFP向ACCESS转化
ActiveX Data Objects(ADO)是Microsoft提出的应用程序接口,用以实现访问关系或非关系数据库中的数据。Microsoft ActiveX Data Objects Extensions for Data Definition Language and Security (ADOX) 是对 ADO 对象和编程模型的扩展,可以使用Create,Append和Delete对数据库进行创建、修改和删除。现假设在VFP环境下,创建ACCESS数据库于F:,命名为“db1. Mdb”,密码“1234”,可以通过以下代码实现ACCESS数据库的建立和对象的释放关闭。
V catalog=CREATEOBJECT(‘ADOX. Catalog')
V catalog CREATE(‘Provider=Microsoft Jet OLEDB.4.0;Data Source=F:db1.mdb;Jet OLEDB:Database Password=1234')
V catalog=null
连接好ACCESS数据库后,就可以用SQL语言来实现ACCESS数据表的创建。
3.2 ACCESS向VFP转化
首先存储表名,使用SQLTABLES函数将ACCESS的表名存储到VFP中的临时表,然后再将表中的记录进行转存,在转存记录是需要注意这两种数据库的表的数据类型要匹配。ACCESS数据库连接成功后,列出MDB表信息到ResTable表中,创建一个DBC文件,选择ResTable并遍历游标,生成SQL SELECT的语句字符串,其中包含了ACCESS数据表中的内容,再通过SQLEXEC将表内容发送至临时表中,最后将临时表保存到VFP数据库中。
众所周知,了解和掌握一个新的软件需要投入很多的时间和精力,也会遇到很多的困难。本文通过分析比较VFP和ACCESS两款数据库管理系统的主要功能上的差异,以及两者之间相互转换的方法,旨在帮助VFP用户向ACCESS过渡学习时能根据自身原本VFP知识的掌握情况,可以更轻松的投入到ACCESS的学习中去,尽快的理解和使用一款新的开发数据库管理系统软件。
[1] 刘慧.从VF到ACCESS的过渡学习[J].硅谷,2009(21):96.
[2] 傅荣会. 三种关系型数据库管理系统的比较研究[J]. 重庆三峡学院学报,2011,27(132):58-59.
[3] 刘慧. 对VF用户如何学好ACCESS的探讨[J].硅谷,2009(20):24-26.
[4] 崔再惠. Access数据库与SQL Server数据库主要功能的比较[J]. 鞍山师范学院学报,2009,11(6):51-52.
[5] 李会琼. 基于Visual FoxPro环境下Access数据库的操作应用分析[J]. 电脑编程技巧与维护,2013(2):25-26.
[6] 黎升洪.Access数据库应用与VBA编程[M].北京:中国铁道出版社,2011.
[7] 张小莉. Visual FoxPro程序设计教程[M].北京:科学出版社,2016.
[8] 王永国,张士江,谢倩.基于Visual FoxPro环境ACCESS数据库操作的实现[J]. 计算机技术与发展,2012,21(1):95-99.