编程入门教程.docx

上传人:b****2 文档编号:18191782 上传时间:2023-04-24 格式:DOCX 页数:75 大小:85.26KB
下载 相关 举报
编程入门教程.docx_第1页
第1页 / 共75页
编程入门教程.docx_第2页
第2页 / 共75页
编程入门教程.docx_第3页
第3页 / 共75页
编程入门教程.docx_第4页
第4页 / 共75页
编程入门教程.docx_第5页
第5页 / 共75页
点击查看更多>>
下载资源
资源描述

编程入门教程.docx

《编程入门教程.docx》由会员分享,可在线阅读,更多相关《编程入门教程.docx(75页珍藏版)》请在冰豆网上搜索。

编程入门教程.docx

编程入门教程

编程高手之路—vb与数据库DAO介绍

第一章初识DAO

  什么是DAO?

DAO就是DatabaseAccessObject,数据库访问对象的英文缩写。

在VB中提供了两种与Jet数据库引擎接口的方法:

Data控件和数据访问对象(DAO)。

Data控件只给出有限的不需编程而能访问现存数据库的功能,而DAO模型则是全面控制数据库的完整编程接口。

Data控件将常用的DAO功能封装在其中,它与DAO控件的关系就好象内存与CACHE之间的关系一样,所以这两种方法并不是互斥的,实际上,它们常同时使用。

  DAO模型是设计关系数据库系统结构的对象类的集合。

它们提供了完成管理一个关系型数据库系统所需的全部操作的属性和方法,这其中包括创建数据库,定义表、字段和索引,建立表间的关系,定位和查询数据库等。

  VisualBasic中的数据库编程就是创建数据访问对象,这些数据访问对象对应于被访问物理数据库的不同部分,如数据库、表、字段和索引等,同时用这些对象的属性和方法来实现对数据库的操作,以便在VisualBasic窗体中使用绑定和非绑定控件来显示操作结果并接收用户输入。

VisualBasic通过DAO和Jet引擎可以识别三类数据库:

■VisualBasic数据库

也就是*.MDB数据库

■外部数据库

它们是使用几种流行格式的“索引顺序访问方法(ISAM)”数据库,这些流行格式包括Btrieve、dBASEIII、dBASEIV、MicrosoftFoxProversions2.0和2.5以及Paradoxversions3.x和4.0。

在VisualBasic中能够创建和操作所有以上格式的数据库。

也可以访问文本文件数据库和MicrosoftExcel或Lotus1-2-3电子表格。

■ODBC数据库

包括符合ODBC标准的客户/服务器数据库,如MicrosoftSQLServer。

要在VisualBasic中创建真正的客户/服务器应用程序,可以使用ODBCDirect直接把命令传递给服务器处理。

也就是说VisualBasic还支持其它不使用Jet数据库引擎的数据访问方法。

数据访问对象的ODBCDirect模式允许使用同样的对象模型和语法绕过Jet引擎直接访问ODBC数据。

由上面的叙述可知,对于编程人员来讲,你只须了解DAO的使用,对具体的数据库系统无须做深入的探讨,就可对几乎任何一种数据库进行操作,“以不便应万变”,而对数据库文件自身的物理操作,将由相应的数据库引擎把数据访问对象上的这些操作转换为对数据库文件自身的物理操作,这些引擎来处理所有与各种数据库的接口。

第二章DAO的结构

上一章我们知道了DAO是什么,它可以干什么,以及简单的了解了它是如何实现这一功能,这一章我们讲逐步学习DAO的结构。

在将讲这一章之前,首先讲两个题外话:

面向对象编程

大家对面向对象编程一定不陌生,但究竟什么是面向对象编程,很多人一下子也说不出个所以然来;在VB的DAO中又是如何体现面向对象的呢,恐怕即便是使用了一段VB的网友也很难说清。

这也难怪,VB本身并不是个完全的面向对象的编程环境,它的很多如动态数组等就不是面向对象的,但在DAO中是完全的面向对象的。

其实面向对象的最初思想就是将数据和操作封装在一起,形成对象,而在DAO中正是体现了这一点,它将数据的值作为属性,数据的查询作为方法,数据值的变化作为事件,完全封装在DAO对象中,希望诸位盟友在使用中注意,逐步领悟面向对象的编程方法。

数据库前端开发系统和后台系统

经常由朋友说他会DELPHI,会PB,实际上用前端和后台的概念来看,他们都只是会一种前端开发工具而已,严格说起来并不能算会数据库的开发。

人们往往只看到前台应用的功能而忽视了后台系统的应用,或者认为这两者根本就是一回事。

前端后台概念用在单机上,就是VB与Access,用在网络中就是VB与SQLSever,只会VB或DELPHI是不能称为掌握数据库编程的,而且在编程中,要善于利用后台数据库提供功能,这样的程序运行起来更快,程序更精练。

题外话讲完,现在切入正题。

DAO的结构如图所示:

 以上是DAO整体结构图,下面将分章节逐步讲述每个对象的使用

编程高手之路—vb与数据库----网络数据库的复制和同步

与复本操作有关的对象、属性和方法

为了实现复本燥乍,MicrosoftJet数据库引擎提供了多个对象、属性和方法。

在这一节中,将介绍与复本操作有关的对象、属性和方法。

1.Document对象和Documents集合

Document对象含有关于对象的一个实例的信息,对象可以是一个数据库、表、查询或关系(仅用于MicrosoftJet数据库)。

每个Container对象有一个包含Document对象的Documents集合(其关系详见VB的帮助文件),这些Document对象描述由Container指定类型的内置对象的实例。

表1列出了Document所描述的对象的类型、其Container对象的名称及Document包含信息的类型。

Documentcontainer包含的信息

数据库数据库保存的数据库

表或查询表或查询保存的表或查询

关系关系保存的关系

(表1)

用Document对象可以实现下列操作:

·用Name属性返回由用户或MicrosoftJet数据库引擎在建立对象时给对象所取的名字。

·用Container属性返回包含Document对象的Container对象的名称。

·用Owner属性设置或返回对象的拥有者。

为了设置owner属性,用户必须有对Document对象的写权限,并且必须把userName属性设置为一个现有的user或Group对象的名称。

·用UserName属性或Permissions属性设置或返回一个用户或组对象的访问权限。

为了设置这些属性,用户必须有对Document对象的写权限,并且必须把userName属性设置为一个现有的User或GrOup对象的名称。

·用DateCreated属性和LasUpdated属性分别返回建立Document对象和最后修改Document对象的日期和时间。

由于一个Document对象对应于一个现有的对象,因此用户不能建立新的Document对象或者删除现有的Document对象。

一个Documents集合含有多个Document对象。

可以通过以下几种格式引用一个Document对象:

Documents(0)

Documents("Name”)

Documents!

[name]

2.container对象和Containers集合

Contalner对象把相似类型的Document对象放在一个组中。

每个Database对象含有由内部container对象组成的Containers集合。

应用程序可以定自己的文档类型和相应的容器(仅对MicrosoftJet数据库),但这些对象不一定总是通过DAO支持。

某些Container对象由MicrosoftJet数据库引擎定义,也可以由其它应用程序定义。

由MicrosoftJet数据库引擎定义的Container对象及其所包含的信息见表2

Container对象包含的信息

数据库保存的数据库

表保存的表及查询

关系保存的关系

(表2)

说明:

1.)每个Container对象含有由Document对象组成的Documents集合,通常用Container对象作为到Document对象中信息的直接链接,也可以用container集合为给定类型的Document对象设置安全性。

2.)用Container对象可以实现以下操作:

·用Name属性返回Container对象的预定义名称。

·用Permissions和UserName属性来设置container对象的权限;在Container对象的Documents集合中建立Document对象来继承这些访问权限设置。

·用owner属性设置或返回Container对象的所有者。

为了设置Ower属性,必须写入Container对象的权限,并把属性设置为现有user或Group对象的名称。

(3)Container对象是由系统预定的,因此不能建立新的container对象,也不能删除现有的Container对象。

(4)可以通过顺序号或Name属性设置或引用集合中的container对象,例如:

Containers(0)

Containers(”name”)

Containers!

[Name]

【例】编写程序,列出Tables容器中的Documents集合。

在窗体上画一个命令按钮,然后编写如下的事件过程:

PrivateSubCommand1_Click()

DimdbsnorthwindAsDatabase

DimdocloopAsDocument

DimprploopAsProperty

Setdbsnorthwind=OpenDatabase("e:

\f.mdb")

Withdbsnorthwind.Containers!

tables

Debug.Print"documentsin"&.Name&"container"

'列出Table容器中的Documents集合

ForEachdocloopIn.DocumentsDebug.Print""&docloop.NameNext

Endsub

该过程列出f.mdb数据库Table容器中的Documents集合。

程序运行后,单击命令按钮,即可在“立即”窗口中列出该集合。

 

编程高手之路—vb与数据库DAO介绍三)

DAO介绍(三)

文章来源:

vb大世界

3)type、options和lockedits参数

type参数可选表

可选参数

dbOpenDynaset

dbOpenSnapshot

dbOpenForwardOnly

dbOpenDynamic

dbOpenTable

参数说明

Recordset对象表类型

Recordset对象快照类型

Recordset对象仅向前类型

Recordset对象动态类型

Recordset对象动态集类型

options参数可选表

可选参数

dbAppendOnly

dbReadOnly

dbSeeChanges

dbDenyWrite

dbDenyRead

参数说明

只能新增

只读

编辑锁定

禁止其它用户写

禁止其它用户读

备注

仅对动态集

仅对MicrosoftJet工作区

仅用于动态集类型的记录集

仅用于Recordset对象

仅用于表类型的记录集

可选参数

dbForwardOnly

dbSQLPassThrough

dbConsistent

dbInconsistent

参数说明

仅向前快照

source是SQL

一致更新

不一致更新

 

备注

仅用于MicrosoftJet数据源

仅用于快照

仅用于动态集类型和快照类型

仅用于动态集类型和快照类型

 

lockedits参数可选表

可以使用lockedits参数控制对记录集的锁定。

可用以下常数。

常数

描述

dbReadOnly

禁止用户对记录集进行修改

DbPessimistic

在多用户环境中,使用保守式锁定来决定修改记录集的方式

DbOptimisticValue

使用基于行值而非行IDs的优化并发。

仅用于ODBCDirect数据源

4)Recordset对象的类型

Recordset对象有五种类型:

表、动态集、快照、动态和仅向前

表类型的Recordset对象是指当前数据库中的本地表或者MicrosoftJet创建的外部数据库。

在创建表类型的记录集时,数据库引擎打开实际表,后续的数据操作都是直接对基本表进行的。

只能对单个的表打开表类型的记录集,而不能对联接或者联合查询打开。

如果使用基本表创建的索引,就可以对表类型的Recordset对象进行索引。

与其它类型的Recordset对象相比,表类型的搜索与排序速度最快。

定位特定的记录时,Seek方法要快于Find方法。

动态集类型的Recordset对象可以是本地的或者链接的表,也可以是返回的行查询结果。

它实际上是对一个或者几个表中的记录的一系列引用。

可用动态集从多个表中提取和更新数据,其中包括链接其它数据库中的表。

动态集类型具有一种与众不同的特点:

不同数据库的可更新联接。

利用这种特性,可以对不同类型的数据库中的表进行可更新的联接查询。

动态集和它的基本表可以互相更新。

如果动态集中的记录发生改变,同样的变化也将在基本表中反映出来。

在打开动态集的时候,如果其他的用户修改了基本表,那么动态集中也将反映出被修改过的记录。

动态集类型是最灵活的recordset类型,也是功能最强的。

不过,它的搜索速度与其它操作的速度不及表类型的Recordset。

快照类型的Recordset对象包含的数据是固定的,它反映了在产生快照的一瞬间数据库的状态。

从MicrosoftJet数据源得到的快照是不可更新的,从开放数据库互连(ODBC)数据源得到的某些快照是可以更新的,这取决于后端数据库的能力。

与动态集类型和表类型的Recordset对象相比,快照的处理开销较少。

因此,它执行查询和返回数据的速度更快,特别是在使用ODBC数据源时。

需要注意的是,对于.mdb文件,在快照中用指针表示Memo和LongBinary字段中的数据。

仅向前类型的Recordset对象,有时被称为“向前滚动快照”或者“仅向前快照”,提供了快照的一部分功能。

它提供了最基本的Recordset对象功能,但是通常可以达到最快的速度。

与快照类似,从MicrosoftJet得到的仅向前类型的Recordset对象是不可更新的。

另外,仅向前的快照只允许在记录中向前移动,而不能向相反的方向移动。

这种类型的Recordset对象不能被复制,而且只支持Move和MoveNext方法。

动态类型的Recordset对象是从一个或几个基本表中查询到的结果集,对于返回行的查询,可以在其中添加、修改或删除记录。

另外,其它用户对基本表的添加、删除和修改操作也将出现在您的记录集中。

这种类型对应于ODBC的动态游标。

编程高手之路—vb与数据库DAO介绍四)

 

5)缺省的记录集类型

DAO能够根据记录集的数据源类型,以及打开记录集的方式,自动地设置缺省的记录集类型。

因此,一般不需要指定记录集类型。

然而,可以在OpenRecordset方法中指定type参数,以取消缺省的类型。

按照打开记录集的方式,下表中列出了可用的类型和缺省的类型。

■   使用Database对象的OpenRecordset方法:

   SetrstNew=dbs.OpenRecordset("DataSource")

   

   如果DataSource为数据库中的本地表,那么可以用表类型、动态集、快照和动态类型的Recordset对象,缺省的记录集类型为表类型。

如果DataSource为其它类型,那么只能使用动态集和快照类型的Recordset对象,动态集类型为缺省的类型。

■   使用TableDef对象的OpenRecordset方法。

   SetrstNew=tdfTableData.OpenRecordset

   

   如果tdfTableData指的是MicrosoftJet数据库(.mdb)中的表,或者直接打开的ISAM数据库,那么所有的五种类型都是可用的,表类型的记录集为缺省的类型。

如果tdfTableData在ODBC数据库中,或者是外部数据库中的链接表,那么只能用动态集和快照类型的Recordset对象,动态集类型为缺省类型。

■   使用QueryDef对象的OpenRecordset方法:

   SetrstNew=qdfQueryData.OpenRecordset

   

   只能使用动态集和快照类型的Recordset对象,动态集类型为缺省的类型。

■   使用现有的Recordset对象的OpenRecordset方法:

   SetrstNew=rstExisting.OpenRecordset

   

   只能使用动态集和快照类型的Recordset对象。

缺省的类型为现有的记录集的类型,在上例中,即rstExisting的类型。

6)具体创建Recordset对象的例子

在下面的例子中可能用到一些还未讲到的东西,但由于使用的比较简单,相信大家还是能够理解。

①以表为基础创建记录集

用基本表创建Recordset对象的方法,取决于该表对于当前数据库是本地表,还是位于另一个数据库中的链接表。

   

用本地MicrosoftJet数据库中的表创建记录集

下列程序代码使用OpenRecordset方法为一个表创建了表类型的Recordset对象:

DimdbsAsDatabase,rstCustomersAsRecordset

Setdbs=OpenDatabase("Northwind.mdb")

SetrstCustomers=dbs.OpenRecordset("Customers")

   

请注意,创建表类型的记录集时无需使用dbOpenTable常数。

如果省略了type常数,DAO将根据数据源和用来创建记录集的对象的类型,选择最适当的Recordset对象类型。

当从本地表打开记录集时,可以使用表类型的记录集,DAO将使用它。

②用其它数据库格式的链接表创建记录集

下列程序段为链接的Paradox3.x表创建了一个动态集类型的Recordset对象。

当从非MicrosoftJet数据库中的链接表打开记录集时,表类型是不能使用的,因此,DAO的使用效率仅次于它的动态集类型。

DimdbsAsDatabase

DimtdfNonJetLinkedAsTableDef

DimrstTableDataAsRecordset

'打开数据库并创建TableDef。

Setdbs=OpenDatabase("Northwind.mdb")

SettdfNonJetLinked=dbs.CreateTableDef("PDXAuthor")

'连接到名为Author的Paradox表,该表位于数据库

'C:

\PDX\Publish。

tdfNonJetLinked.Connect=_

   "Paradox3.X;DATABASE=C:

\PDX\Publish"

tdfNonJetLinked.SourceTableName="Author"

'链接该表。

dbs.TableDefs.AppendtdfNonJetLinked

'为该表创建动态集类型的记录集。

SetrstTableData=tdfNonJetLinked.OpenRecordset()

   

如果先打开Paradox数据库,则可直接打开Paradox表。

③以查询为基础创建记录集

也可以基于存储的选择查询来创建Recordset对象。

在下例中,“CurrentProductList”是保存在当前数据库中的一个选择查询。

DimdbsAsDatabase,rstProductsAsRecordset

Setdbs=OpenDatabase("Northwind.mdb")

SetrstProducts=dbs.OpenRecordset_

   ("CurrentProductList")

   

如果当前并不存在存储的选择查询,OpenRecordset方法允许使用SQL字符串代替查询名。

上例可以改写为以下程序段:

DimdbsAsDatabase,rstProductsAsRecordset

DimstrQuerySQLAsString

Setdbs=OpenDatabase("Northwind.mdb")

strQuerySQL="SELECT*FROMProducts"_

   &"WHEREDiscontinued=No"_

   &"ORDERBYProductName;"

SetrstProducts=dbs.OpenRecordset(strQuerySQL)

   

这种方法的缺点在于,每次运行时都需要先编译查询字符串,而存储的查询只是在首次保存时编译一次,所以性能较佳。

注意如果在MicrosoftJet中用SQL字符串或者存储的查询创建Recordset对象,那么,在查询返回了记录集的第一行以后,程序才会继续运行。

在查询运行的时候,最好在状态栏中显示出适当的消息。

如果使用ODBCDirect,可以指定dbRunAsync,它使查询在后台执行,应用程序能够继续执行其它语句。

 

编程高手之路—vb与数据库DAO介绍四)

 

5)缺省的记录集类型

DAO能够根据记录集的数据源类型,以及打开记录集的方式,自动地设置缺省的记录集类型。

因此,一般不需要指定记录集类型。

然而,可以在OpenRecordset方法中指定type参数,以取消缺省的类型。

按照打开记录集的方式,下表中列出了可用的类型和缺省的类型。

■   使用Database对象的OpenRecordset方法:

   SetrstNew=dbs.OpenRecordset("DataSource")

   

   如果DataSource为数据库中的本地表,那么可以用表类型、动态集、快照和动态类型的Recordset对象,缺省的记录集类型为表类型。

如果DataSource为其它类型,那么只能使用动态集和快照类型的Recordset对象,动态集类型为缺省的类型。

■   使用TableDef对象的OpenRecordset方法。

   SetrstNew=tdfTableData.OpenRecordset

   

   如果tdfTableData指的是MicrosoftJet数据库(.mdb)中的表,或者直接打开的ISAM数据库,那么所有的五种类型都是可用的,表类型的记录集为缺省的类型。

如果tdfTableData在ODBC数据库中,或者是外部数据库中的链接表,那么只能用动态集和快照类型的Recordset对象,动态集类型为缺省类型。

■   使用QueryDef对象的OpenRecordset方法:

   SetrstNew=qdfQueryData.OpenRecordset

   

   只能使用动态集和快照类型的

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 教育学心理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1