我正在尝试将Access 2003(运行正常)迁移到Access 2007.用VBA编写的代码会产生一些问题。就像我有一个主要形式和2个子形式。在主窗体中由动态查询设置的记录源集,但是当我尝试设置子窗体的Recordset时,基于主窗体数据,然后访问2007崩溃&靠近自己。你可以帮助任何人找出2007年访问中出现这种情况的原因。
Public Sub LoadRecord(strRecId As String)
On Error Resume Next
Dim ctl As Access.Control
Dim strsql As String
Dim strID As String
Dim rs As ADODB.Recordset
strsql = "SELECT * from vwContractsMainForm WHERE ID = '" & strRecId & "'"
Call OLEDBConnect
Set rs = New ADODB.Recordset
With rs
Set .ActiveConnection = cnn
.Source = strsql
.CacheSize = 1
.LockType = adLockOptimistic
.CursorType = adOpenKeyset
.CursorLocation = adUseServer
.Open
End With
'Set the first sub form's Recordset property to the ADO recordset
Set Me.Recordset = rs '-------- this part creates the problem.
Me.UniqueTable = "tbl_contracts"
Set rs = Nothing
Set cnn = Nothing
答案 0 :(得分:1)
我会被愚弄。我在本月学到了一些关于Access的新知识。我从未意识到你可以改变那样的形式的记录集。
我从来没有使用On Error Resume Next,可能是,在崩溃的行之前的行上隐藏错误消息。
愚蠢的问题。 strRecId是查询中的数字或字符串字段吗?引号有效吗?
strRecoID和cnn在您的代码中不会变暗。我看到strID是暗淡的,所以很可能是你想要使用的字段。请将Option Explicit添加为模块的顶行或第二行。然后进入每个模块并添加这些行。然后进行编译,看看发生了多少其他错误。
同时进入VBA编辑器,然后进入工具>>选项>>并确保选中Require Variable Declaration框。
也向你和所有潜伏者。请将崩溃信息发送给Microsoft。当然,虽然他们不喜欢获取崩溃信息,但在涉及Service Pack时,他们确实将崩溃视为一个非常重要的优先事项。