![]() |
1
8
客户报告偶尔出现类似问题。它在它们开始使用合并复制之后立即启动。 我已经通知了Microsoft Access产品组中的几个联系人以及我的同事Access和SQL Server MVP。 请将您的电子邮件地址发送给我,以便我可以将其转发给我在Microsoft的联系人,因为我认为他们会直接与您联系。托尼在Granite.ab.ca btw优秀的故障排除和详细的问题描述。 |
![]() |
2
4
这听起来绝对像是一个记录锁定问题。您使用自动编号作为pk吗?您是否尝试过两台计算机同时在同一表单上添加记录(这意味着其中一台计算机将激发插入事件,而另一台计算机已在表单1上添加新记录,但仍在编辑它)? 如果插入的记录的pk 之后 表中的插入与插入前给定的pk保持类似(例如,在代码中添加一些“debug.print”)? 一个场景可能是两个挂起的插入由机器提供相同的pk,第二个则在插入时自动更改,导致您的表单丢失“活动”记录。 |
![]() |
3
3
我想知道,在这种情况下,您将使用一个表单来添加包含任何其他记录供用户跳转的记录。 也就是说,我不相信使用与创建记录相同的表单来编辑记录。 相反,我使用一个未绑定的对话框来收集所有必需的字段,在SQL中插入记录,然后将主编辑窗体打开到该单个记录(而不是将整个表导航到刚添加的记录的窗体)。 请记住,在主窗体/子窗体方案中,未保存父窗体时在子窗体中创建记录会导致保存父记录。您可能需要检查主窗体的插入和更新事件中是否有任何代码会导致在插入新记录(由编辑子窗体触发)时重新查询主窗体。 但是我仍然建议最好的架构是通过只加载单个记录来避免这种可能的场景,因此没有其他记录可以跳转到。这当然会限制当问题发生时用户可能会在哪里结束的可能性。 |
![]() |
4
1
当有多种方法做同一件事时,我看到了这样的行为。(也就是说,从文本框中弹出一个标签来触发丢失的焦点,而不是单击一个按钮),因此,如果您还没有,请确保情况并非如此。 |
![]() |
5
1
合并复制触发器解决了这个问题。在此触发器中(此问题从SQL 2005 Server转移,在SQL 2000 Server中,此问题不是NAKE问题),复制将一些数据插入具有标识的复制表中,并访问获取此数量的标识,而不是实际形式的缩进插入。我读到access使用了作用域标识的@@identity insetad,这是个问题。要避免这种情况,您应该更改合并触发器,方法是:在开始时插入触发器时,将变量中@@identity的当前值和触发器结束时的值保存为变量中写入内容的起始值的标识在临时表中插入值。这将更正@@IDdentity,Acces将获得正确的值。
在触发器开始时
声明@identity int
声明@strsql varchar(128)
设置@identity=@@标识
最后是这样的
将@strsql='select identity(int,'+cast(@identity as varchar(15))+',1)设置为id到temp'
Excel(@ SRSQL)
ET和它应该放在
如果@@error<gt;0
转到故障
ACCES中的问题不仅会出现在表单上,还会直接出现在ODBC链接表中。 我正在寻找如何自动添加这个以合并复制触发器(主要是insert)的方法。 |
![]() |
6
1
这是访问和SQL通信中的错误。Access从@@Identity获取新记录的标识,输入完记录后,它将根据SQL中@@Identity值的值重新加载数据。在SQL 200中,插入的合并触发器和acces通常工作正常。从SQL 2005合并触发器的某些部分中,数据被输入到某些合并复制表中,这些合并复制表具有标识to,并且更改了@iddentity form的值,而该值是从Access新输入的rcord的值。 一种解决方案是通过chanege all merege insert trigger在变量的开头保存@iddentity,在触发器的结尾将temp表中的dumy记录作为标识列插入,变量的起始值预先保存。 这个解决方案是我在网上找到的,上周我也受到了这个问题的影响。我将数据库从SQL 200移动到SQL 2008,然后在Access中发现了标识的问题。我怀疑复制,因为当我删除其中一个订阅时,所有订阅都开始正常工作,但重新创建后,它又被删除了。 我用这个来解决问题(从网络上的某个地方获取)。 在合并开始处插入触发器 声明@identity int 声明@strsql varchar(128) 设置@identity=@@标识 在合并结束时插入触发器 将@strsql='select identity(int,'+cast(@identity as varchar(15))+',1)设置为id到temp' Excel(@ SRSQL) 在合并复制代码中,最后一个代码应该放在/*insert end on this place*/的位置。 如果@@error<gt;0 转到故障 /*在此位置插入结尾*/ 返回 但我正在寻找一种方法来自动完成这项工作,包括发布时的所有现有合并触发器,以及现有订阅和将来订阅时的所有现有合并触发器。 |
![]() |
7
0
|