MSAccess запрос в форме с использованием таблицы псевдонимов - PullRequest
0 голосов
/ 02 декабря 2018

Мне нужна помощь с запросом 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

...