第8章-使用DAO访问数据库课件

上传人:txadgkn****dgknqu... 文档编号:242763819 上传时间:2024-09-03 格式:PPT 页数:81 大小:417.08KB
返回 下载 相关 举报
第8章-使用DAO访问数据库课件_第1页
第1页 / 共81页
第8章-使用DAO访问数据库课件_第2页
第2页 / 共81页
第8章-使用DAO访问数据库课件_第3页
第3页 / 共81页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第8章 使用DAO访问数据库,第8章 使用DAO访问数据库,1,第8章 使用DAO访问数据库,8.1 DAO层次结构,8.2 DAO对象,8.3 DAO编程实例,第8章 使用DAO访问数据库8.1 DAO层次结构,2,8.1 DAO层次结构,DAO提供两种不同的编程模型结构:,Microsoft Jet Workspaces DAO模型,ODBC Direct Workspaces DAO模型。,数据访问对象模型是Jet为数据库引擎的面向对象的接口。由一系列数据库对象和对象的集合按一定的层次结构组成。其层次结构和关系数据库的逻辑视图相符合。数据访问对象类以分层结构来组织,其中的大多数类属于集合类。在分层结构中,它又属于其上层的另一个类。DAO的层次结构如图8.1所示。,8.1 DAO层次结构DAO提供两种不同的编程模型结构:,3,8.1 DAO层次结构,图8.1 DAO层次结构模型图,8.1 DAO层次结构图8.1 DAO层次结构模型图,4,8.2 DAO对象,8.2.1 DBEngine对象,8.2.2 Workspace对象,8.2.3 Database对象,8.2.4 TableDef对象,8.2.5 Recordset对象,8.2.6 QueryDef对象,8.2.7 Field对象,8.2 DAO对象8.2.1 DBEngine对象,5,8.2 DAO对象,DBEngine对象,DBEngine对象相当于Jet数据库引擎,它是不需要创建就已经存在的对象,而且一个应用界面只能有一个DBEngine对象。DBEngine对象位于DAO对象的顶层,其层次结构如图8.2所示。,图8.2 DBEngine对象,8.2 DAO对象DBEngine对象图8.2 DBEngi,6,8.2 DAO对象,DBEngine对象的属性,DefaultUser:缺省用户名称。进行数据库访问时设置的缺省用户名称,是一个长度小于20个字符的String变量,DefaultUser的缺省值是Admin。,DefaultPassword:缺省用户口令。进行数据库访问时设置的缺省用户口令,DefaultPassword的缺省值是空字符串。,SystemDB:系统数据库名称。本地Microsoft Jet数据库工作组文件,缺省值为System.mdw,8.2 DAO对象DBEngine对象的属性,7,8.2 DAO对象,IniPath:初始文件位置。设置或返回Windows注册文件中存有Microsoft Jet数据库引擎值的键的有关信息。,LoginTimeout:注册超时。在注册进入一个ODBC数据库时,系统发出错误信号前等待的时间。缺省值为20秒,如果设为零,系统将永久等待,Version:DAO版本信息。用来返回正在使用的DAO的版本信息,DefaultType:Workspace对象的类型。设置或返回一个值,该值为创建下一个工作区对象指出默认连接类型(工作区类型)。该属性的取值有两个:DbUseJet表示创建连接到Microsoft Jet数据库引擎的工作区对象, DbUseODBC表示创建连接到数据源的工作区对象。,8.2 DAO对象IniPath:初始文件位置。设置或返回W,8,8.2 DAO对象,DBEngine对象的方法,CreateWorkspace:创建一个新的Workspace对象。可以选用参数来设置Workspace的类型以及访问的用户名称和访问的口令。,CompactDatabase:压缩或转换一个关闭的Microsoft Jet数据库。,RegisterDatabase:将ODBC数据源的连接信息注册到Windows。,8.2 DAO对象DBEngine对象的方法,9,8.2 DAO对象,RepairDatabase:修复一个关闭的Microsoft Jet数据库。,Idle:挂起数据处理进程,使DBEngine处于空闲状态,8.2 DAO对象RepairDatabase:修复一个关闭,10,8.2 DAO对象,CreateWorkspace方法用于创建一个具有指定类型、用户名称和口令的Workspace对象。其语法如下:,Set Workspace对象变量=DBEngine.CreateWorkspace(name,user,password,type),CreateWorkspace的参数有name、user、password、type,说明如下。,name:String类型,用于指明Workspace的名称。,user:String类型,用于指明访问的用户名称。,password:String类型,用于指定访问的口令。,type:常量,指明所建立的Workspace的类型,取值有两个,分别是dbUseJet(创建Microsoft Jet工作区)和dbUseODBC(创建ODBC工作区)。,8.2 DAO对象CreateWorkspace方法用于创建,11,8.2 DAO对象,Workspace对象,Workspace对象的属性,Name:设置或返回用户定义的Workspace对象的名称。,Type:Workspace对象的类型。如果连接Microsoft Jet数据库,则为Microsoft Jet Workspace对象;如果连接ODBC数据库,则为ODBC Workspace对象。,(3)UserName:拥有该Workspace对象的用户或用户组的名称。,(4)LoginTimeout:在注册进入一个ODBC数据库时,系统发出错误信号前等待的时间,缺省值为20秒。如果设为零,系统将永久等待。,8.2 DAO对象Workspace对象,12,8.2 DAO对象,图8.4 Workspace集合和对象,8.2 DAO对象图8.4 Workspace集合和对象,13,8.2 DAO对象,Workspace对象的方法,CreateDatabase:在一个指定的工作区中建立一个新的Jet数据库对象(只能是.mdb,且存放在磁盘上),并把数据库对象作为函数值返回。该方法只能创建Jet数据库(只能是.mdb,且存放在磁盘上),也是代码创建Jet数据库的惟一方法。,8.2 DAO对象Workspace对象的方法,14,8.2 DAO对象,CreateGroup:在一个指定的工作区建立一个新的组Group对象。,CreateUser:在一个指定的工作区建立一个新的组User对象。,OpenConnection:在ODBC数据源上打开一个Connection对象(仅用于ODBC Direct Workspace,它通过Microsoft Jet 数据引擎直接访问ODBC数据源的Workspace),OpenDatabase:打开一个现在的数据库。可以打开Jet3.51支持的所有类型的数据库。,8.2 DAO对象CreateGroup:在一个指定的工作区,15,8.2 DAO对象,BeginTrans:将该语句后到CommitTrans语句前的一系列的数据操作作为一个事务来完成,以便于在需要的时候使用Rollback方法回退这一系列数据操作。,CommitTrans:结束当前的事务并且将所进行的修改保存到数据库中。,Rollback:回退从BeginTrans开始到CommitTrans提交的事务。,Close:关闭该Workspace对象以及它的任何子对象,即将Workspace对象从内存中删除。,8.2 DAO对象BeginTrans:将该语句后到Comm,16,8.2 DAO对象,Database对象,Databases集合指一系列的Database对象,每个Database对象映射一个打开的物理数据库。 Database集合和对象的层次结构图如图8.5所示。其中,TableDef对象为Database对象子集的默认对象。,图8.5 Database集合和对象,8.2 DAO对象 Database对象图8.5 Datab,17,8.2 DAO对象,Database对象的属性,Name:设置或返回数据库的完整路径和文件名。,Connect:设置或返回打开外部数据库时的连接字符串(Connect string)。,Connection:设置或返回ODBC连接属性,包括用户名、口令等。,Transactions:返回是否可以使用BeginTrans、CommitTrans或RollBack,实现批量写入,取消写入。,8.2 DAO对象Database对象的属性,18,8.2 DAO对象,QueryTimeout:设置当使用ODBC调用打开客户服务器结构的数据库时,操作等待的时间。,CollatingOrder:返回数据库中文排序方式。,Count:返回Database对象的数量。,RecordsAffected:返回执行Execute命令后,被操作的记录数。,Version:返回所打开数据库的版本号。,8.2 DAO对象QueryTimeout:设置当使用ODB,19,8.2 DAO对象,Updatable:返回是否可对数据库进行写入或删除数据操作。,Replicable:设置或返回数据库或数据库对象可以被复制。,V1xNullBehavior:设置是否将“Text”类型或“Memo”类型的字段的空字符串转换为Null,其值为True时,进行转换。,8.2 DAO对象Updatable:返回是否可对数据库进行,20,8.2 DAO对象,Database对象的方法,(1)OpenRecordset:打开Recordset记录集对象。它是Database对象诸方法中使用最多的一个方法。,语法:Set recordset = object.OpenRecordset (source, type, options, lockedits),参数source:字符串型,指定新建的Recordset对象的记录源,可以是表名、查询名或一个返回若干记录的SQL,语句,对于Microsoft Jet数据库中的表类型的Recordset对象,它只能是表名。,8.2 DAO对象Database对象的方法,21,8.2 DAO对象,参数type:可选,指定Recordset对象的类型,它可取表8.1中的值。,参数options:可选,指定Recordset对象的其它属性,它可取表8.2中的值。,参数lockedits:可选,指定Recordset对象的锁定类型,它可取表8.3中的值。,8.2 DAO对象参数type:可选,指定Recordset,22,8.2 DAO对象,常量,说明,dbOpenTable,打开表类型Recordset对象(仅对Microsoft Jet workspace有效),dbOpenDynamic,打开动态(Dynamic)类型Recordset对象(仅对Microsoft Jet workspaces有效),类似ODBC动态游标,dbOpenDynaset,打开动态集(dynaset)类型Recordset对象,dbOpenSnapshot,打开一个快照(Snapshot)类型Recordset对象,dbOpenForwardOnly,打开一个单向向前Recordset对象,表8.1 Type参数的取值,8.2 DAO对象常量说明dbOpenTable打开表类型R,23,8.2 DAO对象,常量,说明,dbAppendOnly,只允许追加新记录,dbSQLPassThrough,传递一个SQL语句,dbSeeChanges,当别的用户在编辑时,企图修改数据,会产生一个运行错误,dbDenyWrite,禁止写,dbDenyRead,禁止读,dbForwardOnly,只能向前(为了与以前版本兼容),dbReadOnly,只能读,dbRunAsync,运行异步查询(只针对ODBC Direct Workspace有关),dbExecDirect,跳过SQL Prepare直接调用SQL Exec Direct运行查询,dbInconsistent,允许不一致修改,dbConsistent,只允许一致性修改,表8.2 Option参数的取值,8.2 DAO对象常量说明dbAppendOnly只允许追加,24,8.2 DAO对象,常量,说明,dbReadOnly,只允许读,dbPessimistic,在多用户环境下,使用悲观锁定策略,即一旦使用Edit方法,将锁定编辑的页,dbOptimistic,在多用户环境下,使用乐观锁定策略,即直到使用Update方法时才锁定所编辑的页,dbOptimisticValue,用基于行的乐观一致性锁定策略(只针对ODBC Direct Workspace有效),dbOptimisticBatch,使用批量乐观更新(只针对ODBC Direct Workspace有效),表8.3 lockedits参数的取值,8.2 DAO对象常量说明dbReadOnly只允许读dbP,25,8.2 DAO对象,Close:关闭DAO对象。,CreateProperty:创建一个新的用户定义的Property对象,只对Microsoft Jet Wordspace有效。,CreateQueryDef:创建一个新的查询定义QueryDef对象。,CreateTableDef:创建一个新的表定义TableDef对象。,CreateRelation:创建一个新的联系Relation对象,只对Microsoft Jet Wordspace有效。,8.2 DAO对象Close:关闭DAO对象。,26,8.2 DAO对象,Execute:在一个指定的连接或数据库对象上运行一个功能查询或执行一个SQL语句。,NewPassword:改变口令。,MakeReplia:复制数据库,只对Microsoft Jet Wordspace有效。,Synchronize:使两个复制同步,只对Microsoft Jet Wordspace有效。,8.2 DAO对象Execute:在一个指定的连接或数据库对,27,8.2 DAO对象,TableDef对象,TableDef集合和对象的层次结构图如图9.6所示。它包括字段(Field)和索引(Index)两个对象。,图8.6 TableDef集合和对象,8.2 DAO对象 TableDef对象图8.6 Table,28,8.2 DAO对象,TableDef对象的属性,Name:设置或返回TableDef对象的名称。可以和数据库中表的名称不一样。,Attributes:设置或返回TableDef对象的特性。如是否打开为打开为独占方式;该表是否是由Jet数据库引擎提供的系统表等等。,ConflictTable:冲突表的名字,该表包含了两个副本在同步期间相互冲突的数据库记录。,8.2 DAO对象TableDef对象的属性,29,8.2 DAO对象,DataCreated:返回创建表的日期和时间。是日期变量型。,LastUpdated:返回最近一次修改表的。日期和时间。是日期变量型。,RecordCount:TableDef对象中所有的记录总数。对于基表(Base Table),RecordCount属性返回的是表中的记录总数;对于链接表(Linked Table),返回的是-1。,8.2 DAO对象DataCreated:返回创建表的日期和,30,8.2 DAO对象,Updatable:指定能否对表中的数据进行修改。取True或False值。对于新建的TableDef对象,该属性值为True。但在有些场合,如网络环境,表可以被锁定,或用户以只读方式打开时,该值为False,表明不能对表更新。,ValidationRule:有效性规则,在一个字段被修改或添加到一个表时,设置或返回用来使该字段中数据生效的值。字符串类型。,ValidationText:在键入到某个字段对象中的值不满足有效性规则时,应用程序所显示的提示性信息。,8.2 DAO对象Updatable:指定能否对表中的数据进,31,8.2 DAO对象,TableDef对象的方法,CreateField:在TableDef对象中建立一个新的字段,并创建一个Field对象,建立对该字段的引用。,CreateIndex:在TableDef对象中建立一个新索引,并创建一个Index对象,建立对该索引的引用。,CreateProperty:建立一个用户自定义的属性,并创建一个Property对象,建立对该属性的引用。,OpenRecordset:创建一个记录集对象,显示一个或多个表中部分或全部的字段的数据。,RefreshLink:更新与链接表的链接。,8.2 DAO对象TableDef对象的方法,32,8.2 DAO对象,Recordset对象,在使用DAO访问数据库时,一般都使用Recordset对象来操作记录,如增加记录、删除记录、更新数据库、在记录中移动等。,Recordset对象的层次结构如图8.7所示。,图8.7 Recordset对象与集合,8.2 DAO对象Recordset对象图8.7 Recor,33,8.2 DAO对象,Recordset对象共有5种类型。,Table:是缺省类型。此类型的Recordset对象是物理表的映射。它包含单一表对象的所有数据。它可以对数据进行完全访问,如添加、修改、删除记录。,Dynast:此类型的Recordset对象是单一表对象或Select类型查询结果的映射。它所包含的字段一般来源于多个表,是一个动态的记录集合。它可以有Table类型所有编辑功能,但不能使用索引。,Snapshot:此类型的Recordset对象包含一组不能更改的记录集合,是只读的。用来浏览数据和生成报表。,8.2 DAO对象Recordset对象共有5种类型。,34,8.2 DAO对象,(4)ForwardOnly:此类型的Recordset对象和Snapshot类型一样,但只能在记录集合中向前移动,用于网络数据库环境。,(5)Dynamic:此类型的Recordset对象是一个查询结果的记录集合。可以进行增加、修改、删除等操作。并且在多用户环境,其他用户对对象记录来源表中的数据的修改也会反映到该Recordset对象上。,8.2 DAO对象(4)ForwardOnly:此类型的Re,35,8.2 DAO对象,Recordset对象的属性,AbsolutePosition:设置或读取当前记录在记录集中的位置。,BOF:返回值表明指针是否已到记录集中第一条记录之前。一般在记录间向前移动记录指针时,应先检查此属性以保证指针不会移出记录集。,Bookmark:指向特定记录的标签。,Bookmarkable:返回值表明此Recordset对象是否支持Bookmark。,8.2 DAO对象Recordset对象的属性,36,8.2 DAO对象,EditMode:返回一个表明当前记录的编辑状态的值。,EOF:返回值表明指针是否已到记录集中最后一条记录之后。一般在记录间向后移动记录指针时,应先检查此属性以保证指针不会移出记录集。,Filter:过滤记录的字符串,相当于去掉SQL语句中WHERE关键字的WHERE子句。,Index:设置或返回一个值表明Recordset对象记录显示顺序的索引的名称。,LastModified:返回一个指向Table对象中最近修改过的记录的标签。,8.2 DAO对象EditMode:返回一个表明当前记录的编,37,8.2 DAO对象,LastUpdated:最后一次将Recordset的改变更新到数据库的日期和时间。,LockEdits:取值为True或False。该值取True时,锁定当前正在更新的页面;该值取False时,仅当Update方法用于编辑的表时锁定页面。,Name:Recordset对象的名称。,NoMatch:取值为True或False。当用Seek或Find方法查找记录时,如果没有满足给定条件的记录,该值取True。,PercentPosition:当前记录指针的位置与记录总数的百分比。,8.2 DAO对象LastUpdated:最后一次将Reco,38,8.2 DAO对象,RecordCount:Recordset对象中记录的总数。,Restartable:Recordset对象是否支持Requery方法。,Sort:指定Recordset对象显示的排序准则,相当于去掉SQL语句中ORDER BY关键字的ORDER BY子句。,Transactions:是否支持事务处理的回退功能。,ValidationRule:在一个字段被修改或添加到一个表中时,返回或设置用来使该字段中数据生效的值。是一个String类型的字符串。,8.2 DAO对象RecordCount:Recordset,39,8.2 DAO对象,ValidationText:在键入到某个字段对象中的值不满足有效性规则时,应用程序所显示的提示性信息。,2Recordset对象的方法,AddNew:向Recordset对象添加一条新记录,并将记录指针移到该记录。,CancelUpdate:取消尚未执行的数据更新操作。,Clone:创建原始Recordset对象的一个副本。,Close:关闭当前Recordset对象。,8.2 DAO对象ValidationText:在键入到某个,40,8.2 DAO对象,CopyQueryDef:建立Recordset对象所基于的QueryDef的拷贝。,Delete:在可更新的Recordset对象中删除当前记录。,Edit:把一个可更新的Recordset对象的当前记录拷贝到拷贝缓冲区(Copy Buffer),以便于编辑,即设置为编辑状态。一般和Update方法配合使用。先将Recordset对象设为编辑状态,然后对数据进行修改,最后用Update方法将修改更新到数据库中,FindFirst、FindLast、FindPrevious、FindNext:按Recordset对象的索引和排序顺序,查找满足约束条件的第一条记录、最后一条记录、上一条记录、下一条记录。,8.2 DAO对象CopyQueryDef:建立Record,41,8.2 DAO对象,Move:将记录指针移动到指定位置。,MoveFirst、MoveLast、MovePrevious、 MoveNext:移动到指定 Recordset 对象中的第一个、最后一个、上一个或下一个记录并使该记录成为当前记录。,OpenRecordset:创建一个新的Recordset对象,并将它添加到Recordsets集合中。,Requery:通过重新执行Recordset对象所基于的查询更新该Recordset对象的数据。,8.2 DAO对象Move:将记录指针移动到指定位置。,42,8.2 DAO对象,Seek:按Recordset对象的索引和排序顺序,将记录指针移动到满足约束条件的第一条记录。,Update:进入编辑方式后,必须要使用Update才能确定写入数据,写入后退出编辑方式。,8.2 DAO对象Seek:按Recordset对象的索引和,43,8.2 DAO对象,QueryDef对象,QueryDef对象是Microsoft Jet数据库中一个查询的存储定义(stored definition)或ODBC direct workspace中一个查询的临时定义(temporary definition)。它是数据库的永久性对象,存放在磁盘文件中。,图8.8 QueryDef对象的层次结构图,8.2 DAO对象QueryDef对象图8.8 QueryD,44,8.2 DAO对象,QueryDef对象的属性,LastUpdated:最后一次将QueryDef的改变更新到数据库的日期和时间。,Name:QueryDef对象的名称。它可以和数据库中查询的名称不一致。,RecordsAffected:受最近调用的方法影响的记录数。,Replicable:设置或返回一个值决定QueryDef对象是否可以复制。,8.2 DAO对象QueryDef对象的属性,45,8.2 DAO对象,SQL:定义查询的SQL语句。可以通过修改SQL语句更改查询。如,可以通过修改SQL中WHERE子句改变约束条件,再进行查询。,Type:设置或返回一个值表明QueryDef对象的类型。,Updatable:返回一个值表明QueryDef对象是否可以更新。,8.2 DAO对象SQL:定义查询的SQL语句。可以通过修改,46,8.2 DAO对象,QueryDef对象的方法,Close:关闭一个打开的QueryDef对象。,CreateProperty:为QueryDef对象创建一个用户定义的属性。,Execute:运行一个动作查询或执行一个SQL语句。,OpenRecordset:创建一个新的Recordset对象并将它添加到Recordsets集合中。,8.2 DAO对象QueryDef对象的方法,47,8.2 DAO对象,图8.9 Field集合和对象,8.2 DAO对象图8.9 Field集合和对象,48,8.2 DAO对象,Field对象,Field对象的属性,AllowZeroLength:设置或返回一个值表明零长度的字符串对于某Field对象的Value属性是否有效。可取True或False值。,Attributes:设置或返回一个值表明Field对象的一个或多个特性。,CollatingOrder:返回一个值说明用于字符串比较或排序的文本顺序。,DataUpdatable:返回一个值表明Field对象里的数据是否可以更新。,8.2 DAO对象 Field对象,49,8.2 DAO对象,DefaultValue:设置或返回一个Field对象缺省值。,Name:用户定义的Field对象名称。,OrdinalPosition:Fields集合中Field对象的相对位置。,Required:Field对象是否要求非空值。,Size:用字节表示的Field对象的最大值。,SourceTable:Field对象数据来源的原始表名。,8.2 DAO对象DefaultValue:设置或返回一个F,50,8.2 DAO对象,Type:Field对象的数据类型。,ValidateOnSet:当Field对象的Value属性设置时,该Field对象的值是否立即有效。,ValidationRule:在一个字段被修改或添加到一个表中时,返回或设置用来使该字段中数据生效的值。,ValidationText:在键入到某个字段对象中的值不满足有效性规则时,应用程序所显示的提示性信息。,Value:以Type属性指定的数据类型赋给Field对象的值。,8.2 DAO对象Type:Field对象的数据类型。,51,8.2 DAO对象,Field对象的方法,AppendChunk:给OLE对象或备注(memo)Field对象添加一个字符串。,CreateProperty:为Field对象创建一个新的用户定义的属性。,GetChunk:一个Recordset对象中的Fields集合中的备注对象或OLE对象中的一部分或全部内容。,8.2 DAO对象Field对象的方法,52,8.3 DAO编程实例,本节通过对TuiMag.mdb数据库StuInfo表的访问实例,来讲解DAO访问数据库的一般步骤:,(1)在集成开发环境中,新建一个工程,将工程的命名为DAOexample,并以DAOexample.vbp保存。,(2)在Form1窗体上,按图8.10所示添加8个标签控件,将它们的Caption属性分别设置为:学号、姓名、出生日期、所在班级、来源、联系电话、备注,并左对齐,垂直方向相同间距;再添加1个文本框,并命名为txtFd,然后复制该文本框并粘贴为控件数组,共生成文本框8个,分别对应于学号、姓名、出生日期、所在班级、来源、联系电话、备注。,8.3 DAO编程实例本节通过对TuiMag.mdb数据库S,53,8.3 DAO编程实例,图8.10 Form1窗体及其上的控件,(3)在窗体上创建简单菜单:“文件”(菜单名为mnuFile),它有一个菜单项“退出”(菜单项名为mnuExit);“数据”(菜单名为mnuData),它也只有一个菜单项“保存记录”(菜单项名为mnuDataSave)。,8.3 DAO编程实例图8.10 Form1窗体及其上的控件,54,8.3 DAO编程实例,(4)为工程添加一个类模块,命名为cStudent,并以cStudent.cls为名保存。,(5)将下面的代码添到cStudent模块的声明段。,Option Explicit,Private mdb As Database,Private mrs As Recordset,Private mblnIsDirty As Boolean,Private mrsStuID, mrsStuName, mrsStuSex, mrsStuClass, mrsStuFrom, mrsStuTel As String,Private mrsStuBirthDate As Date,8.3 DAO编程实例(4)为工程添加一个类模块,命名为cS,55,8.3 DAO编程实例,定义Move方法的常数,Public Enum rsMove,FirstRecord = 1,LastRecord = 2,NextRecord = 3,PreviousRecord = 4,End Enum,定义Error常数,Public Enum mError,ErrInvalidMoveType = vbObjectError + 1000 + 11,ErrNoRecords = vbObjectError + 1000 + 12,End Enum,8.3 DAO编程实例定义Move方法的常数,56,8.3 DAO编程实例,(6)将下列代码添加到cStudent模块中的Class_Initialize事件和 Class_Terminate 事件过程中。,Private Sub Class_Initialize(),打开指定的数据库,Dim strDBName As String,Set mdb = DBEngine.Workspaces(0).OpenDatabase(n:TuiMag97.mdb),打开记录集对象,Set mrs = mdb.OpenRecordset(StuInfo, dbOpenDynaset, dbSeeChanges, dbOptimistic),如果记录集中没有记录,提示错误信息,If mrs.BOF Then,RaiseClassError ErrNoRecords,End If,8.3 DAO编程实例(6)将下列代码添加到cStudent,57,8.3 DAO编程实例,取首记录,GetCurrentRecord,End Sub,Private Sub Class_Terminate(),关闭记录集对象并释放相应的资源,mrs.Close,Set mrs = Nothing,关闭数据库对象并释放相应的资源,mdb.Close,Set mdb = Nothing,End Sub,上述代码中,Class_Initialize事件用于打开数据库和创建一个Recordset对象, Class_Terminate事件用于Class_Initialize关闭事件打开的变量。,8.3 DAO编程实例取首记录,58,8.3 DAO编程实例,(7)在cStudent模块中添加一个私有的RaiseClassError方法,该方法用于显示由类模块触发的错误的描述和资源属性。,Private Sub RaiseClassError(lngErrorNumber As mError),Dim strDescription As String,Dim strSource As String,描述错误原因,Select Case lngErrorNumber,Case ErrInvalidMoveType,strDescription = 非法移动操作!,Case ErrNoRecords,strDescription = 表中没有记录!,Case Else,strDescription = 无法确定的错误!,End Select,8.3 DAO编程实例(7)在cStudent模块中添加一个,59,8.3 DAO编程实例,创建错误产生的资源属性,strSource = App.EXEName & .Class1,显示错误信息,Err.Raise lngErrorNumber, strSource, strDescription,End Sub,(8)在cStudent模块中添加一个 GetCurrentRecord方法,该方法用于从Recordset对象中取得数据并且将这些数据赋值组模块级私有变量,以供Property过程使用。,Private Sub GetCurrentRecord(),8.3 DAO编程实例创建错误产生的资源属性,60,8.3 DAO编程实例,取得记录集中当前记录中各个字段值,mrsStuID = mrs!StuID,mrsStuName = mrs!StuName,mrsStuSex = mrs!StuSex,mrsStuBirthDate = mrs!StuBirthDate,mrsStuClass = mrs!StuClass,mrsStuFrom = mrs!StuFrom,mrsStuTel = mrs!StuTel,End Sub,8.3 DAO编程实例取得记录集中当前记录中各个字段值,61,8.3 DAO编程实例,(9)在cStudent模块中添加一个私有的UpdateRecord事件过程,用于将模块级私有变量的值写到Recordset对象中。,Private Sub UpdateRecord(),DAO编辑/修改,On Error GoTo ProcError,开始编辑,mrs.Edit,mrs!StuID = mrsStuID,mrs!StuName = mrsStuName,mrs!StuSex = mrsStuSex,mrs!StuBirthDate = mrsStuBirthDate,mrs!StuClass = mrsStuClass,mrs!StuFrom = mrsStuFrom,mrs!StuTel = mrsStuTel,提交修改,mrs.Update,清除标记,mblnIsDirty = False,Exit Sub,ProcError:,清除使用Edit方法所作的修改,mrs.MovePrevious,mrs.MoveNext,Err.Raise Err.Number, Err.Source, Err.Description, Err.HelpFile, Err.HelpContext,End Sub,8.3 DAO编程实例(9)在cStudent模块中添加一个,62,8.3 DAO编程实例,(10)在类模块中添加有关mStuID、mStuName、mStuSex、mStuBirthDate、mStuClass、mStuFrom和mStuTel共7个模块级变量的Property Get过程和Property Let过程。,Public Property Get mStuID() As String,mStuID = mrsStuID,End Property,Public Property Let mStuID(strStuID As String),mrsStuID = strStuID,设置mblnIsDirty标记,mblnIsDirty = True,End Property,Public Property Get mStuName() As String,mStuName = mrsStuName,End Property,Public Property Let mStuName(strStuName As String),mrsStuName = strStuName,设置mblnIsDirty标记,mblnIsDirty = True,End Property,8.3 DAO编程实例(10)在类模块中添加有关mStuID,63,8.3 DAO编程实例,Public Property Get mStuSex() As String,mStuSex = mrsStuSex,End Property,Public Property Let mStuSex(strStuSex As String),mrsStuSex = strStuSex,设置mblnIsDirty标记,mblnIsDirty = True,End Property,Public Property Get mStuBirthDate() As String,mStuBirthDate = mrsStuBirthDate,End Property,Public Property Let mStuBirthDate(strStuBirthDate As String),mrsStuBirthDate = strStuBirthDate,设置mblnIsDirty标记,mblnIsDirty = True,End Property,Public Property Get mStuClass() As String,mStuClass = mrsStuClass,End Property,8.3 DAO编程实例Public Property Get,64,8.3 DAO编程实例,Public Property Let mStuClass(strStuClass As String),mrsStuClass = strStuClass,设置mblnIsDirty标记,mblnIsDirty = True,End Property,Public Property Get mStuFrom() As String,mStuFrom = mrsStuFrom,End Property,Public Property Let mStuFrom(strStuFrom As String),mrsStuFrom = strStuFrom,设置mblnIsDirty标记,mblnIsDirty = True,End Property,Public Property Get mStuTel() As String,mStuTel = mrsStuTel,End Property,Public Property Let mStuTel(strStuTel As String),mrsStuTel = strStuTel,8.3 DAO编程实例Public Property Let,65,8.3 DAO编程实例,设置mblnIsDirty标记,mblnIsDirty = True,End Property,上述代码中,Property Get过程用于对模块级变量赋新值并重新设置修改标记,Property Let过程用于取得模块级变量的值。,8.3 DAO编程实例设置mblnIsDirty标记,66,8.3 DAO编程实例,(11)在类模块中添加IsDirty变量的Property Get事件过程,它用于返回当前mblnIsDirty标记的值。,Public Property Get IsDirty() As Boolean,取得标记值,IsDirty = mblnIsDirty,End Property,(12)在类模块中添加Move方法,用于根据lngMoveType参数移动记录指针,其中lngMoveType参数的值由类模块语句声明部分的结构决定。,Public Sub Move(lngMoveType As rsMove),移动并刷新属性值,Select Case lngMoveType,Case FirstRecord,mrs.MoveFirst,Case LastRecord,mrs.MoveLast,Case NextRecord,mrs.MoveNext,8.3 DAO编程实例(11)在类模块中添加IsDirty变,67,8.3 DAO编程实例,如果EOF属性值为真,移至最后一条记录,If mrs.EOF Then mrs.MoveLast,Case PreviousRecord,如果BOF属性值为真,移至第一条记录,mrs.MovePrevious,If mrs.BOF Then mrs.MoveFirst,Case Else,参数不对,显示出错信息,RaiseClassError ErrInvalidMoveType,End Select,GetCurrentRecord,End Sub,8.3 DAO编程实例如果EOF属性值为真,移至最后一条记,68,8.3 DAO编程实例,(13)在类模块中添加SaveRecord方法,用于测试mblnIsDirty标记的值以及判断是否需要更新当前记录。,Public Sub SaveRecord(),保存当前修改,测试标志,If mblnIsDirty Then,更新当前记录的值,UpdateRecord,Else,不需要更新记录,End If,End Sub,8.3 DAO编程实例(13)在类模块中添加SaveReco,69,8.3 DAO编程实例,(14)在窗体frmDAOexample的声明部分添加如下代码,用于创建一个cStudent类型的变量,另外还定义一些控件数据的常数和状态标志常数。,Option Explicit,Private mStudent As cStudent,定义四个命令按钮的常数,Const cmdMoveFirst = 0,Const cmdMovePrevious = 1,Const cmdMoveNext = 2,Const cmdMoveLast = 3,定义窗体中文本框的索引常数,Const txtStuID = 0,Const txtStuName = 1,Const txtStuSex = 2,Const txtStuBirthDate = 3,Const txtStuClass = 4,Const txtStuFrom = 5,Const txtStuTel = 6,Const txtStuMem = 7,刷新标记,Private mblnInRefresh As Boolean,8.3 DAO编程实例(14)在窗体frmDAOexampl,70,8.3 DAO编程实例,(15)在窗体frmDAOexample的Form_Load事件过程添加如下代码,用于创建一个cStudent类对象和装载第一条记录,并含有出现处理程序段,如果出现错误的话,显示错误信息并终止应用程序的运行。,Private Sub Form_Load(),创建cStudent对象并且显示首记录的数据,On Error GoTo ProcError,Dim strDBName As String,Screen.MousePointer = vbHourglass,创建mStudent对象,Set mStudent = New cStudent,显示首记录的数据,GetData,ProcExit:,Screen.MousePointer = vbDefault,Exit Sub,ProcError:,如果出错的话,显示出错信息,MsgBox Err.Description,Unload Me,Resume ProcExit,End Sub,8.3 DAO编程实例(15)在窗体frmDAOexampl,71,8.3 DAO编程实例,(16)在窗体frmDAOexample的Form_ QueryUnload事件过程添加如下代码,用于在卸载窗体时保存当前记录的数据,如果出现错误的话,提示用户是否继续运行应用程序。,Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer),On Error GoTo ProcError,Screen.MousePointer = vbHourglass,保存当前记录,mStudent.SaveRecord,ProcExit:,Screen.MousePointer = vbDefault,Exit Sub,ProcError:,出现错误,无法保存记录,提示用户是否继续执行应用程序,Dim strMsg As String,strMsg = 保存过程出现如下错误:,strMsg = strMsg & vbCrLf & Err.Description & vbCrLf,strMsg = strMsg & 如果继续进行操作,修改的数据将丢失! & vbCrLf,8.3 DAO编程实例(16)在窗体frmDAOexampl,72,8.3 DAO编程实例,strMsg = strMsg & 是否继续执行应用程序?,If MsgBox(strMsg, vbQuestion Or vbYesNo Or vbDefaultButton2) = vbNo Then,Cancel = True,End If,Resume ProExit,End Sub,8.3 DAO编程实例strMsg = strMsg & ,73,8.3 DAO编程实例,(17)在窗体frmDAOexample的cmdMove_Click事件过程中添加如下代码,用于保存当前的记录,并且根据mStudent对象的索引移动记录指针,然后刷新窗体。,Private Sub cmdMove_Click(Index As Integer),On Error GoTo ProcError,Screen.MousePointer = vbHourglass,保存当前记录,mStudent.SaveRecord,根据索引参数移动当前记录指针,Select Case Index,Case cmdMoveFirst,mStudent.Move FirstRecord,Case cmdMoveLast,mStudent.Move LastRecord,Case cmdMoveNext,mStudent.Move NextRecord,Case cmdMovePrevious,mStudent.Move PreviousRecord,End Select,8.3 DAO编程实例(17)在窗体frmDAOexampl,74,8.3 DAO编程实例,刷新窗体上的数据记录,GetData,ProcExit:,Screen.MousePointer = vbDefault,Exit Sub,ProcError:,如果出错的话,显示出错信息,MsgBox Err.Description, vbExclamation,Unload Me,Resume ProcExit,End Sub,8.3 DAO编程实例刷新窗体上的数据记录,75,8.3 DAO编程实例,(18)在窗体fr
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > PPT模板库


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!