我有一个相当简单的数据库,我继承了。就本问题而言,有两个表: Mastertable and Providertable。
Mastertable references可提供的thruogh provid,它是可提供PK(提供)的FK。
所以它看起来像这样:
Mastertable:
acct(PK) (其他领域) 提供(FK)
Providertable
提供(PK) provname provspecialty简单吧?但是,Mastertable!provid字段实际上是一个查找表,显示Providertable!provname但存储提供。用户可以使用一种表单来填充Mastertable,并显示此查找字段。
用户现在希望根据他们选择的提供商来显示提供商专长。我无法想象出来拯救我的生命。我非常精通SQL,编写了许多存储过程并使用.NET创建了一些db应用程序,但这非常具有挑战性。我尝试创建一个名为provspeciality的查找字段,但这不是他们想要的。我尝试更改查找字段的“OnUpdate”事件,将Provider Specialty标签指向正确的事物。
现在,我甚至无法得到一个简单的选择加入两个表,因为他们使用这个查找字段作为FK和Access我想无法理解它。任何帮助表示赞赏。
答案 0 :(得分:1)
由于Mastertable provid字段是查找类型,因此显示的值是查找值,而不是实际存储在字段中的值。此查询将显示存储的提供值。
SELECT acct, provid
FROM Mastertable;
而且我认为您应该能够使用与此类似的查询检索匹配的提供商专业:
SELECT m.provid, p.provname, p.provspecialty
FROM
Mastertable AS m
INNER JOIN Providertable AS p
ON p.provid = m.provid;
您甚至可以将该查询用作表单上的组合或列表框的行源。提供绑定列。您可能希望将provid列宽设置为0“,因此它实际上不会显示在控件中,但仍存储在Mastertable中。
我认为您应该修改表格以提供普通(数字?)字段而不是查找。幸运的是,您表示这是“相当简单的数据库”,因此希望能够限制您需要与重新设计的表兼容的其他更改量。祝你好运。
答案 1 :(得分:1)
我为表单字段“provid”创建了一个“On Change”事件,这是一个查找字段,在将提供者ID作为FK放入主表时显示提供者名称。然而,显然Access无法使用查询基于此字段进行查找(或者我做错了) - 如上面的注释所示。我所做的是使用它作为事件代码。重要的是,您必须启用宏才能使其正常工作!
Private Sub provid_Change()
Me.txtProviderSpecialty = DLookup("Provspecialty", "Providertable", "provid = " & Me.provid.Value)
End Sub