资源描述
第十一章VisualBasic与数据库,11.1数据库概念11.2数据库管理器11.3ADO数据控件11.4记录集对象*11.5结构化查询语言(SQL)*11.6报表制作,11.1数据库概念,数据库就是一组排列成易于处理和读取的相关信息的集合。关系模型已经成为数据库设计事实上的标准。,关系型数据库模型,一个数据库可以由多个表组成,表与表之间可以用不同的方式相互关联。若第一个表中的一条记录内容与第二个表中多条记录的数据相符,但第二个表中的一条记录只能与第一个表的一条记录的数据相符,这样的表间关系类型叫做一对多关系。,若第一个表的一条记录的数据内容可与第二个表的多条记录的数据相符,反之亦然,这样的表间关系类型叫做多对多关系。,一对多关系,可以将一个或几个表中的数据构成记录集Recordset对象,记录集也由行和列构成,它与表类似。,在VB中数据库内的表格不允许直接访问,而只能通过记录集对象进行记录的操作和浏览,因此,记录集是一种浏览数据库的工具。,11.2数据库管理器,VB的数据库管理器(Visdata.exe)可用于管理数据库。在VB开发环境内单击外接程序菜单中的可视化数据管理器命令可打开可视数据管理器。,数据库管理器使用小结:1建立新表:鼠标右键单击数据库窗口,弹出菜单,选择对应命令。2打开、删除表,修改表结构和建立表间的关联等操作:右键单击数据库窗口内的表名,弹出菜单,选择对应命令。3编辑记录:双击表名,打开表格输入窗,编辑、增删记录。,建立Student.mdb数据库,所含学生基本情况表结构如下:,11.3ADO数据控件,ADO是Microsoft处理数据库信息的最新技术,它是一种ActiveX对象,采用了被称为OLEDB的数据访问模式。它是数据访问对象DAO、远程数据对象RDO和开放数据库互连ODBC三种方式的扩展。ADO对象模型更为简化,不论是存取本地的还是远程的数据,都提供了统一的接口。,11.3.1使用ADO数据控件,在使用ADO数据控件前,必须先通过“工程/部件”菜单命令选择“MicrosoftADODataControl6.0(OLEDB)”选项,将ADO数据控件添加到工具箱。ADO数据控件与VisualBasic的内部数据控件很相似,它允许使用ADO数据控件的基本属性快速地创建与数据库的连接。,1、引例,例题:编写一个简单的数据库程序,设计一个窗体,用网络形式浏览student.mdb数据库中“基本情况”表的内容。,先通过“工程/部件”菜单命令选择“MicrosoftADODataControl6.0(OLEDB)”选项,将ADO数据控件添加到工具箱,工具箱内ADO控件图标形状,画在窗体上的外观,1)数据源连接选择数据源连接方式连接操作-鼠标右击ADO控件,选择快捷菜单“ADODC属性”命令,打开ADO控件属性页窗:,三种数据源连接方式,选择数据库类型,指定数据库文件名,设置完成后,ADO控件的ConnectionString属性为:Provider=Microsoft.Jet.OLEDB.3.51;PersistSecurityInfo=False;DataSource=Student.mdbRecordSource属性为:基本情况(表),指定记录源,2)用DataGrid控件显示数据,将该控件的DataSource属性设置成Adodc1控件,将数据网格控件绑定到指定的记录集。运行后如下图。,2、ADO数据控件访问数据库过程,使用ADO数据控件建立与数据库的连接使用命令对象对数据库发出SQL命令,从数据库中选择数据构成记录集应用程序对记录集进行操作记录集:表示的是内存中来自表或命令执行的结果的集合,它也由记录(行)和字段(列)构成,可以把它当作一个表来进行操作。,ADO控件属性:,与数据库的连接及从数据库中选择数据构成记录集,其核心是设置ADO控件的三个基本属性:ConnectionString属性该属性是一个字符串,包含了用于与数据源建立连接的相关信息。如:Adodc1.ConnectionString=Provider=Microsoft.Jet.OLEDB.4.0;DataSource=Student.mdb,RecordSource属性RecordSource属性设置要链接的表或者SQL查询语句。可以在“属性”窗口中将“记录源”属性设置为一个SQL语句。如Adodc1.RecordSource=基本情况“Adodc1.RecordSource=select*from基本情况“,CommandType属性CommandType属性用于指定RecordSource属性的取值类型。adCmdUnknown:默认值。CommandText属性中的命令类型未知,常设为SQL语句。adCmdTable:设置为单个表名。adCmdText:设置为命令文本,通常使用SQL语句。adCmdStoreProc:设置为存储过程名。如:Adodc1.CommandType=adCmdTableAdodc1.CommandType=adCmdUnknown记得要用Adodc1.Refresh,刷新来显示记录,Recordset属性产生ADO控件实际可操作的记录集对象。记录集对象中的每个字段值用Recordset.Fields(“字段名”)获得。,BOFAction和EOFAction属性当移动数据库记录指针时,如果记录指针移动到BOF或EOF位置后,再向前或向后移动记录指针将发生错误。BOFAction和EOFAction属性指定当发生上述错误时,数据控件采取什么样的操作。BOFAction属性有两个可选常量:1)adDoMoveFirst:移动记录指针到第一个记录。2)adStayBOF:移动记录指针到记录的开始。记录指针移动到记录的开始位置时将引发数据控件的Validate事件和Reposition事件,这时可编写程序代码确定要执行的操作。EOFAction属性有三个可选常量:1)adDoMoveLast:移动记录指针到最后一个记录。2)adStayEOF:移动记录指针到记录的结尾,同样可利用它所引发的事件编写程序代码。3)adDoAddNew:当记录指针移动到文件尾部时,引发数据控件的Validate事件,然后自动执行AddNew方法添加新记录,并在新记录上引发Reposition事件。,ADO数据控件的方法和事件,Refresh方法该方法用于刷新ADO数据控件的连接属性,并能重建记录集对象。当在运行状态改变ADO数据控件的数据源连接属性后,必须使用该方法激活这些变化。WillMove和MoveComplete事件当用某种方法改变记录集的指针使其从一条记录移到另一条记录时,会产生WillMove事件,如使用ADO控件上的按钮移动记录位置时。WillComplete事件发生在一条记录成为当前记录后,它出现在WillMove事件之后。,11.3.2ADO控件上绑定控件的使用,1、数据绑定绑定控件通过ADO数据控件使用记录集内的数据,再由ADO控件将记录集连接到数据库中的数据表。需要对控件的两个属性进行设置:DataSource属性:通过指定一个有效的ADO数据控件将绑定控件与其建立联系。DataField属性:设置记录集中有效的字段使绑定控件与其建立联系。,2、简单数据绑定简单绑定就是将控件绑定到单个数据字段。例题:设计一个窗体,用以浏览Student.mdb数据库中“基本情况”表的内容,3、复杂数据绑定允许将多个数据字段绑定到一个控件中,同时显示记录集中的多行或多列。支持该绑定的控件有:数据网格控件DataGrid和MSHFGrid、数据列表框DataList和数据组合框DataCombo等。例题:通过单击不同的按钮在数据网格中显示Student.mdb数据库中基本情况表或成绩表的内容。,11.4记录集对象,在VB中不允许对数据库中的表直接访问,只能通过记录集对象RecordSet对记录进行浏览和操作。对记录集的修改最终会传给原始表。11.4.1浏览记录集1、属性AbsoloutPostion属性返回当前记录指针值,如:第N条记录的AbsoloutPostion属性值为n。RecordCount属性对记录集对象中的记录计数,该属性为只读属性。,BOF和EOF属性,Eof,Bof,RecordCount,当记录指针在首记录之前时,BOF为”true”,否则为“false”当记录指针在最后一条记录之后时,EOF为”true”,否则为“false”当前指针位于BOF,AbsoloutPostion返回-2,当前指针位于EOF,AbsoloutPostion返回-3当记录集为空,AbsoloutPostion返回-1,2、方法Find方法该方法可在记录集对象中查找符合条件的第一条记录,并使之成为当前记录。若没有找到,按搜索方向,指停在记录集的末尾处或起始位置前。格式为:Recordset.Find搜索条件,位移,搜索方向,起始位置说明:搜索条件:是一个字符串,包含用于搜索的字段名、比较运算符和数据。如:adodc1.Recordset.find“学号=990001”当使用Like运算符时,常量值可以用“*”代表多个字符,实现模糊查询。位移:指定从开始位置位移n条记录后开始搜索,默认值为0。搜索方向:其值为adSearchForward(向记录集尾部)或adSearchBackward(向记录集开始)起始位置:指定搜索的起始位置。缺省时从当前位置开始搜索。,Move方法组该方法可实现数据控件4个箭头按钮的操作。5种Move方法为:MoveFirst(看图)MoveNextMovePreviousMoveLastMoven从当前记录向前(-n)或向后(+n)移n条记录。例题,11.4.2记录集的编辑,1、数据编辑方法编辑主要指增加、删除、修改操作,涉及4个方法:AddNew方法:在记录集中增加一个空行。Delete方法:删除记录集中的当前记录。Update方法:确定所做的修改并保存到数据源中。CancelUpdate方法:取消未调用Uptate方法前对记录集所做的所有修改。,2、增加记录调用AddNew方法给各字段赋值调用Update方法。3、删除记录定位要被册除的记录,为当前记录调用Delete方法移动记录指针。4、修改记录当改变数据项的内容时,ADO控件自动进入编辑状态,在对数据编辑后,只要改变记录集的指针或调用Update方法,即可确定所做的修改。,例题:在上题中加入增、删、改功能。,11.4.3查询和统计,在实现查询功能时,要设置ADO控件的ConnectionString属性值,并将CommandType属性值设置为AdCmdUnknown,RecordSource属性设置为SQL语句,用Refresh方法激活。例如:根据输入的专业名称,在网络内显示基本情况表中该专业的所有学生记录。,为了减少专业名称输入的麻烦,可以用数据列表框DataList或数据组合框来代替文本框。例题:在数据列表框中显示专业名称,根据选定的专业在网格内显示该专业所有学生。说明:数据列表框内所要显示的数据由RowSource和listfield属性决定。BoundColumn为列表框传递出来的数据源字段(具体内容由BoundText属性提供。)RowSource=Adodc1listfield=“专业”,统计,在实现统计时,仍用到SQL的函数和分组功能来实现。例题:设计一个程序,统计各专业的人数、年龄分布。,11.4.4BLOB数据处理,二进制大型对象(BLOB)是指任何需要存入数据库的随机大块字节流数据,例如图形、声音,也可以是一个word文档。1、把BLOB数据写入数据库ADO的AppendChunk方法用于将BLOB数据写入到数据库的二进制字段内。ADO对象.Recordset.fileds(字段).AppendChunkData其中参数Data包含加入到数据库的BLOB数据。例如:,处理步骤如下:用二进制访问方式打开BLOB数据文件如:Open文件路径ForBinaryAs#1定义一个字节类型的数组,数组大小为文件大小如Dimst()AsByteReDimst(LOF(1)将文件保存到数组如Get#1,st使用ADO对象的AppendChunk方法写入数据库。如:Adodc1.Recordset.Fields(照片).AppendChunkst,例如:将图片写入到基本情况表中的一条记录的“照片”字段中,2、从数据库中读出BLOB数据使用ADO的GetChunk方法.变量=ADO对象.Recordset.fileds(字段).GetChunk(size)其中参数size为长整型表达式,读取字段内的数据的字节数。若size大于数据的实际长度,则GetChunk方法仅返回数据,而不填充空白。若字段为空,则GetChunk方法返回null。每个后续的GetChunk方法调用将检索从前一次GetChunk调用停止处开始的数据。例如,处理步骤如下:,用记录集的ActualSize属性取出记录的图片字段实际大小如:c=Adodc1.Recordset.Fields(照片).ActualSize定义一个字节数组,数据大小为图片字段实际大小如:Dima()asbyteReDima(c)使用ADO对象的AppendChunk方法将字段值存入字节数组中。如:a=Adodc1.Recordset.Fields(照片).GetChunk(c)用二进制方式打开文件,并将字节数组写入到打开的文件中。如:Opend:pic.jpgForBinaryAs#1Put#1,aClose#1,11.4.4使用数据窗体向导,通过数据窗体向导能建立一个访问数据的窗口。在使用前必须执行“外接程序/外接程序管理器”命令,将“VB6数据窗体向导”装入到“外接程序”菜单中。步骤1:执行“外接程序”菜单中的“数据窗体向导”命令,步骤2:选择数据库类型。,步骤3:选择具体的数据库文件。,步骤4:设置应用窗体的工作特性。,步骤5:选择记录源(所需要的实际数据)。,步骤6:选择所需要的操作按钮。,例11.6,11.5结构化查询语言(SQL),11.5.1结构化查询语言,结构化查询语言SQL是操作数据库的工业标准语言。在SQL语言中,指定要做什么而不是怎么做。不需要告诉SQL如何访问数据库,只要告诉SQL需要数据库做什么。利用SQL,可以确切指定想要检索的记录以及按什么顺序检索。可以在设计或运行时对数据控件使用SQL语句。用户提出一个查询,数据库返回所有与该查询匹配的记录。,这些函数可以用在SELECT短语中对查询结果进行计算,11.5.2使用SELECT语句查询,1.使用SELECT语句从数据库中的获取数据称为查询数据库,查询数据库通过使用SELECT语句。常见的SELECT语句形式为:SELECT字段列表FROM表列表WHEREGROUPBY.HAVINGORDERBY可以在设计或代码中对数据控件的RecordSource属性设置SQL语句,也可将SQL语句赋予对象变量。在建立SQL语句时,如果需要通过变量构造条件,则需要在应用程序中将变量连接到SELECT语句。例如:Select*From基本情况Where专业=”物理,SELECT:说明要查询的数据FROM:说明要查询的数据来自哪个或哪些表,可以对单个表或多个表进行查询;WHERE:说明查询条件,即选择元组的条件;后可用一些运算如inLIKE匹配符%:表示0个或多个字符匹配符:_:表示一个字符GROUPBY:短语用于将查询结果按一列或多列分组,如果未对查询结果分组,命令将作用于整个查询结果.分组后函数集将作用于每一个组.HAVING:短语必须跟随GROUPBY短语使用,它用来限定分组必须满足的条件;,1、简单查询:只有select和from子句select学号,姓名,专业from基本情况select*from基本情况2、由SELECT-FROM-WHERE短语构成条件查询select*from基本情况where专业=物理select*from基本情况where出生年月#1982/12/31#select*from基本情况where出生年月#1981/12/31#select*from基本情况where专业in(物理,数学)select*from基本情况where学号like9901%,例如:,3、用于计算检索的函数有:(1)COUNT-计数(2)SUM-求和(3)AVG-计算平均值(4)MAX-求最大值(5)MIN-求最小值这些函数可以用在SELECT短语中对查询结果进行计算selectcount(*)from基本情况selectmax(出生年月)from基本情况4、分组与计算查询GROUPBYGroupColumn,GroupColumnHAVINGFilterConditionselect专业,count(*)as人数from基本情况groupby专业select专业,max(出生年月)from基本情况groupby专业,5、多表连接查询Select目标表达式from表1,表2where表1.字段=表2.字段select基本情况.姓名,学生成绩表.成绩_from基本情况,学生成绩表_where基本情况.学号=学生成绩表.学号,*11.5.4ADO对象,使用ADO对象访问数据库比DAO对象模型更为简化,不论是存取本地的还是远程的数据,都提供了统一的接口。,11.6报表制作,数据报表设计器属于ActiveXDesigner组中的一个成员,在使用前需要执行“工程|添加DataReport”命令,将报表设计器加入到当前工程中,产生一个DataReport1对象,并在工具箱内产生一个“数据报表”标签。,“标签”控件在报表上放置静态文本“文本”控件在报表上连接并显示字段的数据“图形”控件可在报表上添加图片“线条”控件在报表上绘制直线“形状”控件在报表上绘制各种各样的图形外形“函数”控件在报表上建立公式。报表标头区包含整个报表最开头的信息,一个报表只有一个报表头,可使用“标签”控件建立报表名报表注脚区包含整个报表尾部的信息,一个报表也只有一个注脚区页标头区设置报表每一页顶部的标题信息;页注脚区包含每一页底部的信息;细节区包含报表的具体数据,细节区的高度将决定报表的行高。,例11.12建立新工程,在窗体上放置两个命令按钮。在当前工程内加入一个DataEnvironent1对象。完成与指定数据库的连接。在Connection1下创建Command1对象。在当前工程中加入报表设计器DataReport1,设置报表设计器的DataSource属性为数据环境对象,DataMember属性为Command1对象。将数据环境设计器中Command1对象内的字段拖动到数据报表设计器的细节区。使用“标签”控件,在报表标头区插入报表名,页标头区设置报表每一页顶部的标题信息等。使用“线条”控件在报表内加入直线,使用“图形”控件和“形状”控件加入图案或图形。在命令按钮Click事件内加入代码DataReport1.Show显示报表,DataReport1.PrintReport打印报表。,
展开阅读全文