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

运行时错误 3032,无法执行此操作 ms-access

带有子查询的 SQL 查询上的 MS Access VBA 运行时错误 3075

MS Access 运行时错误 '3011 显示在一个代码中,但不在另一个代码中

查找文件夹/子文件夹名称时 MS Access VBA 运行时错误“13”类型不匹配

加入时更新 MS Access 语法错误