Мне нужна помощь с запросом MSAccess, который мне недоступен.Я не уверен, что могу даже предоставить достаточно информации, чтобы объяснить мою проблему, но я попытаюсь
Исходная информация заключается в том, что я работаю над формой MSaccess, которая объединяет данные телефона из нескольких разных источников, для многих разных сайтов, длялегкая ассоциация и поиск.
примером данных являются номера телефонов, операторы связи, номера поддержки операторов, IP-адреса шлюза, номера каналов T1, имя сайта, контакт сайта и т. д.
Я успешносоздал форму, которая, например, позволит вам ввести имя сайта и отобразить информацию о сайте (имя сайта, адрес, контакт, адрес и т. д.) из одной таблицы, все номера телефонов для этого сайта из другого шлюза таблиц (маршрутизатор)IP, ckt ID, номер интерфейса и т. Д. Из другой таблицы и некоторые другие вещи, добавляемые в
, которые могут быть отфильтрованы по местоположению - или местоположение может быть подстановочным знаком, а некоторые другие «предметно-специфические», например * для местоположения, затем частичныеномер телефона
эта часть все хорошо.
Теперь вопрос:Я пытаюсь использовать как можно больше первичных источников данных.Например, я могу загружать списки номеров телефонов с носителей, захватывать описания интерфейсов с маршрутизаторов и т. Д. Проблема в том, что все разные источники ссылаются на данные сайта под разными именами.Например, в одном месте название местоположения может называться «манчестер», в другом - «ветка 444», в еще одном - MNX.Существует много сайтов, на которых люди запоминают «вы всегда должны использовать это обозначение».
Первичная таблица / обозначение для всех данных - и форма - это таблица «Сайт».
Чтобы попытаться решить проблему, я создал таблицу «Псевдоним», в которой в каждой строке содержится поле «сайт» - основная ссылка, «шлюз» - ссылка на сайт, используемая в таблице шлюзов, «phonenum».'- ссылка на сайт, используемая в списке операторов,' Псевдоним '- имя, которое знает большинство людей, и т. д.
План состоял в том, что независимо от того, какой термин кто-то использовал для поиска / фильтрации, запрос найдет его вalias table, верните правильную ссылку для таблицы, в которой выполняется поиск, и используйте этот термин для поиска в ссылочной таблице.
Так, например, пользователь вводит псевдоним 'manchester' или его часть в поиске местоположения.поле и нажимает кнопку обновления. Запрос для списка «site» запрашивает таблицу псевдонимов (на самом деле «LocationNameCrossRef») и возвращает правильное имя для таблицы «site», запрос для списка «gateway» запрашивает таблицу «LocationNameCrossRef» и возвращаетправильное имя для таблицы 'gateway' и т. д.
Я думал, что лучший способ реализовать этосоздать единую строку из всех полей строки, а затем посмотреть, введено ли значение в форму и вернуть соответствующую строку на основе этого совпадения.
Но я не могу получить правильный запрос для достижения этой цели.
Чтобы получить конкретную информацию: таблица 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;
========
Идея состоит в том, чтоinal product должен возвращать только - но все строки из GATEWAY, где значение, введенное в [Forms]! [FindSites]! [Location], совпадает с псевдонимом, найденным из таблицы псевдонимов
Я знаю, что это ужасное объяснение, но, возможно, кто-то может понять его достаточно, чтобы задать несколько уточняющих вопросов -
спасибо за попытку w