Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access &引用;交易记录中不支持操作“;在Access中复制/粘贴记录时_Ms Access_Ms Access 2010 - Fatal编程技术网

Ms access &引用;交易记录中不支持操作“;在Access中复制/粘贴记录时

Ms access &引用;交易记录中不支持操作“;在Access中复制/粘贴记录时,ms-access,ms-access-2010,Ms Access,Ms Access 2010,将Excel中的单元格复制/粘贴到Access子窗体时,如果未创建父记录,将导致错误-如预期的那样 问题在于,发生此错误后,访问被锁定在一种状态,即输入的所有后续数据都会导致事务中不支持的操作。打开表时,可以看到新添加的数据尚未在表中,因此看起来Access实际上参与了某种事务 我试过打“保存”…'刷新“。。甚至添加一个AfterInsert事件来强制commitTrans(),但没有运气——Access声称没有正在进行的事务 如果手动输入记录,则不会出现错误。这个问题似乎只有在粘贴记录时才会出

将Excel中的单元格复制/粘贴到Access子窗体时,如果未创建父记录,将导致错误-如预期的那样

问题在于,发生此错误后,访问被锁定在一种状态,即输入的所有后续数据都会导致事务中不支持的操作。打开表时,可以看到新添加的数据尚未在表中,因此看起来Access实际上参与了某种事务

我试过打“保存”…'刷新“。。甚至添加一个AfterInsert事件来强制commitTrans(),但没有运气——Access声称没有正在进行的事务

如果手动输入记录,则不会出现错误。这个问题似乎只有在粘贴记录时才会出现。我猜Access正在创建一个事务来处理多个记录操作,并且没有正确地从错误中恢复

我可以删除“Required”标志,它会起作用,但是你会有孤立记录。我在想,也许可以使用一个After Insert Data宏来添加一个具有默认批名称的新批,并将新的BatchID自动填充到Items表中。然而,我不确定如何做到这一点

我确实尝试使用更改前数据宏删除错误的“Required”标志和陷阱,但尽管它减少了错误,但仍然产生了错误事务中不支持的相同操作

我在Microsoft知识库中查找了错误,但没有找到任何特定于我的情况的内容。我在stackoverflow中搜索错误消息,但未找到任何内容

我创建了一个新的数据库,并能够复制该问题

复制步骤

建立数据库

  • 在Access 2010中创建新的ACCDB数据库
  • 创建一个名为“批次”的表,其中包含以下字段:
    • BatchID(自动编号)(主键)
    • 批处理名称(文本)
  • 创建一个名为“Items”的表,其中包含以下字段:
    • 记录ID(自动编号)(主键)
    • BatchID(长整数)
      • 将Required属性设置为True
    • 数据-文本
  • 创建一个关系,将Batches.BatchID链接到Items.BatchID
    • 包括批次中的所有记录,以及项目中的匹配记录
    • 强制引用完整性
    • 级联更新/删除
  • 创建一个名为“表单”的表单
    • 将Recordsource设置为批处理
    • 在“批次ID”和“批次名称”文本框中添加
    • 添加子窗体/子报表控件
      • 将源对象设置为“Table.Items”
      • 将链接主字段设置为“BatchID”
      • 将链接子字段设置为“BatchID”
      • 设置“空主机上的过滤器”=是
  • 创建示例数据(使用表单)
    • 批量创建新记录。
      • Set BatchName=“测试”
    • 在项目中创建新记录。
      • 参考批次记录
      • Set Data=“测试”
  • 正如你所看到的,手工操作效果很好

    从Excel复制和粘贴数据

  • 在Excel中
    • 从A1-A10开始,每个单元格输入一个字母:A、B、C、D、E、F、G、H、I、J
    • 突出显示单元格A1-A10
    • 副本(控制+C)
  • 在Access中,使用以下表单:
    • 添加新的批处理记录。在BatchID文本框中应显示“(新)”
    • 不要输入批次名称
    • 在子窗体中,单击新记录的记录选择器(*),以选择整行。键入Control+V以粘贴
    • 单击“必须在“Data.BatchID”字段中输入值”的“确定”。错误
      • 此错误可能会重复。请继续单击“确定”
      • 如果它询问“是否要抑制进一步的错误消息…”,请回答“是”
    • 单击“确定”以获取“Microsoft Access无法粘贴的记录已插入到名为“粘贴错误”的新表中。”通知
    • 在批次名称文本框中填写“TestName”
    • 试着优雅地恢复。击中逃逸。改变记录
  • 此时,您应该看到输入的BatchID、批次名称和新数据。一切似乎都按预期进行。如果尝试刷新或导航到另一个批处理记录,则会出现事务中不支持的错误操作。Access将继续显示此错误消息,直到我们关闭并重新打开表单。您粘贴的数据不会进入数据库

    通常,有一点技术悟性的人会意识到有些事情进展不顺利,然后关闭数据库并重新打开。。。但不幸的是,我有一些用户在弹出框中玩“打鼹鼠”游戏,然后试图继续玩下去——所以我想让事情尽可能防弹

    所需解决方案

    我想要一个解决这个问题的方法,它不会最终导致访问、重复值等方面的其他怪癖

    根据我自己的经验,使用VBA来“修复”密钥是不可靠的。数据宏似乎更可靠-但设置起来可能很棘手-它们还不是很主流(我想说stackoverflow上应该有ms access数据宏标记,但还没有)

    建议的解决方法:

    在[Batches]表中,将[BatchName]字段的
    Required
    属性设置为
    Yes

    将[BatchID]文本框的
    制表位属性更改为“否”。这将在表单打开时为[BatchName]文本框提供默认焦点

    让表单的
    On Current
    事件为[BatchName]文本框提供新记录的焦点(
    IsNull(Me.BatchID)=True

    当[BatchName]文本框失去焦点时,使表单变脏

    选项比较数据库
    选项显式