2009-08-27 318 views
1

我有一个SQL Server作为后端,并使用ms访问作为前端。插入SQL服务器中的视图

我有两个表(personsmanagers),managerpersons衍生(1:1的关系),因此,我创建的视图managersFull这基本上是一个:

SELECT * 
     FROM `managers` `m` 
INNER JOIN `persons` `p` 
     ON `m`.`id` = `p`.`id` 

idpersons自动增量并且主键idmanagers中是主键和外键,引用personsid

现在我想能够插入一个新的数据集的形式在MS访问,但我不能让它的工作。没有错误信息,没有状态行,什么都没有。新的行不会被插入,我必须按下escape才能取消我的更改以返回ms访问中的设计视图。

我在谈论一个managers形式,我希望能够在同一时间在一个单一的形式进入经理和个人信息

我的问题是现在:是否有可能是我想在这里做?如果没有,是否有一个“简单”的解决方法,使用插入触发器或一些VBA代码行后?

在此先感谢

回答

2

问题是,您的视图跨越几个表。如果你访问多个表,你可以只更新或插入其中的一个。

也请您查看MSDN更详细的信息,限制和proper strategies for view updates

+0

有没有办法解决这个问题? – knittl 2009-08-27 08:21:15

+0

是的,有策略。我已经用MSDN链接更新了我的答案。本文http://www.craigsmullins.com/cnr_0299b.htm也可能有所帮助 – 2009-08-27 08:26:47

0

伊利亚Kochetov指出,你只能更新一个表,但工作周围是将更新应用到田间地头上一个表,然后另一个。此解决方案假定您必须访问这两个表的唯一途径是通过此视图,并且您不允许创建存储过程来处理此问题。

1

假设ODBC,一些事情要考虑:

  1. 请确保您有在人表中的时间戳字段,并且它在你的经理视图返回。你也可能需要管理员视图中人员表的真正PK(我假设你的视图将FK用于自联接并将其别名作为ID字段 - 我不会那样做,因为它是令人困惑的,相反,我会在经理视图中使用真正的外键名称,并让PK以自己的真实名称独立)。

  2. 在记录源中尝试Jet/ACE特定的DISTINCTROW谓词。使用Jet/ACE后端时,这通常可以在两个表中插入时,否则就不可能。但我不确定Jet是否足够聪明,可以告诉SQL Server做正确的事情。

  3. 如果这些事情都不起作用,请将您的表单更改为使用基于您的人员表的记录来源,并使用基于经理视图的组合框作为控件,使用该控件编辑记录以将人员关联到经理。

0

要在访问中建模和维护两个相关表,您不要使用两个表的连接的查询或视图。你所做的就是使用主窗体,并放入基于子表的子表单中。如果子表格中的链接主设备和子设置设置正确,则不需要编写任何代码,访问将在连接字段中插入该用户的标识。

所以,不要在这里使用连接表。只需使用表单+子表单设置,即可编辑和维护相关子表中的数据和数据。

这意味着您将表格基于表格而不是视图。并且您将子表格基于子表格。所以,不要在这里使用视图。