同系列的第三篇,上一篇在:
连接数据库与SQL语句的Select语句初步
”前文再续,书接上一回“我就不说了(额~不知不觉间说了,失误……)。数据库我们已经建好了,重提一下上一章的结果,我们最后建立了一张Student的表,其中有StudentID(数字的双精度类型)和StudentName(文本类型。补充一下,2013中有【长文本】和【短文本】,人名不会很长,根据上一章选择尽量小的数据类型的规则,这里就选【短文本】就可以了)。尽管我想让大家有更多想象的空间,不过为了好说明,还是统一一下数据库的记录内容吧,无论Access 2003还是2013,都是这些内容:
StudentID | StudentName |
---|---|
123456 | 林则徐 |
562893 | 叶剑英 |
662356 | 黄飞鸿 |
添加好之后的Access界面如下:
(2003版)
(2013版)
其实数据库里面什么数据都无所谓,不过我把我当前的数据库内容告诉大家,待会代码写出来,运行之后的效果就显而易见了。
那么真正的代码编写就开始了。跟随我的步伐吧。启动VB6,新建【标准EXE】工程,这个不详细截图了。然后选择【工程】菜单的【引用】菜单项,打开引用对话框,选中【Microsoft ActiveX Data Object 6.0 Library】(不是6.0也可以),如图:
OK,要引用的只有这个,按确定吧。看吧,并不麻烦。首先,我们来认识几个对象,按下F2(或者选择【视图】菜单的【对象浏览器】菜单项,将【<所有库>】改成【ADODB】,这样我们就能查看刚才我们引用的那个库(那个库就名为ADODB,完整的名称是ActiveX Data Object DataBase,简称ADO。以后我将使用ADO这个简称)对象浏览器如图:
可以看到左变有一列,许多黄色的图标那一列就是对象的名称(具体的对象浏览器的用法参见这篇文章:)。选择了ADODB这个库之后,我们来看一下其中的Connection这个类,如下图:
Connection,意为“连接”,所以它的作用就是连接数据库,他最常用的方法就是Open(当然最后要搭配Close方法了)。通过上图,我们就可以查看到Open方法有4个参数。每个参数都带有[],[]表示的是可选参数,不过真正的可选是后面三个,第一个的可选是有条件的,天底下哪有那么方便的事啊~。既然后面三个参数是可选的,那请无视他好了。我们来讨论第一个参数,第一个参数是ConnectionString,字符串(String)类型。这里我们要传入的数据有一定的格式,举例如下:
有密码形式: Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\Sample.mdb;Jet OLEDB:Database Password=123456;Persist Security Info=False
没有密码形式:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\Sample.mdb;Persist Security Info=False
这个对于Access的数据库都是差不多这样用的,要改的就是红色字的部分。前面那个是数据库的路径,后面那个是密码。虽然大多这样用,不过还是要告诉大家这句话到底是什么意思,不然大家学的不明不白。“Provider=”是开头,Provider意为“提供者”,这里指的是数据库引擎,后面接着的“Microsoft.Jet.OLEDB.4.0”就是数据库引擎的名称。“Data Source=”表示的是数据源,那当然后面毫无疑问接的是数据库的目录了。然后的“Jet OLEDB:Database Password=”是向数据库引擎指明数据库的密码是这个。最后的“Persist Security Info=False”是关于数据库安全性的说明,说明数据库引擎是否在打开数据库之后保存安全性信息,实际上简单来说就是是不是把密码保存下来,不解释了,设置为False就是了。
如果要看看其他的数据库引擎,可以选择【工程】菜单的【部件】菜单项,选择其中的【Microsoft ADO Data Control 6.0 (SP6)】,然后按照里的介绍去操作。不过这里我要说的是,我所说的数据库操作是全代码控制的,不要看着到控件就想去转成用控件,有不少找到我希望我帮忙的人,都反映这个控件有这样那样的问题,所以我不建议使用它。
好,解释了这些之后,我们来写代码,连接数据库的代码很简单,如下:
Dim Cnn As ADODB.ConnectionDim rec As ADODB.RecordsetPrivate Sub Form_Load()'创建新的Connection对象Set Cnn = New ADODB.Connection'注意要记住该数据库目录为你数据库文件当前的位置Cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\Sample.mdb;Persist Security Info=False"End Sub
一般数据库在整个程序的运行中连接一次就够了,所以写在Load事件里,或者写在Main函数里(如果是设置了从Main函数启动的话)。就当前的代码而言,如果连接上了,窗口就显示出来,因为Load里面的代码成功执行完了嘛,只不过显示出来之后就没有别的变化了,不着急,慢慢来。如果没有找到数据库的话,就会发生错误号为-2147467259的错误。如下图:
留意上图的盘符,我将数据库文件放在E盘根目录下,而故意将盘符改成C盘,这样大家就能够看到如果找不到数据库文件会怎么样。大家知道就行,这个就别试了。
SQL语句之Select语句初步
连接好之后我们就要尝试读取数据库的内容了。看到这个子标题,大家可能一头雾水,不知道来龙去脉,虽然我说过我要使用SQL语句来操作数据库,可是这明明是在VB的环境里,怎么用SQL呢?甚至有人会害怕,我并不会SQL啊,怎么办,我要去先把SQL学了再来看吗??
回来吧你~跑那么远干嘛?放心,在VB里一样可以用SQL,说他行他就行,不行也得行。不会SQL?其实在VB里操作数据库集会几个简单的SQL语句就是了,我这里会详细解释我用到的SQL语句。下面开始吧。这一节要讲述的是SQL:Select语句(以后我要表述SQL的语句的时候,我都会在前面加上“SQL:”以示和VB的语句进行区分),不是VB里的Select Case多重选择语句。SQL:Select语句是一个非常强大的语句,它包含有复杂的语法,可以实现许多的功能,包括最基本的,也是这个语句的目的,就是提取数据,还有条件筛选,排序等等。这个语句的使用,在我的SQL书立刻使用了整整一章去说啊,所以放心,我不会在这一章教程里将他的功能说完;也请定下心来,复杂的语句也有简单的用法。先来点简单的开开胃。SQL:Select语句的最最基本的语法如下:
SELECT fieldnamelist FROM tablename
我习惯了SQL语句的关键字全部大写,其实SQL对大小写不敏感,你大写也可以,小写也可以。这不是SQL:Select语句的完整语法,少了很多东西的,不过这是SQL:Select语句能够起作用的最简短的语法。来解释一下参数,fieldnamelist 是字段名列表。有些时候我们提取数据并不需要一个记录的全部字段,虽然我说过Access中一行,也就是一个就是一个整体,但是就像一个班集体不需要全部人在一起做值日(别跟我抬杠说大扫除,我晕……)一样,确实我们用的时候不一定每一次都要一个记录的全部字段。这个列表就是提供字段选择的功能。就之前建立的数据库为例(其实在做这个教程里,如无特殊的说明都是这样),Student表有StudentID和StudentName两个字段,我只要StudentName字段就够了,那我可以在fieldnamelist 的位置填写StudentName。如果我两个都要就两个都写,之间用逗号隔开。我怎么一说可能马上有人来气,如果我有100个字段,我全要,那我真的把100个字段名抄上去啊??怎么可能怎么笨,对于全部字段都要这个情况,SQL提供了一个很简单的办法,就是在fieldnamelist 的位置输入一个*,就是这样代替了所有的字段名。
然后再来说一下tablename,这是表的名称。不解释了,当前的当然是Student了。其实这个语句这样看起来很简单,按照英文直接翻译就是“从tablename表选择fidenamelist里的这些字段”。提醒一下英语不好的童鞋,这里是FROM(从……),不是FORM(表单),别打VB的Form(VB里译作窗体)打顺手了(好吧,我承认我经常打错)。SQL:Select语句最简单的用法解释完了,可是在VB的环境里这个语句要写在哪呢?有没有留意刚才数据库连接时候给出的源代码,上面还有一个声明:
Dim rec As ADODB.Recordset
这个声明在连接数据库的时候没用上。先别急着往下看,认真看这个声明,有个单词很熟悉的,忘了?看看第一篇数据库基础那里,那里我说到了一个叫做“记录集”的名词,还记得他的英文吗?没错,就是Recordset。在这VB里,Recordset是ADO的一个对象,他就是负责启动记录集功能,打开表的。我们要用到的也是 Recordset的Open方法,请自行打开对象浏览器查看它的声明,这里我直接解释参数的含义了。
同样Recordset的Open方法的所有参数都带有[],都是可选的,不过都说了天下没那么方便的事,只有后三个是真正可以省略的,前面两个还是要填的。
第一个参数是Source,没指明类型。他可以接受很多的东西,例如……一个SQL语句文本。哈哈,SQL语句者在这里用的,以后我所说到的SQL语句绝大多数是以文本的形式传入这里。第二个参数是ActiveConnection,意为“活动的连接”,那我们之前不是创建了一个名为Cnn的Connection对象吗,就是他了,直接把Cnn传进去就是了。后面的三个参数虽然现在忽略,后面还是会说的。那么好作为演示,我就在Load事件里,刚才连接数据库的代码后面加入打开数据集的代码,如下:
'创建新的Recordset对象Set rec = New ADODB.Recordset'打开student表的全部字段rec.Open "SELECT * FROM Stuednt", Cnn
/span>
表是打开了,接着就是到真正把数据拿出来的时候了,卖个关子。在下一章,我将讲述数据的提取,新增和修改。本系列教程未完,待续。