当我的表单加载时,我在数据表子表单上运行此代码,并且没有收到任何错误消息或代码中断。我的 debug.print 显示记录集 rs 充满了 2131 条记录,就像它应该的那样,但我的表单显示单行带有#Name?在各个领域。我的控件上的控件源属性肯定与我上面列出的字段名称相匹配。 RS 是一个表单级别变量,在表单关闭之前我不会将其关闭或将其设置为空。
知道我做错了什么吗?
Set rs = New ADODB.Recordset
rs.Fields.Append "TimesUsed", adInteger
rs.Fields.Append "strWorkType", adVarWChar, 150
rs.Fields.Append "DateLastUsed", adDate
rs.Fields.Append "SelectedYN", adBoolean
Set rs.ActiveConnection = Nothing
rs.CursorLocation = adUseClient
rs.LockType = adLockBatchOptimistic
rs.Open
Dim sSQL As String
sSQL = "MyComplicated SQL Statement Ommitted from this SO Question"
Dim r As DAO.Recordset
Set r = CurrentDb.OpenRecordset(sSQL, dbOpenDynaset, dbSeeChanges)
If Not (r.EOF And r.BOF) Then
r.MoveFirst
Dim fld
Do Until r.EOF = True
rs.AddNew
For Each fld In r.Fields
rs(fld.Name) = r(fld.Name).value
Next
rs.Update
r.MoveNext
Loop
End If
r.Close
Set r = Nothing
Debug.Print rs.RecordCount '2131 records
Set Me.Recordset = rs
好的,所以我刚刚读了这个在MSDN网站上:
记录集必须包含一个或多个具有唯一索引的字段,例如表的主键。
(注意:此信息在这种情况下似乎是错误的。)
是否可以在仅是内存对象的记录集上设置主键?
是的,使用adFldKeyColumn
as the Attrib
to the 附加方法。阅读字段属性枚举更多细节。
如果您的 SQL 语句中已有合适的唯一字段(或字段组合),请使用它。如果没有,请创建一个长整型字段并将其用作假主键字段...为插入的每一行增加值。
rs.Fields.Append "pkey", adInteger, , adFldKeyColumn
另请参阅 Danny Lesandrini 撰写的 Database Journal 中的这篇文章是否有帮助:创建内存中 ADO 记录集
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)