代码之家  ›  专栏  ›  技术社区  ›  Joe R.

从内到外访问2010

  •  1
  • Joe R.  · 技术社区  · 14 年前

    我最近从微软出版社买了这本书。我目前拥有OfficeEnterprise2007(包括Access),并已决定将我的InformixSQL应用程序转换为Access2010。但是,我对VBA、宏和我的应用所需的其他一些功能没有经验。这对我来说将是一个新的学习过程,但我必须更新我20年前的基于char的应用程序,并利用新功能。我已经开始定义表和列,但没有定义关系。使用INFORMIX,我将序列(autoincrement)列与另一个表中的INT列连接起来。现在,当我显示一个customers master行时,我想在一个子表单中自动显示与该客户关联的所有事务,并且能够在任意一个表上添加、更新、查询和删除。10分能完成吗?

    编辑:好的,这是我到目前为止所做的,定义了表和关系: alt text

    后面还有更多的验证查找表,但这些是主表。所以,如果现在我创建一个表单并指定CLIENTES(customer表)、LOTES(lot表)、ARTICULOS(item表)和TRANSACCIONES(transaction表),它将在一个屏幕上创建一个CLIENT表作为主表单,而其他子表作为子表单?

    另外,我创建一个lot表的原因是,当客户典当或出售物品时,典当行将所有这些物品组合成一个lot,计算总贷款或购买金额,将其存储在一个事务中,并打印出包含所有物品和总金额说明的票据。所以我想说,如果客户拖欠利息或不赎回典当,那么客户将没收所有物品,典当行可以选择将一些物品出售给黄金精炼厂和/或将其他非黄金物品转移到库存中出售给公众,那么上述ER是否足以满足这一能力?

    我还想确保当用户在一个特定的公司内工作时,每个表中的每一行都有相同的存储ID(公司ID),因为这个系统将是多公司的,并且会有合并报表等。

    2 回复  |  直到 11 年前
        1
  •  2
  •   Albert D. Kallal    14 年前

    这种类型的设置可以在1992年的任何版本的access中完成。

    在access中对这些经典的一对多关系建模的方式是将父窗体基于父表(注意,我说过partent table,而不是我要再次重复的查询:您不需要为您连接数据的查询)。然后基于子表创建一个称为continues的表单。现在有两个表单,然后可以简单地将子表的表单拖放到上面的父表单中,就完成了。

    事实上,如果在“关系”窗口中正确地设计和设置了关系,那么如果使用向导创建表单,它实际上会为您生成并自动插入子表单。

    因此,正如我前面指出的,上面的过程中有几个有趣的问题您应该知道,您根本不需要构建任何SQL查询。您不必编写sql来连接数据。Access将为您完成所有这些,并且不需要任何代码。

    因此,当您在主窗体中导航记录时,子窗体中的子记录将自动显示和筛选。(如果您添加、删除或编辑这些子记录,则会为您插入并维护正确的关系键,这同样不需要编写任何代码)。

    形式如下: alt text

    此时,表单将在没有编写任何代码的情况下工作。

    其实上面的表格我有一个主要的记录,在左边我有很多会员捐款。不过,我也需要把左边的每一笔捐款分给一个特定的账户,以便记账。(这是一个典型的支票分割,你可以在最近的每个会计软件包中看到)

    所以上面的模型是一对多,然后每个捐款的许多成员也分成许多不同的帐户。一个非常强大的设置,几乎没有代码。

    所以,在上面我真的做了三个桌子深的模型。|而且,公平地说,右边(捐款分成账户)确实需要一行代码才能正确更新,因为当您深入3个表时,access不会这样做。

    如前所述,如果您正确设置了关系,access将自动为您将两者缝合在一起,并为您维护关系。因此,将自动显示属于单亲记录的子记录。这种能力包括编辑、删除和添加这些子记录。因此,当您导航到一个新的reocrd时,所有的子记录和信息都将为下一个表单自动刷新。

    换句话说,上述所有操作都可以在不构建任何SQL查询的情况下完成,并且不需要一行代码。

        2
  •  1
  •   Albert D. Kallal    14 年前

    http://social.msdn.microsoft.com/Forums/en-US/accessdev

    不管怎样,让我们看看我们能想出什么。我还应该指出,您的表设计以及如何关联这些表并不是一个真正的访问问题,而是一个简单的数据库设计问题。对于MySql、Oracle、FoxPro,或者实际上对于我们这个行业过去20多年中使用过的任何关系数据库系统来说,这应该是一样的。因此,当您询问如何设置数据库时,这并不是一个真正的访问问题。

    而且,正如您现在所拥有的,同样的建议也适用于LOTES的两个子表。同样,他们不需要商店id,因为根据您的上述设计,他们已经附加到LOTES表,而LOTES表又附加到商店id所在的customer表。因此,在您当前的设计中,customer下面的所有子表都可以并且应该删除store\u id。

    然而,我怀疑以上并不是你希望在这里完成的。很可能LOTES记录属于一个商店。如果是这样,那么您希望LOTES表是存储的子表。

    这里唯一不清楚的是,你的设计是否允许一个客户连接到多个商店。如果这是一个非常罕见的情况,那么也许您采用了一种更简单的设计,它要么迫使您再次进入客户,要么甚至通过一些复制代码。虽然这种中断在这里通常会出现一些问题,比如如果同一个客户的不同商店的送货地址要更改,那么在这种情况下不进行规范化通常会节省大量代码和设计问题。

    如果您确实希望客户拥有多个店铺,那么您需要一个名为tblCustomerStores的表。您将此表作为子表附加到客户,此表将具有存储id。然后您可以将所有客户事务等附加到此子存储表。这个Customer store表甚至可能包含付款类型和交付偏好(例如,如果它们在不同的商店之间有所不同)。

    所以,你从 客户->客户商店->交易->

    而且,不清楚物品是否附属于特定交易?如果是的话,那么for的项目就是事务的子项。

    我想更多的是

    您需要客户商店->转移 您需要客户商店->文章