我刚刚将ACCESS数据库(后端)导入SQL Server 2008数据库。我的前端仍然是ACCESS 2007,后端是SQL Server 2008.我已经意识到,如果我打开一个表单(在某个记录上),然后做一些应该填写一些文本字段的计算自动在该表单上(对于该记录),那时那些文本字段的值不会被填充。现在,如果我关闭表单并为同一记录重新打开它,那么值就在那里。所以有一种延迟,这就是阻止其他事情发生。有人可以帮我一把吗?我尝试使用ODBC驱动程序SQL Server以及SQL Server Native Client 10.0,但没有一个工作。
非常感谢
答案 0 :(得分:1)
当使用本地表或链接到sql server时,表单中的大多数功能都相同。
然而,这里的一个显着区别是,即使您在添加模式下开始编辑表单中的信息,主键也是以本地形式添加的INSTANLTY。这意味着如果存在任何类型的查找,甚至是子表单或基于使用主键的其他表达式,当您运行本地版本的MS访问并开始键入时,这些显示将立即更新。 / p>
但是,在将链接表用于SQL Server时,不会生成自动编号主键ID,直到实际保存记录为止。因此,如果他们使用并依赖主键来显示信息,则应检查这些表达式。
如果以上是您的问题,那么可能在用户通用输入数据的其中一个控件中强制执行磁盘写入(从而强制生成主键)。
因此,在您输入的主要文本框(字段)的“更新后”事件中,您可以强制执行磁盘写入,例如:
If isnull(me!id) = true then
‘ we have no primary key, force a disk write
If me.Dirty = false then
Me.Dirty = true
End if
End if
您可能希望展开并提供一些有关哪种表达式无法正常工作的详细信息。但是,上面是创建主键的时间顺序中最显着的差异,并且可用于表单上的其他表达式。
答案 1 :(得分:1)
使用服务器后端,Access需要帮助以使表单保持最新。首先,每个表都需要一个主键(没有一个正确设计的表缺少一个,但这可以是那种适用于Jet的东西,并且在升级到SQL Server或任何其他ODBC后端时中断)。其次,我发现向所有SQL Server表添加时间戳字段是一种好习惯,因为这样可以让Access知道记录是否已更新,而无需评估记录中的每个字段。这也使得Access可以在不做太多额外工作的情况下刷新表单中的显示缓冲区。