首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

Dim objRs as new RecordSet跟Dim objRs as RecordSet的比较

2012-08-02 
Dim objRs as new RecordSet和Dim objRs as RecordSet的比较敲实例4遇到问题的思考,多一个new大有学问。在

Dim objRs as new RecordSet和Dim objRs as RecordSet的比较

     敲实例4遇到问题的思考,多一个new大有学问。

在内存中分配空间的时间和实例化的时间不同:

      对于Dim objRs as new RecordSet,当第一次使用objRs的时候,才在内存中分配空间和实例化。

    对于Dim objRs as RecordSet,声明objRs为RecordSet类类型变量,和声明普通变量一样,此时已经在内存中分配存储空间了。当使用Set objRs=new RecordSet时,才被实例化。

虽然这两种定义方式,在分配空间和实例化的时间上不同,但是有时却不影响结果;然而有时也会相差甚远。

    结果相同的情况:

    通常在窗体的通用声明段Dim objRs as new RecordSet,这和在窗体的通用声明段用Dim objRs as RecordSet,并且在Form_Load事件中用Set objRs=new RecordSet,得到的记录集以及之后对记录集做相应的处理,结果都是相同的。

Dim objRs As New Recordset, objCn As New Connection, intPage As Integer

    

Dim objRs As Recordset
 
 
Private Sub Form_Load()'在窗体事件中实例化objRsSet objRs=New Recordset


 

    当在Click事件中,操作objRs,结果都是相同的(假设objRs是已经打开的游标)

'使当前记录的位置为下一条记录的位置Private Sub cmdNext_Click()    objRs.MoveNext  If objRs.EOF Then objRs.MoveLastEnd Sub


结果不同的情况:

当Set objRs=new RecordSet这条语句放在允许被重复调用的过程中时,结果就会相差甚远。

 Dim objDataSource As New Recordset

定义在窗体各事件过程中使用的公用变量

 

Set objRs=new RecordSet出现在下面这个过程中,这个过程作用是把objRs(假设objRs是打开的记录集)的当前页写入objDataSource这个对象中,以便在DataGrid中显示。

Public Sub ShowData(ByVal intPage As Integer)    '实现分页显示记录功能    Dim intPageCount As Integer, intRecord As Integer    Dim objDataSource As New Recordset    '创建一个局部Recordset对象保存objRs当前记录页数据    For intRecord = 0 To objRs.Fields.Count - 1        objDataSource.Fields.Append objRs.Fields(intRecord).Name, _                                    adVarChar, _                                    objRs.Fields(intRecord).DefinedSize    Next    objDataSource.Open                  '打开局部Recordset对象    objRs.PageSize = Val(txtPageSize)   '重新设置objRs每页显示的记录条数    objRs.AbsolutePage = intPage        '重新设置objRs的当前记录页    For intRecord = 1 To objRs.PageSize '将objRs当前记录页中数据写入objDataSource        objDataSource.AddNew        objDataSource!用户名 = objRs!用户名        objDataSource!口令 = objRs!口令        objDataSource!身份 = objRs!身份        objRs.MoveNext        If objRs.EOF Then Exit For    Next    Set DataGrid1.DataSource = objDataSource '将objDataSource设置为数据网格的数据源    txtPageMsg = intPage & "/" & objRs.PageCount '刷新当前记录页信息End Sub

 

 每执行一次这个过程,Set objRs=new RecordSet就产生一个对象,当再次执行这个过程时,又会新产生一个对象,并且把原有的对象覆盖掉。如果把这条语句换成在窗体通用声明段的Dim objRs as new RecordSet,则第二次调用这个过程时,就出错Dim objRs as new RecordSet跟Dim objRs as RecordSet的比较,因为始终用的是一个对象。

5楼lfmilaoshi昨天 10:20
图。。。怎么回事?。。。米老师
Re: lishehe昨天 21:16
回复lfmilaoshin改正了,谢谢米老师
4楼liutengteng1303天前 17:16
及时总结,很不错。
Re: lishehe3天前 17:16
回复liutengteng130n呵呵,努力ing
3楼linlin802306193天前 17:08
发现力呀,哈哈~~~
Re: lishehe3天前 17:12
回复linlin80230619n嘿嘿
2楼wangyongxia9213天前 23:40
顶起!
Re: lishehe3天前 11:13
回复wangyongxia921n哈哈
1楼lantingxv_jing3天前 20:25
不错,加油!你们的进度好快啊。。。。佩服
Re: lishehe3天前 21:26
回复lantingxv_jingn慢慢来,注重质量,呵呵,加油

热点排行