Как найти все запросы, связанные с таблицей в MS Access - PullRequest
14 голосов
/ 20 октября 2011

У меня есть база данных.В этом у меня есть сотни таблиц, макросов и форм.Нет, моя проблема в том, что мне нужно найти все запросы, макросы, связанные с конкретной таблицей.

Я использую Microsoft Access 2000.

Но я даже пытался использовать objet зависимости в Access 2007, он показал множество ошибок и автоматически закрылся.

Есть ли какой-нибудь простой способ получить это ???

Спасибо, Шанмугам

Ответы [ 4 ]

25 голосов
/ 20 октября 2011

Вы можете попытаться выполнить SQL-запрос к системным таблицам напрямую, чтобы получить зависимости, которые отображаются в версиях 2003+ более удобным для пользователя способом. Я не уверен, что это работает на 2000 (это работает в 2003+), но это стоит попробовать:

SELECT DISTINCT MSysObjects.Name
FROM MSysQueries INNER JOIN MSysObjects ON MSysQueries.ObjectId=MSysObjects.Id
WHERE (((MSysQueries.Name1) Like "*" & [TableName] & "*")) OR (((MSysQueries.Name2) Like "*" & [TableName] & "*"))

Возможно, вам придется проверить, есть ли у вас права доступа к системным таблицам ...

Надеюсь, это поможет

7 голосов
/ 20 октября 2011

Вы можете купить стороннее программное обеспечение, которое сделает это за вас, но я никогда не чувствовал в этом необходимости.Вместо этого я написал пару процедур, которые сделают это.Они требуют ссылки на DAO.

Первый (SearchQueries) ищет только текст запросов и работает довольно быстро.Второй (SearchDB) ищет формы, макросы, запросы, отчеты и код.Это займет немного больше времени, но очень тщательно.Использование должно быть самоочевидным, но задавайте вопросы, если вы не уверены ни в чем.

2 голосов
/ 11 октября 2016

Для тех, кто находит эту страницу, как я, ниже представлен вариант, который включает в себя появление строки во всех таблицах или выражениях всех запросов.(Это работало как в Access 2003, так и в Access 2013.)

SELECT DISTINCT 
MSysObjects.Name, MSysQueries.Name1, MSysQueries.Name2, MSysQueries.Expression
FROM 
MSysQueries 
INNER JOIN 
MSysObjects ON MSysQueries.ObjectId = MSysObjects.Id
WHERE 
(   (((MSysQueries.Name1) Like "*" & [String to search for] & "*")) 
 OR (((MSysQueries.Name2) Like "*" & [String to search for] & "*"))
 OR (((MSysQueries.Expression) Like "*" & [String to search for] & "*"))  )

And "Comment:  You will be prompted once, for the [String to search for]"<>""
And "Comment:  The starting point for this code came from link:"<>
"/5434596/kak-naiti-vse-zaprosy-svyazannye-s-tablitsei-v-ms-access "
;
2 голосов
/ 06 ноября 2015
SELECT DISTINCT 
MSysObjects.Name, MSysQueries.Name1, MSysQueries.Name2, MSysQueries.Expression
FROM 
MSysQueries 
INNER JOIN 
MSysObjects ON MSysQueries.ObjectId = MSysObjects.Id;

Это дало мне таблицу всего, что я искал. Спасибо Игорь.

...