我需要超出我能力范围的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