首先介绍几个常用的VB数据库概念:
表(Table):即关系数据库中物理存在的二维表。VB的一个数据库文件可以包含相关的多个二维表。在成功打开一个数据库之后,必须打开一个表才能对其中的数据进行 *** 作。
记录集(RecordSet):来自表中的记录或者执行一个查询而产生的记录,这些记录就组成了一个记录的集合。在VB中数据库表中的数据不允许直接访问,而只能通过创建于内存中的这些记录集进行记录的浏览与 *** 作。
SQL语言:一种数据库管理中的通用结构化查询语言。
现在介绍一下VB中的“可视化数据管理器(Visual
Data
Manager)”。可视化数据管理器具有进行数据库的创建、查看、修改库结构以及输入记录等功能。下面介绍如何利用它建立一个完整的数据库文件。
一、创建表
1.
从“外接程序”选单中,选择“可视化数据管理器”,这时出现VisData可视化数据管理器窗口。分别移动鼠标指针到工具栏上的前三个按钮,系统会提示要以何种记录集类型来访问VB数据库:一是“表类型记录集”,二是“动态集类型记录集”,三是“快照类型记录集”。我们先选择“动态集类型记录集”。
2.
从“可视化数据管理器”的“文件”选单中选择“新建”,选择“MicroSoft
Access”类型,再选择“版本7.0MDB”。
3.
选择保存库文件的目录(设把文件保存在C盘的根目录中,文件名为Myfile)。
4.
这时出现“数据库”窗口,此时数据库已存在,但还不包含任何的表名以及字段定义等表结构。点击右键,选择“新表”,添加一个新表,出现“表结构”对话框,在“表名”框中输入表名(本例表名为Phone)。
5.
单击“添加字段”按钮,显示“添加字段”对话框。按要求分别定义“字段名”、“类型”及“大小”。先输入第一个字段,然后按“确定”,反复这一过程,直到输入全部的字段(本例字段分别为“序号”,“Long”,“4”;“姓名”,“text”,“8”;“电话”,“text”,“15”;“地址”,“text”,“30”)。
6.
单击“关闭”,从“添加字段”对话框退回到“表结构”窗。点击“生成新表”,保存表结构。
图1
VB访问数据库的两种方法
7.
在“数据库”窗双击新建的表名,按“添加”开始向表中添加记录,完毕后按“更新”。反复这一过程,向表中多增添几个记录。
8.在数据库中再建一个表,表名为Article。表包含字段为“序号”,“Long”,“4”;“作品”,“text”,“15”(为了简单起见表中只有两个字段)。向表中增加几条记录,比如序号1对应有多个作品,序号2也有多个作品。
二、增加索引
右键单击Phone表名,选择“设计”,在表设计窗口的底部,单击“添加索引”按钮,可打开“添加索引到……”对话框。
从“可用字段”列表中选择要进行索引的字段名放到“索引字段”列表中,根据需要选中“主要的”、“惟一的”、“忽略空值”复选框中的一个或多个的组合,在“名称”中加入索引名,保存该索引。
三、SQL查询
在“可视化数据管理器”中打开一个库文件,在d出“数据库”窗口的同时,在其后面会d出一个“SQL语句”对话框。把其变为当前窗口,可在其中输入SQL语句,比如:select
phone.姓名,article.作品
from
phone,article
where
phone.序号=article.序号。
然后点击“执行”按钮,d出对话框提问“这是SQL传递查询吗?”直接回车,选择默认选项“否”,确认查询,即可从两个表中提取满足条件的记录信息。还可以点击“清除”按扭清除框中的查询语句或按“保存”在数据库中保存此查询。值得注意的是,查询中保存的只是查询定义语句,而并未物理保存这些被查询的记录数据。
但即便如此,数据库应用程序的开发仍然算得上是VB编程中的难点,这是因为你不仅要熟悉VB中关于数据库编程方面的知识(当然这是十分简单的)还要了解数据库的知识。所以我们先介绍一下数据库的基本知识,算是学习数据库编程前的热身运动吧! 一、热身运动 首先需要声明是,我们这里介绍的数据库知识都是指的关系数据库。所谓关系数据库就是将数据表示为表的集合,通过建立简单表之间的关系来定义结构的一种数据库。 不管表在数据库文件中的物理存储方式如何,它都可以看作一组行和列,与电子表格的行和列类似。在关系数据库中,行被称为记录,而列则被称为字段。下面是一个客户表的例子。 表1 客户表 客户号 姓名 地址 城市 街道 邮编 1723 Doe John 1234 Ffth Avenue New York NY 1004 3391 Smith Mary 9876 Myrtle Lavee Bosten MA 6078 3765 Blasel Mortimer 2296j River Road peoria IL 7011 此表中每一行是一个记录,它包含了特定客户的所有信息,而每个记录则包含了相同类型和数量的字段:客户号、姓名等等。 表 是一种按行与列排列的相关信息的逻辑组,类似于工作单表。 字段 数据库表中的每一列称作一个字段。表是由其包含的各种字段定义的,每个字段描述了它所含有的数据。创建一个数据库时,须为每个字段分配一个数据类型、最大长度和其它属性。字段可包含各种字符、数字甚至图形。 记录 各个客户有关的信息存放在表的行,被称为记录。一般来说,数据库表创建时任意两个记录都不能相同。 键 键就是表中的某个字段(或多个字段),它(们)为快速检索而被索引。键可以是唯一的,也可以是非唯一的,取决于它(们)是否允许重复。唯一键可以指定为主键,用来唯一标识表的每行。例如,在前面的例子中,客户标识号 (客户号) 是表的主键,因为客户号唯一地标识了一个客户。 关系 数据库可以由多个表组成,表与表之间可以以不同的方式相互关联。例如,客户数据库还可以有一个包含某个客户的所有定单的表。它只用“客户号”字段来引用该定单的客户,而不在定单表中的每项重复所有客户信息,如下表所示: 表2 定货表 定货 客户号 日期 内容 数量 14764 3391 2/23/94 27 $22.95 14932 3391 3/17/94 46 $9.57 15108 8765 2/15/96 27 $22.95 在这个表中,客户号字段引用了客户表中的 客户号字段,从而把定单和客户联系起来了。可以看到,客户 3391 (Mary Smith) 在 94 年 2 月 23 日订购了 27 项,在 94 年 3 月 17 日订购了 46 项。用来建立关系的键叫做外部键,因为它与“外部”表(客户表)的主键关联。 一对多和多对多关系 上表中的关系类型叫做一对多关系,因为一个客户可以发出多个定单,而某个特定的定单只能是一个客户所发。也可以建立多对多的关系。例如,列出所有可以销售的项(存货)的盘存表: 表3 盘存表 内容 描述 供应商 费用 盘存 27 Straw Hat Garden Supply Co. $14.00 50 46 Garden gloves Garden Supply Co. $4.50 75 102 hanging floral industries $6.00 137 从盘存表中,可以看到在客户和存货项之间存在多对多的关系。也就是说,一个客户可以订购多个存货项,而一个存货项又能够被多个客户订购。多对多关系是通过两个独立的一对多关系来定义的,公共的“多”表包含了两个其它表的外部键。在该例中,定货s 表与 盘存 表(通过 “内容”)与 Customer 表(通过 客户号)都相关联。大致有以下几步:读取文件 -- 格式化数据 -- 关闭文件 -- 使用数据如果数据量较大,需要进行筛选,且存放数据的源文件可能不定时变更,那么我们可以用一个临时文件来存放有用的数据,这样可大大提高程序的效率.要 [格式化数据]时,我们首先要进行筛选,然后还得进行分类,这样文件中的字符串才能被转换成有用的信息来供程序使用.这样一来,不用说,处理速度将大大减慢,而且就算你设计的数据格式比较科学,当数据量非常大时,文件的容量也会变的让普通计算机无法承受. 相对文本文件来说数据库的使用也大致分为以下几步:打开数据库 -- 查找数据 -- 使用数据 -- 关闭数据库从中可以看出,里面少了一步格式化数据,因为数据库本身在存储数据时,它就是按照一定的格式来进行存储的. 其次是,数据库与文本文件返回数据的方法不同.如果把文本文件比作一个Textbox 的话,那么数据库更像是一个ListBox.使用文本文件时我们需要从整个Textbox中取出有用的信息,并进行处理,而Listbox则可以根据需要返回特定的某一项.由于VB本身并不带有可以访问数据库的类,所以我们需要引用一个包含能访问数据库的类来使用数据库.这里我们采用ADODB,相比DAO和能访问数据库的API来说,它比DAO更灵活,更强大而比起API,它更简单易用,更适合初学者.而Access数据库比起SQL,也相对简单了很多,且能够满足中小型应用程序的需要,所以我们在使用数据库时,选择了Access.就像使用文本文件来存储数据一样,我们需要先设计好数据结构,只不过在设计Access数据库的结构时,我们需要用到其它的程序来进行详细的规划.建议采用的程序是office中的Access或VB自带的VISDATA.当数据库设计好了以后,我们可以开始"数据库编程"了.首先,我们需要引用ADO.具体的方法是,在"工程" -- "引用" 中,找到"Microsoft ActiveX Data Object *.* Library",这里的"*.*"是指的时ADO的版本号,一般来说,应用程序或ActiveX控件都具有向下兼容性,所以我们尽可能选择比较新的版本.以确保程序在能识别旧版本Access的同时,也能识别较新版本的Access.然后我们需要在程序中创建一个对象.就好比我们在窗体上添加一个FileBox才能看到文件名一样,只有创建了ADO对象,我们才能够访问数据库.常用的对象有两个,Connection和Recordset.创建这两个对象的具体方法是:1.在引用后,使用New关键字,如 Private Conn As New ADODB.Connection Private Reco As New ADODB.Recordset2.在没引用时,用CreateObject创建对象: Dim Conn,Reco Set Conn = CreateObject("ADODB.Connection") Set Reco = CreateObject("ADODB.Recordset")创建了对象之后,下一步我们要做的就是打开数据库了.先看下面的代码,可以成功的打开数据库. Conn.open "Provider=Microsoft.Jet.OLEDB.4.0Data Source=D:\Main.mdb" 这句代码打开了D盘中的Main.mdb这个数据库. Connection.Open方法的第一个参数是连接代码,它将传递给系统的数据库引擎.前半部分"Provider= Microsoft.Jet.OLEDB.4.0",它表示了数据库的类型.不同的数据库可能会不同.后半句"Source=d:\main.mdb"它表示了数据库所在的绝对路径.打开数据库之后,还要打开表.假如数据库中有一个表,表名为"Users",字段有两个,一个为用户名,一个为密码.那么看以下代码.1.想返回"Users"中,[用户名]为"去年烟花"的[密码] Recordset.open "Select 密码 From Users Where 用户名='去年烟花'",Connection,1,1 之后我们就可以把用户输入的密码进行比较,看是否允许登录. If Recordset.eof and Recordset.bof then Msgbox "用户不存在!",16 Else If PassWord =Recordset("密码").value then msgbox "登录成功!",64 Else msgbox "密码错误!",32 End If End If Recordset.Close2.假设Admin已经成功登录系统,我们想把所有的用户名和密码都显示出来 Recordset.open "Select * From Users",Connection,1,1 这时,表已经被打开,我们就用以下代码把它显示出来. Do whlie Not Recordset.eof Print "用户名: " &Recordset("用户名").value &"密码: " &Recordset("密码").value Recordset.MoveNext Loop Recordset.Close由以上代码示例可以看出,打开表时,可以只打开其中的一个字段,也可以打开所有.第一个参数是SQL语句.Select [字段名] From 表名 [Where 条件]这里的条件可以省略.且字段名也可以用"*"来代替所有字段.需要注意的是,如果你用(1)中的方法打开,那么(2)后面显示的代码就不能再用在(1)中.因为(1)里并没有打开[用户名]字段,所以这一句Recordset("密码")就没有值存在,还有可能出错.后面的条件,可以用"="、">"、"<"等运算符.比如 "Where ID >32".(这里假设[ID]为数字型.) 这是打开的部分.第二个很重要的部分就是查询记录.数据库它并不是把所有记录全部放到一个变量中备用的.而是以"当前记录"的形式来返回一个值.所以我们想从中找到有用的信息,就必须要对信息进行定位/筛选.定位: 移动到下一条 Recordset.MoveNext 移动到上一条 Recordset.MovePrevious 移动到最后一条 Recordset.MoveLast 移动到第一条 Recordset.MoveFrist 移动到某一条 Recordset.Move Number筛选: Recordset.Find "条件"如:[用方法(2)打开表之后] Private Sub Command1_Click() Recordset.Find "用户名=" &"text1.text" If Recordset.Eof <>True Then Msgbox "该用户的密码是:" &Recordset("密码").value,64 Else Msgbox "未找到该用户的资料!",16 End If End SubMoveNext 只有当Eof不为True时,才可用,否则发生错误.而MovePrevious刚是Bof不为True时.... 而只要Eof 和 Bof中有一个不为真时,也就是说只要有一条记录时,它就可以使用. Find 方法中的条件和Open时的第一个参数中的条件表述方法是完全一致的.当在已打开的记录集中,找不到该记录时,Eof为True.找到则当前的值就是符合条件的记录. 第三个部分就是添加/修改记录. 修改记录很简单,先按以上的方法找到相关记录之后,给记录赋值就可以了. 比如:[(修改密码)按方法(1)打开表之后] Recordset("密码").value = "123456" Recordset.Updata 需要注意的就是,在修改完成后,要调用Updata方法,这样修改才能生效.而添加记录则可以用以下代码来实现: Recordset.addnew Recordset("用户名").value = "Admin" Recordset("密码").value = "Admin" Recordset.Updata这里,先要调用Addnew方法,增加一条新记录,然后对这个新记录中的各字段赋值,最后再调用Updata方法.到这里就差不多了,最后说一下上面提到的几个方法.Recordset.Open SQL语句,数据源,游标类型,打开方法SQL语句不用说了,就是Select那啥的,目的就是按要求从表中返回数据 数据源就是一个打开之后的Connection对象. 去他妈的游标类型,填1就可以了 [偷笑ing] 打开方法对应了几个常数,具体哪几个可以从对象浏览器里看. 对应数值的意义: 1 只读 2 独占 3 可写 4 自已可写,别人可读Connection.open 连接代码,服务器用户名,密码 这里的连接代码就不在多说了,服务器用户名,密码只有在连接远程数据库时才用到.欢迎分享,转载请注明来源:内存溢出
评论列表(0条)