BACK END - SQL Server
FRONT END - Access 2010(2000格式)
系统存储和检索有关技术文档的数据。从广义上讲,有三个表A,B和C,每个表都保存有关不同类型文档的数据。
ACCESS前端为每种文档类型提供搜索表单和数据输入/编辑表单(绑定到基础表)。在所有三种文档类型中,添加新记录时,用户将打开“搜索”表单并按“添加”按钮。这将打开“数据输入/编辑”表单,并在Form_Load事件中显示
行DoCmd.GoToRecord , , acNewRec
当数据输入完成后,用户按下“关闭”按钮,该按钮只运行代码
DoCmd.Close
正如我所说,对于所有意图和目的,与三种文档类型相关的对象的设计和代码是相同的。但是,对于表A和表B,添加新记录的过程是无缝且非常快的,对于表C,已证明无法通过ACCESS UI添加新记录。编辑表单将正确打开以添加数据,但是当用户按下“关闭”按钮时表单将挂起,并最终返回到搜索表单而不添加新记录。
可以通过在按住SHIFT键,打开链接表和直接添加新记录的同时打开ACCESS来绕过UI。虽然这是可以接受的临时措施,但从长远来看这是不可接受的。应该注意的是,该系统大约有十年的历史,并且在大约九年中完全正常工作(除了在不同版本的ACCESS之间移动的小故障)。
不幸的是,这个系统是由一家大型跨国公司拥有和运营的,我这是一个转包供应商,很难访问SQL Server盒来运行诊断(SQL Profiler将是一个很好的起点)。我的直觉是,该特定表的权限模型存在细微差别,但我不知道。
由于我在工作中有一份系统副本而无法重现问题,情况变得更加复杂。当然,这两种体系结构之间必然存在微妙的差异(例如,我不知道它运行的是什么版本的SQL Server,但我相信它是2000,我也不知道它是如何完全修补的或者但事实是,对于绑定到一个特定表单的一个特定表,不可能添加记录,而对于其他表,则没有这样的问题。
如果有人对如何诊断或解决问题有任何想法(如果有人之前遇到过同样的问题),我将不胜感激。
非常感谢
爱德华
答案 0 :(得分:1)
作为一般规则,当您遇到更新表的问题时,这往往表明该表没有PK或查询所基于的表单没有暴露PK。
我要确保的下一件事是该表有一个时间戳列,因为Access使用它来测试幕后的记录更改。
接下来我会检查表单的默认锁定(虽然这些设置通常不会影响odbc,但应该检查它们。)
接下来检查表是否有任何“位”列(true / false)并确保此类控件的默认值设置为SQL SERVER端(它们应默认为0)。如果没有解决,这个空位问题将导致更新失败。
我还会检查相关表单是基于查询还是数据源是否直接设置到表中。如上所述,查询中该表的PK自动编号ID应为INTEGER值sql side - 不支持big int。
因此请检查默认值(在sql表和表单(这些控件)上)以确保不会设置任何阻止更新的内容。