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

osmor
Дата: 25.11.2009 13:13:34
"коллекция Procedure" читать как "коллекция Procedures"
mds_world
Дата: 25.11.2009 13:37:54
osmor,
вот такая любопытная картинка получается. Во Views попадают запросы с юнион, если они подзапросы. Когда Union в основном запросе, то не попадают.

Насчет Procedures, да, был невнимателен, действительно запросы Union содеожатся в этой коллекции.
osmor
Дата: 25.11.2009 13:44:52
Иван Абрамов
Спасибо. А может быть, и не только имена, но и выражение SQL представлений можно как-то запросом в системную таблицу получать?


список запросов с их текстами можно получить с помощью метода OpenSchema объекта adodb.connection
но учитывая выше описанную особенность access придется выполнять 2 раза, для view (adSchemaViews) и для
procedure (adSchemaProcedures)

текст так же можно получить через объект ADODB.Command метод commandText
примерно так, только коннекшн должен быть другой
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
         Debug.Print  .Views(i).Command.CommandText
        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
          Debug.Print .Procedures(i).Command.CommandText
        Next
    End If
End With
End Sub

osmor
Дата: 25.11.2009 13:52:59
mds_world
osmor,
вот такая любопытная картинка получается. Во Views попадают запросы с юнион, если они подзапросы. Когда Union в основном запросе, то не попадают.

Насчет Procedures, да, был невнимателен, действительно запросы Union содеожатся в этой коллекции.


С распределением по коллекциям views и Procedures вообще не все понятно
вот что пишет ms
http://support.microsoft.com/default.aspx?scid=kb;en-us;252888
ms

In general, a non-parameterized SELECT query is mapped to the ADOX Views collection and all other query types are mapped to the ADOX Procedures collection.


на практике это верно только для запросов созданных руками, а вот если запрос с простым select импортировать из другой БД, то он в 99% случаем попадает в procedures, но иногда во Views. (проверьте)
Специально с запросами с union не разбирался, просто при необходимости проверял обе коллекции