VB数据库分页显示记录实例
- 格式:doc
- 大小:48.50 KB
- 文档页数:6
VB主要处理的是MDB格式的数据库,但就在这⽅⾯,它就偏偏出了差错,先看看下例:Dim db As DatabaseDim rs As RecordsetSet db = OpenDatabase(App.Path & "\zzr.mdb")Set rs = db.OpenRecordset("test")Debug.Print rs.RecordCount 此例假设在应⽤程序⽬录下有⼀个名为"zzr.mdb"的数据库,⽽且它⾥边有⼀个名为"test"的表,此程序的⽬的就是求出该表中的记录的总数。
此处⽤到的是"表"对象的RecordCount属性,这样⽤在⼀般性况下是正确的,但并不能保证在所有的情况下都能得出正确的结果,⽐如说表中的数据量很⼤,或者是数据库受到过什么损害等等。
如果碰到这种情况,我们可以换⼀个⾓度来处理。
请看下⾯的程序: Dim db As DatabaseDim rs As RecordsetDim Num As LongSet db = OpenDatabase(App.Path & "\zzr.mdb")Set rs = db.OpenRecordset("test")Num = 0rs.MoveFirstDo While Not rs.EOF()Num = Num + 1rs.MoveNextLoopDebug.Print Num 这样,最后得到的Num即为正解结果,这种⽅法的思路是从表的开始处⼀直顺序⾛到结尾,就可以"数"出表中到底有多少条记录。
这种⽅法看起来很笨,但是它却是⼀个相当准确的⽅法,⼤家不防可以试⼀下。
再看笔者的说法: 先看上⾯⼀⾏程序:Debug.Print rs.RecordCount,VB5在读取数据表时并⾮⼀次性将全部记录均读⼊内存(想想看如果有⼀个表,⾥⾯有⼀百万个记录甚⾄⼀亿个或更多,要想全部读⼊内存,你的机器能承受得了吗?),只是先读⼊⼀部分(在下认为这是VB的优异这处),recordset对象并⾮表的全部记录,只是已读⼊内存的部分,故⽤rs.recordcount得到的不是表的记录总数。
使用ADO编程模型需添加ADO对象类库的“引用”----“Microsoft ActiveX Data Objects 2.x Library”ADO之VB数据库操作主要包括读、写、修改及删除等操作,不论是进行什么数据库操作都必须首先连接到数据库。
一、连接到数据库1、连接到SQL数据库:通过ADO的Connection对象可实现VB与SQL数据库的连接。
一般方法如下:Dim cnn As New ADODB.Connection …创建Connection对象cnn,关键字new用于创建新对象cnn.ConnectionString = "Provider=SQLOLEDB.1;Password=密码;User ID=用户名;Initial Catalog=SQL数据库文件;Data Source= localhost;" '指定提供者,设置数据源cnn.Open …打开到数据库的连接……..cnn.Close …关闭到数据库的连接或者:Dim cnn As New ADODB.Connection …创建Connection对象cnn,关键字new用于创建新对象cnn.Open "Provider=SQLOLEDB.1;Password=密码;User ID=用户名;Initial Catalog=SQL数据库文件;Data Source= localhost;" …打开到数据库的连接……..cnn.Close …关闭到数据库的连接2、连接到ACCESS数据库:通过ADO的Connection对象可实现VB与ACCESS数据库的连接。
一般方法如下:Dim cnn As New ADODB.Connection …创建Connection对象cnn,关键字new用于创建新对象cnn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=ACCESS数据库文件.MDB" '指定提供者,设置数据源cnn.Open …打开到数据库的连接……..cnn.Close …关闭到数据库的连接或者:Dim cnn As New ADODB.Connection …创建Connection对象cnn,关键字new用于创建新对象cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=ACCESS数据库文件.MDB" …打开到数据库的连接……..cnn.Close …关闭到数据库的连接二、读数据库操作读数据库操作一般可通过recordset对象实现。
vbnet数据库编程例子是一种用于开发Windows应用程序的编程语言,它具有强大的数据库编程能力。
下面将列举10个数据库编程的例子,以帮助读者更好地理解和掌握数据库编程的技巧。
1. 连接数据库并查询数据提供了多种连接数据库的方式,可以使用来连接各种类型的数据库,如SQL Server、MySQL等。
通过使用连接字符串,可以轻松地连接到数据库,并执行SQL查询语句来检索数据。
2. 插入数据使用可以通过执行INSERT语句将数据插入数据库表中。
可以通过构建SQL INSERT语句,并使用的Command对象来执行该语句。
3. 更新数据通过执行UPDATE语句,可以使用更新数据库表中的数据。
可以根据需要构建SQL UPDATE语句,并使用Command对象执行该语句。
4. 删除数据使用可以执行DELETE语句来删除数据库表中的数据。
可以构建SQL DELETE语句,并使用Command对象执行该语句。
5. 使用事务使用可以创建事务来确保数据库操作的原子性。
可以使用Transaction对象来开始、提交或回滚事务。
6. 使用参数化查询为了提高数据库查询的安全性和性能,可以使用参数化查询。
提供了SqlParameter类来创建参数,并将其与SQL查询语句一起使用。
7. 使用存储过程存储过程是在数据库中预定义的一组SQL语句。
使用可以调用存储过程并传递参数,以执行一系列数据库操作。
8. 使用数据适配器填充数据集数据适配器是连接数据源和数据集的桥梁。
使用可以创建数据适配器,并使用Fill方法将数据库中的数据填充到数据集中。
9. 使用数据绑定显示数据数据绑定是将数据与用户界面进行关联的一种技术。
使用可以将数据集中的数据绑定到各种控件上,以显示数据库中的数据。
10. 处理数据库异常在数据库编程中,可能会出现各种异常情况,如连接失败、查询出错等。
使用可以通过使用Try-Catch块来捕获和处理这些异常,以保证程序的健壮性。
VB编程实例4(单个数据库表应用程序) 1.打开工程vblx,添加一个窗口Form1,修改Form1的属性,名称(Nam e)为:fxs,Caption(窗口标题)为: 学生档案,保存在你的目录下.在fm ain中添加水平菜单(m3):数据库,添加下拉菜单(m31): 学生档案,其单击代码为:fxs.Show 2.准备好access数据库xs.m db,有两个表xs,cj,在数据源中添加系统DSN,选择驱动程序为Microsoft Access Driver,名称为lx,数据库指向你的xs.m db 添加ADO部件(Mi crosoft ADO Data Control 6.0)和DataGrid 部件(Microsoft DataGrid Control 6.0). 3.在窗体上放一个框架Fram e1,去掉Caption,设BorderStyle为0-None,在Fram e1上放一个Fram e2, 去掉Caption,设BorderStyle为0-None,在Fram e2上放置Adodc1,设其ConnectionString属性为DNS=lx, RecordSource的命令类型为2-adCm dTable,表名为xs,在Fram e2上放置命令按钮数组Comm and1(0~3),Caption分别为:添加,保存,删除,关闭在Fram e1上放一个Fram e3,去掉Caption,在Fram e3上放置标签数组zdm(0~7),设置字体,颜色, Caption分别为序号,登录名,姓名,性别,生日,电子邮件,电话,住址,放置文本框数组zdz(0~7), DataSource为Adodc1,DataField分别为xh,dlm,xm,xb,sr,eml,dh,dz 4.在窗体上放一个DataGrid1,设其DataSource为Adodc1,右击DataGrid1选择检索字段, 再右击调出属性页,在通用页设置允许添加,删除,更新,在列页设置各列的标题分别为: 序号,登录名,姓名,性别,生日,电子邮件,电话,住址,在布局页设置各列的宽和对齐方式5.响应Form的Load事件,添加如下代码: Left = (Screen.Width - Width) \ 2 Top = (Screen.Height - Height) \ 2'窗口居中 Fram e1.Left = 0: Fram e1.Top = 0 Fram e1.Width = ScaleWidth Fram e1.Height = ScaleHeight / 4 Fram e2.Left = (ScaleWidth -Fram e2.Width) \ 2 Fram e3.Left = (ScaleWidth - Fram e3.Width) \ 2 DataGrid1.Top = ScaleHeight / 4: DataGrid1.Left = 0 DataGrid1.Width = ScaleWidth DataGrid1.Height = ScaleHeight * 3 / 4 Adodc1.Refresh 响应Form的Resize事件,添加如下代码: If WindowState = 1 Then Exit Sub'最小化时不执行代码If WindowState = 0 Then Left = (Screen.Width - Width) \ 2 Top = (Screen.Height - Height) \ 2'正常窗口居中End If Fram e1.Left = 0: Fram e1.Top = 0 Fram e1.Width = ScaleWidth Fram e1.Height = ScaleHeight / 4 Fram e2.Left = (ScaleWidth - Fram e2.Width) \ 2 Fram e3.Left = (ScaleWidth - Fram e3.Width) \ 2 DataGrid1.Top = ScaleHeight / 4: DataGrid1.Left = 0 DataGrid1.Width = ScaleWidth DataGrid1.Height = ScaleHeight * 3 / 4 响应Form的Unload事件,添加如下代码: Adodc1.Recordset.Close 响应Comm and1的Click事件Select Case Index Case 0 Adodc1.Recordset.AddNew Case 1 Adodc1.Recordset.Update Case 2 Adodc1.Recordset.Delete Case 3 Unload fxs End Select。
VB数据库编程技术一ODBC概述在传统的数据库管理系统中,每个数据库管理系统都有自己的应用程序开发接口(API),为了解决此问题,微软公司开发了ODBC(Open DataBase Connectivity,即开放数据库互连)。
ODBC 是一套开放数据库系统应用程序接口规范,目前它已成为一种工业标准,它提供了统一的数据库应用编程接口(API),为应用程序提供了一套高层调用接口规范和基于动态连接库的运行支持环境。
使用ODBC开发数据库应用时,应用程序调用的是标准的ODBC函数和SQL语句,屏蔽了DBMS之间的差异,数据库底层操作由各个数据库的驱动程序完成。
因此应用程序有很好的适应性和可移植性,并且具备了同时访问多种数据库管理系统的能力,从而彻底克服了传统数据库应用程序的缺陷。
主要任务包括:建立与数据源的连接;向数据源发送SQL请求;断开与数据源的连接数据源数据源是指任一种可以通过ODBC连接的数据库管理系统,它包括要访问的数据库和数据库的运行平台。
数据源名掩盖了数据库服务器或数据库文件间的差别,通过定义多个数据源,每个数据源指向一个服务器名,就可在应用程序中实现同时访问多个DBMS的目的。
数据源(Data Source Name,简称DSN)是驱动程序与DBS连接的桥梁,数据源不是DBS,而是用于表达一个ODBC驱动程序和DBMS特殊连接的命名。
在连接中,用数据源名来代表用户名、服务器名、所连接的数据库名等,可以将数据源名看成是与一个具体数据库建立的连接。
数据源分为以下三类:(1)用户数据源:用户创建的数据源,称为“用户数据源”。
此时只有创建者才能使用,并且只能在所定义的机器上运行。
任何用户都不能使用其他用户创建的用户数据源。
(2)系统数据源:所有用户和在Windows NT下以服务方式运行的应用程序均可使用系统数据源。
(3)文件数据源:文件数据源是ODBC 3.0以上版本增加的一种数据源,可用于企业用户,ODBC驱动程序也安装在用户的计算机上。
vb datalist 用法关于VB 的DataList 用法VB(Visual Basic)是一种常用的编程语言,广泛应用于Windows 平台的开发。
其中,DataList 是VB 中用于显示数据列表的一种控件。
在本文中,我们将逐步回答关于VB DataList 的用法问题,并深入探讨其功能和使用方法。
什么是DataList?DataList 是VB 中的一种数据绑定控件,它允许开发人员将数据源绑定到列表中,并以特定的样式和布局显示数据。
DataList 在屏幕上显示数据的多个记录,并提供了自定义的布局和排列方式。
开发人员可以根据自己的需求,通过编写代码或使用可视化设计工具来配置DataList 控件。
DataList 的基本结构在开始使用DataList 之前,我们需要了解一下它的基本结构。
一个基本的DataList 控件通常由以下几个主要部分组成:1. Header(标题):显示在列表顶部的区域,通常用于显示整个列表的标题或其他相关信息。
2. ItemTemplate(项目模板):指定了列表中每个数据项的布局和样式。
开发人员可以在ItemTemplate 中定义用于显示数据的HTML 或相关控件。
3. SeparatorTemplate(分隔符模板):可选项,用于指定列表中数据项之间的分隔符的样式。
4. Footer(页脚):显示在列表底部的区域,通常用于显示其他相关信息或页码等。
DataList 的绑定方式DataList 支持多种数据绑定方式,包括绑定到数据源、绑定到数组、绑定到集合等。
我们可以通过以下步骤来实现数据绑定:1. 准备数据源:首先,我们需要准备一个合适的数据源,可以是数据库、XML 文件、数组或集合等。
确保数据源和DataList 控件之间的数据结构和格式匹配。
2. 引用数据源:在VB 中,我们需要设置DataList 的DataSource 属性,将数据源与控件关联起来。
VBA在数据库操作中的应用实例数据库是现代信息管理的重要工具,能够高效地存储和组织大量的数据。
在实际应用中,我们经常需要对数据库进行操作,例如插入、更新、删除、查询等。
VBA(Visual Basic for Applications)作为一种用于Microsoft Office应用程序的编程语言,具备强大的数据库操作能力。
本文将通过几个实例,介绍VBA在数据库操作中的应用。
一、连接数据库在开始进行数据库操作之前,我们需要先连接数据库。
VBA中可以使用ADODB对象来进行数据库连接。
下面的示例将演示如何连接Access数据库。
```vbaDim conn As ObjectSet conn = CreateObject("ADODB.Connection")conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\path\to\database.accdb"```上述代码中,我们首先创建了一个ADODB.Connection对象,然后通过Open方法打开了指定的数据库。
二、插入数据插入数据是数据库操作中最常见的需求之一。
接下来的示例将演示如何使用VBA在数据库中插入一条记录。
```vbaDim strSql As StringstrSql = "INSERT INTO Students (Name, Age, Grade) VALUES ('John', 18, 'A')"conn.Execute strSql```上述代码中,我们首先定义了一条插入语句,然后通过Execute方法执行该语句,即可在数据库的Students表中插入一条新的记录。
三、更新数据更新数据是修改数据库中已有记录的常见操作。
下面的示例将演示如何使用VBA更新数据库表中的记录。
数据库分页数据库分页技术1.mysql--记住mysql 中limit后是从零开始的主体格式如下:select * from tablename limit m,n--比如要查第6行到第20行select * from tablename limit 5,15右边两种写法等价: select * from table limit 10select * from table limit 0, 10 --都是查询前十行limit [m,] nm:为起始行(即从结果集的第几行开始查找),从0开始,且可以省略,即直接写limit n 这是默认从第0行开始n:为查询条数,不能为负数例子如下:select * from tablename limit 2,20表示从第2行开始,取20条数据SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offsetLIMIT 子句可以被用于强制SELECT 语句返回指定的记录数。
LIMIT 接受一个或两个数字参数。
参数必须是一个整数常量。
如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。
初始记录行的偏移量是0(而不是1):为了与PostgreSQL 兼容,MySQL 也支持句法:LIMIT # OFFSET #。
mysql> SELECT * FROM table LIMIT 5,10; // 检索记录行6-15 //为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为-1:mysql> SELECT * FROM table LIMIT 95,-1; // 检索记录行96-last.//如果只给定一个参数,它表示返回最大的记录行数目:mysql> SELECT * FROM table LIMIT 5; //检索前5 个记录行//换句话说,LIMIT n 等价于LIMIT 0,n。
vb6 select sql语句VB6中的SELECT语句用于从数据库中检索数据。
下面列举了10个符合要求的VB6 SELECT语句示例,每个示例都包含了对应的SQL语句和简要说明。
1. 查询所有记录:```vbstrSQL = "SELECT * FROM 表名"```说明:这个语句将返回表中的所有记录。
可以将“表名”替换为实际的表名。
2. 查询指定字段的记录:```vbstrSQL = "SELECT 字段1, 字段2, 字段3 FROM 表名"```说明:这个语句将返回指定字段的记录。
可以将“字段1, 字段2, 字段3”替换为实际的字段名。
3. 查询带有条件的记录:```vbstrSQL = "SELECT * FROM 表名 WHERE 条件"```说明:这个语句将返回符合指定条件的记录。
可以将“条件”替换为实际的条件表达式,如“字段名 = 值”。
4. 查询排序后的记录:```vbstrSQL = "SELECT * FROM 表名 ORDER BY 字段 ASC/DESC"```说明:这个语句将返回按指定字段升序(ASC)或降序(DESC)排序的记录。
可以将“字段”替换为实际的字段名。
5. 查询记录的部分字段:```vbstrSQL = "SELECT 字段1, 字段2 FROM 表名"```说明:这个语句将返回指定字段的记录。
可以将“字段1, 字段2”替换为实际的字段名。
6. 查询带有通配符的记录:```vbstrSQL = "SELECT * FROM 表名 WHERE 字段 LIKE '值%'"```说明:这个语句将返回以指定值开头的记录。
可以将“值”替换为实际的值。
7. 查询不重复的记录:```vbstrSQL = "SELECT DISTINCT 字段 FROM 表名"```说明:这个语句将返回指定字段的不重复的记录。
vb数据库分页显示记录实例dadaV20190503一、准备工作1、添加控件DateGrid、2个TextBox(TxtPageSize、txtPageMsg)2、打开Access(创建表:系统用户;字段:用户名,身份,口令)效果图二、原理(1)利用记录集的分页特性进行记录分页(2)使用DataGrid控件的数据绑定功能显示分页后的记录1、设计分析记录集的PageSize属性用于设置或返回一个记录也中可包含的记录个数,其默认值为10.显示当前记录页数据有两个方法;方法1:使用DataGrid控件。
DataGrid控件会显示记录集中的全部数据,所以不能直接将分页的记录集绑定到DataGrid控件,可以讲当前记录也中的记录复制到一个新的记录集中,再将其绑定到DataGrid控件,便可显示当前记录页数据;方法2:使用MSFLexGrid控件,MSFLexGrid控件可在设计时将其绑定到Data控件,在运行时,则可通过设置控件的TextMatrix属性来显示数据。
2、技术要领1)记录集的分页特性PageSize属性:设置或返回一个记录页中可包含的记录个数,其默认值为10;PageCount属性:返回一个记录集的记录页总数;AbsolutePage属性:设置或返回当前记录页编号;2)DataGrid控件DataGrid控件使用代表记录的行和列来显示数据,并允许对数据进行修改,对数据的修改可以自动保存;DataGrid控件绑定到数据源之后,可自动从数据源中获得数据。
DataGrid控件的列与数据源记录集的字段个数相同,而行数则与记录集的个数相同,DataGrid控件还可以将记录集字段名称自动显示为列的名称。
注:使用时可将DataGrid控件的DataSource属性设置为ADOData控件或Recordset对象完成数据绑定。
DataGrid控件为外部ActiveX控件,使用前需要将其添加到工程中,其部件名称为MicrosoftDataGridControl6.03)MSFlexGrid控件MSFlexGrid控件和DataGrid控件类似,都是以行列方式显示数据。
MSFlexGrid控件可在设计时将其绑定到Data控件,运行时,如果设置控件的DataSource属性则会出错。
此时可通过设置控件的TextMatrix属性来显示数据。
MSFlexGrid控件的相关属性Cols属性:设置和返回控件的列数;Rows属性:设置和返回控件的行数;TextMatrix属性:设置和返回控件任意单元格的文本内容;MSFlexGrid控件为外部ActiveX控件,使用前需要将其添加到工程中,其部件名称为MicrosoftMSFlexGridControl6.0;4)ADO常用方法Append功能:将对象追加到集合中,如果集合是fields,可以先创建field对象然后再将其追加到集合中。
格式:1、collection.appendobjectCollection:集合对象Object:对象变量,代表所要追加的对象例1:Dim objcmd as new commandDim Parm as new Parameter‘创建新的Parameter对象Set Parm=objCmd.creadParameter(“用户名”,adVarChar,adParamInput,10)‘将Parm追加到Parameters集合中Objcmd.Parameters.append Parm格式:2、fields.Appendname,type,definedsize,attribName:字符串,新field对象名称,不得与fields中的任何其它对象同名;Type:新字段的数据类型,其默认值为adEmpty;Definedsize:可选,指示新字段定义大小,默认definedsize未指定;Attrib:可选,指定新字段属性,默认值adflddefault;注:1.在调用fields.append方法前没设置cursorlocation属性,当使用open方法打开recordset时,cursorlocation 将被自动设置为aduseclient。
2.对打开的recordset或已设置actionconnection属性的recordset,调用fields.append方法将引发运行时错误。
例2:Dim objDataSource as new recordsetDim obiRs as new recordsetDim intrecord as integerFor intrecord=0 to objRs.fields.count-1objDataSource.fields.append objRs.fields(intrecord).name,adVarChar,_objRs.fields(intrecord).definedSizeNext ‘将记录集的数据都追加到临时记录集的三、操作过程‘具体代码如下(直接复制可运行):Dim objRs As New Recordset, objCn As New Connection, intPage As Integer'定义一个过程用于显示当前记录页数据。
将当前记录页数据复制到一个新的RecordSet对象中,然后将其绑定到DataGrid控件,从而显示当前记录页数据。
Public Sub ShowData(ByVal intPage As Integer)'实现分页显示记录功能Dim intPageCount As Integer, intRecord As IntegerDim objDataSource As New Recordset'创建一个局部RecordSet对象保存objrs当前记录页的数据For intRecord = 0 To objRs.Fields.Count - 1objDataSource.Fields.Append objRs.Fields(intRecord).Name, adVarChar,objRs.Fields(intRecord).DefinedSizeNextobjDataSource.OpenobjRs.PageSize = Val(TxtPageSize) '重新设置objrs每页显示的记录条数objRs.AbsolutePage = intPage '重新设置objrs的当前记录页For intRecord = 1 To objRs.PageSize '将当前记录页中的数据写入objDataSourceobjDataSource.AddNewobjDataSource!用户名= objRs!用户名'作用:获得Field(字段)对象的值;讲解:Recordset对象由记录和列(字段)组成;rs("FieldName")与rs!fieldname与rs.fieldname("fieldname").value效果一样;objDataSource!口令= objRs!口令objDataSource!身份= objRs!身份objRs.MoveNextIf objRs.EOF Then Exit ForNextSet DataGrid1.DataSource = objDataSourcetxtPageMsg = intPage & "/" & objRs.PageCount '刷新当期记录页的信息NumberPage.Text = intPageTotalPage.Text = objRs.PageCountEnd SubPrivate Sub cmdNext_Click()If intPage <> objRs.PageCount ThenintPage = intPage + 1ShowData (intPage)End IfEnd SubPrivate Sub cmdPre_Click()If intPage <> 1 Then '如果当前页编号不为1,则向前切换intPage = intPage - 1ShowData (intPage)End IfEnd SubPrivate Sub Form_Load()Dim strSQL As String, strCn As String'TxtPageSize = Text1.TextTxtPageSize = "5" '设置记录页大小和当前记录页的初始值intPage = 1'建立数据库连接strCn = "provider=microsoft.jet.oledb.4.0;persist security info=false;" & _"data source=" & "D:\用户目录\我的文档\数据库\Student.mdb"objCn.ConnectionString = strCnobjCn.OpenWith objRs '创建客户端的记录集.CursorLocation = adUseClient.CursorType = adOpenStatic.Open " 系统用户", objCn, adOpenStatic, adLockReadOnlyEnd WithShowData (intPage) '显示当前记录页数据End SubPrivate Sub TxtPageSize_KeyPress(KeyAscii As Integer)Dim bok As BooleanIf KeyAscii = vbKeyReturn And Trim(TxtPageSize) <> "" Then'如果按的是回车键,并记录页大小不是空,则刷新当前记录intPage = 1ShowData (intPage)ElseIf KeyAscii >= Asc("0") And KeyAscii <= ("9") Then'检查当前记录的记录页大小是否在有效范围之内bok = Val(TxtPageSize & Chr(KeyAscii)) < 1 Or Val(TxtPageSize & Chr(KeyAscii)) > 10 If bok Then '如果输入超出范围,则显示相应的提示信息MsgBox "每页显示记录范围为[1,10]"KeyAscii = 0 '设置keyascii为0取消当前输入数字End IfEnd IfEnd SubPublic Sub Form_unload(cancle As Integer)objCn.CloseSet objCn = NothingSet objRs = NothingEnd Sub。