我想实现数据集的添加,实现多次查询出的数据在datagrid中显示,我试过各种方法,总是出现各种错误,无法实现,请各位大侠多多指点!
代码如下:
Private Sub Command2_Click()
    Dim cnn As New ADODB.Connection
    Dim rst As New ADODB.Recordset
    cnn.CursorLocation = adUseClient
    'cnn.Open "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=XSCJ"
    '设置连接字符串ConnectionString属性
    cnn.ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=XSCJ"
    '打开到数据库的连接
    cnn.Open    Set rst = cnn.Execute("select * from yuanliaobiao where ylnumber='" & Trim(Text1.Text) & "'or ylname='" & Trim(Text2.Text) & "'or pynumber='" & Trim(Text3.Text) & "'")
    rst.ActiveConnection = Nothing 
    cnn.Close                      
    Set DataGrid1.DataSource = rst     
    Dim rst1 As New ADODB.Recordset 
    rst1.ActiveConnection = Nothing
    rst1.CursorLocation = adUseClient
    rst1.CursorType = adOpenStatic
    rst1.LockType = adLockOptimistic
    
    Set rst1 = rst.Clone            '我在这复制前一个记录集
   
    Set Frmcpglbj.DataGrid1.DataSource = rst1 '在这观查rst1的记录与rst一样
    Dim i As Integer
   ' If rst1.RecordCount = 0 Then
    Set rst1 = rst.Clone
   ' Else
    rst1.AddNew
    For i = 0 To 7
    rst1.Fields(i).Value = rst.Fields(i).Value
    Next i
    rst1.Update
    rst.MoveNext
    Set Adodc2.Recordset = rst1
    Set Frmcpglbj.DataGrid1.DataSource = Adodc2
   ' End If
     
End Sub

解决方案 »

  1.   

    Set rst1 = rst.Clone       并没有复制数据,只当你rst重新加载数据之后两个才会不一样
      

  2.   

    Set rst1 = rst.Clone       不是复制数据吗?
    那如何实现数据的复制?
      

  3.   

    程序运行到 rst1.AddNew
    显示实时错误‘3251’
    当前记录集不支持更新请问是怎么回事呀?
      

  4.   

    Clone 方法
    从现有 Recordset 对象创建一个相同的 Recordset 对象。可选择指定该副本为只读。语法
    Set rstDuplicate = rstOriginal.Clone (LockType)
    返回值
    返回 Recordset 对象引用。参数
    rstDuplicate 
    对象变量,指示要创建的 Recordset 对象副本。 
    rstOriginal 
    对象变量,指示要被复制的 Recordset 对象。 
    LockType 
    可选。LockTypeEnum 值,指定原 Recordset 的锁定类型或指定只读 Recordset。有效值为 adLockUnspecified 或 adLockReadOnly。 
    说明
    使用 Clone 方法可创建多个相同的 Recordset 对象,这对于想要在给定的记录组中保留多个当前记录尤其有用。使用 Clone 方法比创建和打开与原对象定义相同的新 Recordset 对象更为有效。原 Recordset 的 Filter 属性(如果存在)将不被应用到副本。设置新 Recordset 的 Filter 属性以过滤结果。复制任何现有 Filter 值的最简单的方式就是对其直接赋值,例如:rsNew.Filter = rsOriginal.Filter将新创建副本的当前记录设置为首记录。不管游标类型如何,对一个 Recordset 对象所做的更改将在其所有副本中显示。但是在对原 Recordset 执行 Requery 后,副本将不再与原 Recordset 同步。关闭原 Recordset 时并不关闭其副本,而关闭副本也不会关闭原 Recordset 或任何其他副本。用户只能复制支持书签的 Recordset 对象。书签值是可交换的,也就是说,来自一个 Recordset 对象的书签引用可引用其任何副本中的相同记录。一些触发的 Recordset 事件也将在所有 Recordset 副本中触发。但是,由于当前记录可区分副本的 Recordsets,因此事件对副本可能无效。 例如,如果更改了一个字段值,则 WillChangeField 事件将在更改的 Recordset 中和所有副本中发生。副本的 Recordset(此处没有更改)的 WillChangeField 事件的 Fields 参数只是简单地引用该副本当前记录的字段,该记录可能与原 Recordset (此处有更改)的当前记录不同。下表完整地列出了全部 Recordset 事件,并指示这些事件对于使用 Clone 方法生成的任何记录集副本是否是有效的和可触发的。事件 是否可在副本中触发? 
    EndOfRecordset 否 
    FetchComplete 否 
    FetchProgress 否 
    FieldChangeComplete 是 
    MoveComplete 否 
    RecordChangeComplete 是 
    RecordsetChangeComplete 否 
    WillChangeField 是 
    WillChangeRecord 是 
    WillChangeRecordset 否 
    WillMove 否 
      

  5.   

    多谢worldy的详细讲解!
         rst1.AddNew
        For i = 0 To 7
        rst1.Fields(i).Value = rst.Fields(i).Value
        Next i
        rst1.Update
    那以上代码可否实现记录的添加呢?
    它和clone()实现相同的功能?
      

  6.   

    set rst1= rst.clone
    如果rst没有重新加载数据,那么
    rst.addnew 会反应到rst1中,两个记录集的sort,filter属性可能不同,但数据