MS Access 运行时错误 3999
Posted
技术标签:
【中文标题】MS Access 运行时错误 3999【英文标题】:MS Access Run-time error 3999 【发布时间】:2015-06-09 15:41:03 【问题描述】:我创建了一个使用 Office 365 Sharepoint 的链接列表作为后端的应用程序。
我的印象是,它的设计方式应该是链接列表应该能够离线处理自己。但是当我离线并创建一个新的“工作记录”时,ID 字段是用 -1 创建的。
工作列表的 ID 字段有一个 Lookup for Quote 表 并且 Quote List 在 ID 字段上有一个针对 Job 表的 Lookup,以创建两者之间的关系。
但是当我离线并创建一个新作业时,它的 ID 为 -1,我无法将该 -1 写入作业下的新报价。我收到以下错误
“运行时错误'3999'
您无法引用与服务器断开连接时创建的行,因为这违反了为此表或列表定义的查找设置。请重新连接所有表与服务器,然后重试”
我知道当我上线时,ID 为 -1 的新工作将获得正确的 ID(下一个可用的),是否可以在离线时创建新的链接记录,其中任何子记录在重新上线时都会得到更新?
我正在使用 DAO 记录集在作业下创建新报价
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim strSQL as String
strSQL = "SELECT * FROM tblQuote"
Set db = CurrentDB
Set rs = db.OpenRecordset(strSQL, dbOpenDynaset)
With rs
.AddNew
!JobID = Me.ID
.Update
.Bookmark = .LastModified
Me.QuoteID = !ID
End with
如果我在创建作业时在线,然后离线创建报价单,系统允许我创建报价单和任何新的报价单项目。我可以看到表格中的所有新记录,但是当我重新联机到 Sync 时,它不会将新报价识别为现有,并强制我撤消任何更改,因此新报价和所有行项目都被丢弃
【问题讨论】:
【参考方案1】:我相信我想通了。
这是因为我在两个方向都创建了一个查找。 Job 具有对 QuoteID 的查找,而 Quote 具有对 JobID 的查找。
对报价的作业查找在那里,因为它不是表单/子表单,我需要一种方法来显示作业的 ID,这是我第一个想到的。
我需要做的是解决这个问题,甚至在 Job 表上没有一个列来存储 Quote,而是在 Job Form 上拥有一个在运行时填充的未绑定控件,显示具有匹配 JobID 的 QuoteID。
这样在离线模式下可以创建 -1 ID 值并正确链接,然后在上线时同步过程将它们更新为正确的 ID,它们仍然保持链接。
【讨论】:
以上是关于MS Access 运行时错误 3999的主要内容,如果未能解决你的问题,请参考以下文章
MS ACCESS VBA 运行时错误'3021';使用 .MoveNext
带有子查询的 SQL 查询上的 MS Access VBA 运行时错误 3075
MS Access 运行时错误 '3011 显示在一个代码中,但不在另一个代码中