使用“别名”表的表单中的MSAccess查询

时间:2018-12-02 02:44:17

标签: ms-access-2013

我需要超出我能力范围的MSAccess查询方面的帮助。我不确定我能否提供足够的信息来解释我的问题,但我会尽力

背景是Im正在处理MSaccess表单,该表单将来自多个 不同的来源,用于许多不同的站点,以便于关联和搜索。

数据的示例是电话号码,运营商,运营商支持号码,网关IP地址, T1电路编号,站点名称,站点联系人等

我已经成功创建了一个表格,例如,您可以输入一个网站名称,并在一个表格中显示该网站的信息(网站名称,地址,联系方式,地址等),该表格的所有电话号码均来自另一张桌子 另一个表中的网关(路由器)IP,ckt ID,接口号等 以及其他一些东西

所有可按位置过滤的位置-或位置可以是通配符和其他一些“特定于对象”,例如*表示位置,然后是部分电话号码

那部分很好。

现在是问题: 我正在尝试使用尽可能多的主要数据来源。例如,我可以从运营商那里下载电话号码列表,从路由器上获取接口描述,等等。 问题在于,所有不同的来源都使用不同的名称引用站点数据。例如,在一个地方的位置名称可能被称为“曼彻斯特”,在另一个地方的位置名称可能被称为“分支444”,在另一个地方的位置名称可能被称为MNX。 人们记忆很多,“您必须始终使用此名称”。

所有数据的“主要”表/名称以及表格是“站点”表。

为尝试解决该问题,我创建了一个“别名”表,其中的每一行都包含“站点”的字段-主引用,“网关”-网关表中使用的站点引用,“电话号码”-运营商列表中使用的网站参考“昵称”(大多数人都知道的名字,等等)

计划是,无论有人使用哪个术语进行搜索/过滤,查询都将在别名表中查找该术语,返回要搜索的表的正确引用,并使用该术语搜索引用的表。

例如,用户在位置搜索字段中输入昵称“曼彻斯特”或其中的一部分,然后点击刷新按钮 对“站点”列表框的查询查询别名(实际上是“ LocationNameCrossRef”)表,并返回“站点”表的正确名称 查询“网关”列表框,查询“ LocationNameCrossRef”表,并返回“网关”表的正确名称 等等

我认为最好的实现方法是从该行的所有字段中创建一个字符串,然后查看是否在表单中输入了值并根据该匹配结果返回适当的行。

但是我不能完全正确地执行查询。

要获取具体信息: 表格SITES:是主要位置表格,包含特定于站点的信息 表CIRCUITS和GATEWAY包含电路和网关信息 表PHONENUMBER和DIDS包含有关单个电话号码的信息 表LOCATIONNAMECROSSREF是别名表,其中包含上述每个表中使用的正确站点名称 还有一些,但是那些是主要的...

我已经查询到的内容:

首先,一个名为“别名”的子查询返回一个字符串,该字符串由LOCATIONNAMECROSSREF的匹配行中的所有字段组成,作为LocationNameCrossRef

=========

SELECT LocationNameCrossRef.SitesName, 
LCase(
    [SitesName] & " " & [PhoneNumberName] & " " & 
    [E911Name] & " " & [CanadaSiteName] & " " & 
    [Gateway] & " " & [NickName] & " " & [ServiceNowGwLocNm]) 
AS CrossStrings

FROM LocationNameCrossRef;

==========

然后使用列表框查询:

SELECT DISTINCTROW
Gateway.Location, Gateway.Router, 
Gateway.[Router IP], Aliases.CrossStrings, 
Nz([Gateway].[Ckt ID]) AS [Ckt ID], Nz([Gateway].[Interface]) AS Interface, 
Gateway.Carrier, Gateway.Description, 
Circuits.[NFAS Group], Circuits.[NFAS Description], 
Circuits.[Local Loop ID], Circuits.Protocol, 
Circuits.[Active/BU], Circuits.[Dmarc Pr], Circuits.[# Digits]

FROM (Gateway LEFT JOIN Circuits ON Gateway.[Ckt ID] = Circuits.[Ckt ID]) 
INNER JOIN Aliases ON Gateway.Location = Aliases.SitesName
WHERE 
(
   ((Nz([Gateway].[Ckt ID])) Like "*" & [Forms]![FindSites]![Ckt id] & "*") 
   AND ((Nz([Gateway].[Interface])) Like "*" & [Forms]![FindSites]![Interface] & "*") 
   AND ((Nz([Gateway].[Location])) Like "*" & "*")
   AND ((1)=1)) 
   OR (((Aliases.CrossStrings) Like "*" & [Forms]![FindSites]![Location] & "*")
)

ORDER BY Gateway.Location, Gateway.[Router IP], Gateway.Interface;

========

这个想法是最终产品应该只返回-但必须返回GATEWAY的所有行,其中[Forms]![FindSites]![Location]中输入的值与从别名表中查找的别名匹配

我知道这是一个糟糕的解释,但也许有人可以理解得足够多,可以提出一些澄清的问题-

感谢您的尝试 w

0 个答案:

没有答案