即使在 docmd.close 之后,表单也将我的桌子紧紧锁定

2024-03-24

抱歉,大家的文字墙很长,但这需要解释,要发布的代码太多了......

我正在将固定宽度文件导入到需要数据输入的方法中。我使用transferText 将文件导入到两个规范中(一个是全局的,另一个是特殊情况)。

我有一个函数,它使用 DAO 循环遍历 TableDefs 中的所有 Field 对象,以构建包含 AutoIncrement PK 的重复表,以便我能够编辑这些记录。我使用 INSERT INTO 将数据推送到该表中。

效果很好。发现错误后,用户进入数据输入以手动更正它们,这比筛选 400 个字符行并按应有的方式重新组织所有内容要好。效果很好!

问题:当数据输入发生更改时,按下提交按钮,该按钮调用表单外部模块内的函数。它关闭数据输入表单,并将信息推回​​到原始表减去自动增量的 PK,并且应该删除带有 ID 的复制表,并生成一个新表,再次搜索错误...

它可以很好地推回原始状态,但不会删除 ID 表。总是返回给我一条消息,指示该表已锁定。我注意到该表被无限期锁定,直到所有函数/子程序退出。在任何时候单步执行代码我都无法手动删除它,一旦执行完成我就可以将其删除。

我假设由于我通过表单中的命令调用了它,因此在所有代码完成并且可以调用表单终止并执行其操作之前,锁不会被释放。有什么想法吗?是的,这非常野蛮,但效果很好,我只需要能够将另一张桌子从地球上撕下来,这样我就可以重新放置更新的副本......

在最坏的情况下,我可以让用户关闭表单并点击主表单中的另一个按钮,但这是在设计时充分考虑到用户能力的。然而,这现在引起了我的全部关注,并且希望至少找到一种解决方案,即使它不是最佳方案。

-EDIT-

该问题使用了两种形式

FormA (Role: Load in and search for problems)

Examine button is pressed that:

 - Uses TextTransfer based on predefined specs into tempExtract to
       import the file

 - DAO fires off on the Fields collection in tableDefs for
   tempExtract, creates new table tempExtractID

 - Performs searches through the file to find errors.  Errors are saved to
   a table Problem_t.  Table contains Problem_ID (Set from the ID field
   added to tempExtractID) and Description

 - Execution of these tasks is successfully requerying the initial
   form to showing a list of problems and number of occurances.  A button
   gains visibility, with onClick that opens the form DataEntry.            

 - At this point in the code after DAO execution, I can DROP the table
   tempExtractID.  DAO is NOT used again and was only used to build a new table.

FormB - 数据输入表

一旦我打开此表单,表 tempExtractID 就会被锁定,并且我无法删除该表。表单的记录源根据 Problems_t 中的 ID 查询 tempExtractID,以仅返回我们需要键入的内容。

在表单完全终止之前我无法删除该表。按下数据输入表单上的按钮即可提交更改,其中只有5在出现锁定错误之前触发的代码行。

*Xargs refers to the list of Field names pulled earlier through DAO.  As DAO loops through Field objects, the physical names are added to an Xargs String which is placed in this table.  Basically everything but the AutoNumber is being inserted back

    docmd.Close acForm, "frmDataEntry", acSaveNo
    call reInitializeExtract
         > docmd.RunSQL "DELETE FROM tempExtract"
         > docmd.RunSQL "INSERT INTO tempExtract SELECT (" & DLookup("Value", "CONFIG_t", "Item = 'Xargs'" & ") FROM tempExtractID"
    docmd.DeleteObject acTable, "tempExtractID"

这是在打开表单(表首次被锁定时)之间运行的唯一代码,并继续锁定直到所有子函数和函数完成。


我建议将表单的记录源设置为vbNullString,然后删除该表。这应该有效,除非您还有绑定到该表的组合框等。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

即使在 docmd.close 之后,表单也将我的桌子紧紧锁定 的相关文章

  • 从 MS Access 中提取 OLE 对象(Word 文档)

    我有一个 Microsoft Access 数据库 其中包含一个包含 Microsoft Word 文档的 OLE 对象字段 我试图找到代码来检索保存在 OLE 对象中的文件 以便用户可以从我的 JavaFx 应用程序中的按钮下载它 但没有
  • Access 2007 触发器和过程等效项?

    好的 有人有一些关于 Access 2007 功能 有关触发器或存储过程 的好资源吗 它甚至可以做它们或类似的事情吗 我在 Microsoft 帮助中找到的所有资源都引用了 Access 2003 以及许多在线帮助手册 2007 年一切都发
  • 如何从外语线程调用Python函数(C++)

    我正在开发一个程序 使用 DirectShow 来抓取音频数据 媒体文件 DirectShow 使用线程将音频数据传递给回调 我的程序中的函数 然后我让该回调函数调用另一个函数 Python 中的函数 我使用 Boost Python 来包
  • 将 Excel 文件导入 Access 时更改数据类型

    将 Excel 文件导入 Access 时 有什么方法可以更改默认数据类型吗 顺便说一下 我使用的是 Access 2003 我知道有时我可以自由地将任何数据类型分配给正在导入的每个列 但这只能在我导入非 Excel 文件时进行 EDIT
  • PostgreSQL 锁定机制中的错误或对该机制的误解

    我们遇到了 PostgreSQL 9 0 12 锁定机制的问题 这是我们重现该问题的最小代码 Scenario Transaction 1 Transaction 2 BEGIN BEGIN select trees for update
  • 将 Mdb 转换为 Sql Server

    如何使用 C 或其他语言将 mdb 访问文件转换为 sql server 我找到了一个article http channel9 msdn com forums TechOff 234266 Convert MS Access DB to
  • 使用 VBA 在 Access 表中记录计数

    我正在尝试获取表的记录数 如果计数大于 17 则创建一个新表 Dim rst As DAO Recordset strSQL Select from SKUS Set rst db OpenRecordset strSQL If rst R
  • MS access:如何嵌入JPEG图像并预览它们?

    我用的是Access 2007 我创建了一个 OLE 字段来存储 JPEG 因此我可以轻松地将它们拖到数据库中 这样可行 问题是 该字段不显示 JPEG 而是显示通用 JPEG 缩略图我需要双击打开 JPEG 并预览它 有办法吗预览 JPE
  • Postgres、更新和锁定顺序

    我正在研究 Postgres 9 2 有 2 个更新 每个更新都有自己的事务 一个看起来像 UPDATE foo SET a 1 WHERE b IN 1 2 3 4 另一个也类似 UPDATE foo SET a 2 WHERE b IN
  • 使用多个值更新查询

    我想在 MS Access 2003 中编写一个更新查询 我有一个名为product code 如果产品代码是 110 到 752 之间 或 910 到 1124 之间 我想更新产品代码 15 如果产品代码是 1210 和 1213 之间
  • 运行时错误“3065”无法执行选择查询

    我已经写了很多查询 但我正在努力解决这一问题 当我运行以下 sql 时 出现运行时错误 3065 Dim db As DAO Database Dim sqlstring As String Set db DBEngine 0 Databa
  • Java 中具有可重入锁和条件的生产者消费者场景

    我使用可重入锁和条件编写了一个生产者消费者程序 它工作正常 但我不太确定实施是否正确 此外 它似乎不是最佳的 有人可以验证这是否是正确的实现 此外您能告诉我如何优化它 比如 在真正需要的地方锁定 public class TestRL st
  • VBA 中 .NET 的 System.Convert 的替代方案

    我正在 Microsoft Access 中编写一个 VBA 函数 以使用 RSA 密钥加密 解密文本数据 目前正在进行以下工作 CreateObject System Security Cryptography RSACryptoServ
  • 操作必须使用可更新的查询 - 访问

    我想通过使用 access 2007 中的联接来更新表 UPDATE TABLE1 A INNER JOIN SELECT ACCODE SUM AMOUNT AS SUM AMOUNT FROM TABLE2 GROUP BY ACCOD
  • 如何使用 SQL 查询在 Access 中的字段上设置验证规则?

    我正在使用 MS Access 2016 Office 365 目前遇到问题 下面是一个演示此问题的示例 这里我创建了一个表 名为节点家庭链接 由两个字段组成 NodeID 和 FamilyID 如下所示 现在 NodeID 是从另一个表
  • MS Access 表单按钮,允许用户浏览/选择文件,然后将文件导入到表中

    在我的数据库中 我可以使用以下命令创建命令按钮导入文件 DoCmd TransferText acImportDelim 导入的原始数据 导入规范 导入的原始数据 D Users Denise Griffith Documents Grif
  • 是什么阻止“Select top 1 * from TableName with (nolock)”返回结果?

    我目前正在运行以下语句 select into adhoc san savedi from dps san savedi record 这花了很长时间 我想看看它走了多远 所以我运行了这个 select count from adhoc s
  • 运行代码(而不是查询)时如何在状态栏上显示进度

    我已经发布了有关在 MS Access 2010 中运行查询时更新状态栏的问题 请参阅在 MS Access 中运行一系列查询时如何在状态栏上显示进度 https stackoverflow com questions 27765376 h
  • 使用 MS Access 获取行的第一个实例

    EDITED 我有这个查询 我想SELECT表中记录的第一个实例petTable SELECT id pet ID FIRST petName First Description FROM petTable GROUP BY pet ID
  • 获取当前 VBA 函数的名称

    对于错误处理代码 我想获取发生错误的当前 VBA 函数 或子函数 的名称 有谁知道如何做到这一点 编辑 谢谢大家 我曾希望存在一个未记录的技巧来自行确定函数 但这显然不存在 我想我会保留当前的代码 Option Compare Databa

随机推荐