[置顶] VB6基本数据库应用(三):连接数据库与SQL语句的Select语句初步
同系列的第三篇,上一篇在:http://blog.csdn.net/jiluoxingren/article/details/9455721
连接数据库与SQL语句的Select语句初步
”前文再续,书接上一回“我就不说了(额~不知不觉间说了,失误……)。数据库我们已经建好了,重提一下上一章的结果,我们最后建立了一张Student的表,其中有StudentID(数字的双精度类型)和StudentName(文本类型。补充一下,2013中有【长文本】和【短文本】,人名不会很长,根据上一章选择尽量小的数据类型的规则,这里就选【短文本】就可以了)。尽管我想让大家有更多想象的空间,不过为了好说明,还是统一一下数据库的记录内容吧,无论Access 2003还是2013,都是这些内容:
StudentID | StudentName |
---|---|
123456 | 林则徐 |
562893 | 叶剑英 |
662356 | 黄飞鸿 |
什么是CODE代码片?
添加好之后的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=;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.Connection
Dim rec As ADODB.Recordset
Private 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>
表是打开了,接着就是到真正把数据拿出来的时候了,卖个关子。在下一章,我将讲述数据的提取,新增和修改。本系列教程未完,待续。
[置顶] VB6基本数据库应用(三):连接数据库与SQL语句的Select语句初步的更多相关文章
- [置顶] 程序员必知(三):一分钟知道URI编码(encodeURI)
因为浏览器会用一些特殊的字符作为特定的意义,所以在要传输的内容上如果有这些特殊的字符的话,就需要对其进行转义才能正确传输,如以下字符为发送时候的关键字,即特殊字符 ;/?:@&=+$,# 所以 ...
- [置顶] 北漂的大三IT男(暂完)
今天是2013年8月9日,是我待在北京的最后一个晚上,今天我已经正式向公司提出辞职了,虽然公司已经答应从下个月起涨部分工资,但是我还是坚决的离开了,回想当时进公司的想法----------干了一个月后 ...
- [置顶]
【机器学习PAI实践三】雾霾成因分析
一.背景 如果要人们评选当今最受关注话题的top10榜单,雾霾一定能够入选.如今走在北京街头,随处可见带着厚厚口罩的人在埋头前行,雾霾天气不光影响了人们的出行和娱乐,对于人们的健康也有很大危害.本文通 ...
- [置顶] SNMP协议详解<三>
在上篇文章中,说到了SNMPv3主要在安全性方面进行了增强,采用USM(基于用户的安全模型)和VACM(基于视图的访问控制模型)技术.下面我们就主要讲解SNMPv3的报文格式以及基于USM的认证和加密 ...
- SQL Server 迁移数据库 (三)使用SQL脚本
1. 创建脚本 1.1 在需要迁移的数据库上右击>Tasks>Generate Scrips 1.2 前两步直接Next,第三步我这里选择Save to Clipboard,因为如果选Sa ...
- MySQL数据库学习02: SELECT语句
声明:本篇文章大多数内容出自<MySQL必知必会>,仅供学习参考,勿作他用! 第4章 检索数据 4.1 SELECT语句 SELECT子句用于检索数据库中的表数据.它几乎是MySQL中最常 ...
- SQL基础(三):SQL命令
下面2个表用于实例演示: 1.SQL UNION 操作符 UNION 操作符用于合并两个或多个 SELECT 语句的结果集. 请注意,UNION 内部的每个 SELECT 语句必须拥有相同数量的列.列 ...
- Creating Dialogbased Windows Application (3) / 创建基于对话框的Windows应用程序(三)Checkbox的应用、窗体置顶、设置图标 / VC++, Windows
创建基于对话框的Windows应用程序(三) —— Checkbox的应用.窗体置顶.设置图标 上一节创建的窗体应用程序中,我们用到了Button和StaticText这两个控件.这一节中我们将学习使 ...
- wordpress调用置顶文章sticky_posts的三种方法
有时我们在开发wordpress时需要调用置顶文章sticky_posts,怎么调用呢?几种写法,有用到query_post的,有用到WP_Query,也有用到is_sticky(),下面随ytkah ...
随机推荐
- Spring简单的小例子SpringDemo,用于初略理解什么是Spring以及JavaBean的一些概念
一.开发前的准备 两个开发包spring-framework-3.1.1.RELEASE-with-docs.zip和commons-logging-1.2-bin.zip,将它们解压,然后把Spri ...
- spring项目中监听器作用-ContextLoaderListener(项目启动时,加载一些东西到缓存中)
作用:在启动Web容器时,自动装配Spring applicationContext.xml的配置信息. 因为它实现了ServletContextListener这个接口,在web.xml配置这个监听 ...
- oracle数据库实验讲义-读书笔记(一)
1.激活锁定的用户alter user scott account unlock identified by tiger;2.使用内含脚本建立scott用户@%oracle_home%\rdbms\a ...
- JS 匿名函数
一.声明: 1. 正常函数声明: //正常函数声明 function foo(p1, p2){ return p1+p2; } 2. 匿名函数声明: //匿名函数声明 var foo= functio ...
- html的form元素
<input type="email"><br> <input type="date"><br> <inp ...
- Jquery 网站保存信息提示消息实现,提示后自动消失
现在的大多数网站都有校验,以及信息提示:为了给用户更好的体验可以不用alert提示消息,采用jQuery提示完消息,自动消失 css <style> #tip_message { z-in ...
- Factorial Solved Problem code: FCTRL
import sys #import psyco #很奇怪,这题用psyco就runtime error #psyco.full() def z(n): #这个应该是技巧的一种算法 r = 0 whi ...
- Python Udp Socket
socket(套接字),传输层通信的端点,由IP和端口号组成(IP,Port),可以通过socket精确地找到服务器上的进程并与之通信 python2.6实现,基于AF_INET(网络套接字) 类型S ...
- 通过内省机制设置JavaBean
一.步骤: 1)使用PropertyDescriptor类获取属性描述者对象 //pd引用Student的name属性 PropertyDescriptor pd = new PropertyDesc ...
- cf C. Sereja and Algorithm
http://codeforces.com/contest/368/problem/C 从左向右记录从1位置到每一个位置上x,y,z的个数.然后判断在l,r区间内的x,y,z的关系满不满足abs(x- ...