Получить список всех представлений

Иван Абрамов
Дата: 24.11.2009 12:03:12
Добрый день.

Проект VB6 через ADO2.8 к БД Access2000.
Для получения списка всех представлений БД в коде VB6 сейчас используется библиотека ADOx.
Но ADOx не видет в убор представления с UNION, они просто для него не существуют.
Вопрос, можно ли получить список всех представлений базы как-то по-другому?
Может, запрос в какую-нибудь системную таблицу?

Заранее спасибо.
ё
Дата: 24.11.2009 12:08:04
Иван Абрамов
...
Может, запрос в какую-нибудь системную таблицу?

так попробуйте
SELECT MSysObjects.*
FROM MSysObjects
WHERE MSysObjects.Type=5
mds_world
Дата: 24.11.2009 12:13:52
ё,
надо еще фильтр на запросы-источники форм и контролов. Т.е.
SELECT [Name] FROM MSysObjects Where Left([Name],4)<>"~sq_" and [Type]=5
ё
Дата: 24.11.2009 12:18:53
mds_world
ё,
надо еще фильтр на запросы-источники форм и контролов. Т.е.
SELECT [Name] FROM MSysObjects Where Left([Name],4)<>"~sq_" and [Type]=5


...да, точно)))

спасибо
Иван Абрамов
Дата: 24.11.2009 15:23:25
Спасибо. А может быть, и не только имена, но и выражение SQL представлений можно как-то запросом в системную таблицу получать?
ё
Дата: 24.11.2009 15:56:07
...наверна, по-простому - нет (в смысле не через DAO.QueryDef)
вот таким запросом
SELECT MSysObjects.Name, MSysQueries.*
FROM MSysObjects INNER JOIN MSysQueries 
  ON MSysObjects.Id = MSysQueries.ObjectId
WHERE (Left([Name],4)<>"~sq_") 
  AND (MSysObjects.Type=5)
можно получить "распарсеную" строку запроса и "склеить"
Иван Абрамов
Дата: 24.11.2009 18:06:25
К сожалению, ничего не получается.
Выдается ошибка:
Записи не могут быть прочитаны; отсутствует разрешение на чтение данных для 'MSysObjects'.
osmor
Дата: 25.11.2009 11:42:33
Иван Абрамов
Добрый день.

Проект VB6 через ADO2.8 к БД Access2000.
Для получения списка всех представлений БД в коде VB6 сейчас используется библиотека ADOx.
Но ADOx не видет в убор представления с UNION, они просто для него не существуют.
Вопрос, можно ли получить список всех представлений базы как-то по-другому?
Может, запрос в какую-нибудь системную таблицу?

Заранее спасибо.


Как вы получаете список ?

adox + ACCESS
mds_world
Дата: 25.11.2009 12:57:38
osmor
adox + ACCESS

osmor, именно то о чем писал ТС, недоступно. Коллекция Views в ADOX.Catalog не видит запросы с Union.
osmor
Дата: 25.11.2009 13:12:16
mds_world,
так еcть еще коллекция Procedure, именно в ней должны быть все запросы которые содержат что-то кроме простого select
по ссылке есть процедура
Public Sub ADOXListQuerys()
'список запросов в базе
Dim adoxCat As ADOX.Catalog
Dim i As Integer
Set adoxCat = New ADOX.Catalog
'получаем ссылку на текущую БД
adoxCat.ActiveConnection = CurrentProject.Connection
With adoxCat
    Debug.Print "запросы в коллекции Views"
    If .Views.Count = 0 Then
        Debug.Print "Нет запросов в коллекции View"
    Else
       For i = 0 To .Views.Count - 1
          Debug.Print .Views(i).Name
        Next
      End If
    Debug.Print "Запросы в коллекции Procedures"
    If .Procedures.Count = 0 Then
        Debug.Print "Нет запросов в коллекции Procedures"
    Else
       For i = 0 To .Procedures.Count - 1
          Debug.Print .Procedures(i).Name
        Next
    End If
End With
End Sub
она должна выводить все.