【问题标题】:Ms Access form linked to SQL Server unresponsive链接到 SQL Server 的 Ms Access 表单无响应
【发布时间】:2012-08-03 02:05:38
【问题描述】:

不确定是否有明确的答案,但我有一个使用 SQL Server 2008 作为数据存储的 Ms Access 应用程序,所有表都从 Access 应用程序链接到 SQL Server,该应用程序托管在 Citrix 服务器上。 应用程序中的所有表格均为绑定表格。当我尝试编辑或保存表单永远挂起的数据并且我必须终止会话时,最近有一种特定的表单会导致问题。该表单链接到 SQL Server 上的一个表,并且该表具有 Identity 列作为主键,我觉得奇怪的是该表单甚至没有像任何其他表单那样频繁使用,而且该表甚至没有任何一半的记录其他大量使用的表。表单上只有 4 个字段,只有一个字段是 Nvarchar,其他表单有更多的 Nvarchar 字段,具有更多的利用率和数据,它们似乎不会引起任何问题。我正在排除网络问题,因为这会影响整个应用程序,而不仅仅是一种形式,SQL 服务器上的索引也是每天构建的,所以我认为这也不是索引问题。有谁知道为什么会发生这种情况。

【问题讨论】:

  • 即使我从 PC 本地运行应用程序也会发生这种情况。

标签: sql-server ms-access citrix locks


【解决方案1】:

如果您怀疑表单已损坏,您可以使用SaveAsTextLoadFromText 方法将表单定义保存为文本文件,然后用不同的名称重新加载它。

Application.SaveAsText acForm, "frmMainMenu", "frmMainMenu.txt"
Application.LoadFromText acForm, "frmMainMenu_new", "frmMainMenu.txt"

这些方法并不像 Erik 的建议那样全面,但它们既快速又简单。您也可以尝试反编译来修复损坏。请参阅此链接中的 2 个答案:HOW TO decompile and recompile

如果损坏不是问题的原因,您可以尝试在中断(调试)模式下单步执行表单代码。在窗体的打开过程的第一个可执行行上放置一个临时断点。如果您没有打开表单的过程,请添加一个。如果你不熟悉设置临时断点,你可以直接加上Stop这个词:

Private Sub Form_Open(Cancel As Integer)
    Stop

然后在打开表单后,您可以使用F8 键一次单步执行代码。希望您能够识别导致代码挂起的行。

【讨论】:

  • 我多次单步执行代码,我什至为 ODBC 跟踪 link 启用了我的注册表项。当表单打开时,它被过滤为一条记录,但是当我查看 ODBC 跟踪时,它每分钟在场景后面加载 10 条记录,直到我猜到所有记录都从表中拉下来,但对于所有表单都是如此他们有更多的记录,所有的记录都在幕后被拉下来。就像我说的那样,它加载了不需要的额外数据
  • 那么您的表单的记录源是一大组记录,但您将其过滤为一个?向我们展示表单的记录源属性可能会有所帮助。
  • 表单绑定了一个表,记录源是表单属性中的一个表(表名)。抱歉忘了提及 db 的 compact on close 属性也已启用,因此每次有人关闭应用程序时,db 都会被压缩。
  • 我会尝试反编译/重新编译数据库以去除不需要的代码。
  • 对于所有表,您需要一个 pk,并且您还应该为所有表包括一个时间戳列。 Access 使用此信息来帮助它“确定”如何以及何时更新表。
【解决方案2】:

尝试重建您的 Access 前端。创建一个新数据库,设置您的数据库特定选项以匹配(字段行为、自动名称跟踪关闭或打开、SQL 语法级别等),然后从旧 Access 导入所有表单、报表、宏、vb 代码和数据数据库进入新的。正确设置启动选项,看看有没有更好的。

Access 数据库可能会受到轻微损坏,有时完全重建是修复它们的唯一方法。

确保您保留备份。

【讨论】:

  • 我已经重写了导致问题的表单,而不是将其绑定到表格,而是通过代码提取数据并通过代码更新它。该表单仅用于根据来自另一个表单的过滤器一次编辑一条记录,因此无需将其绑定到表并在后台拉下整个表的访问权限。我认为这将解决问题,但我只是好奇为什么会发生这种情况,因为这种形式多年来从未引起过问题,也许你的权利可能由于某种原因而损坏。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多