我想实现数据集的添加,实现多次查询出的数据在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
代码如下:
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
那如何实现数据的复制?
显示实时错误‘3251’
当前记录集不支持更新请问是怎么回事呀?
从现有 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 否
rst1.AddNew
For i = 0 To 7
rst1.Fields(i).Value = rst.Fields(i).Value
Next i
rst1.Update
那以上代码可否实现记录的添加呢?
它和clone()实现相同的功能?
如果rst没有重新加载数据,那么
rst.addnew 会反应到rst1中,两个记录集的sort,filter属性可能不同,但数据