MS Access индексированное представление - PullRequest
2 голосов
/ 10 мая 2011

Можно ли добавить индекс в Ms Access View?

Я пытаюсь выполнить этот запрос:

CREATE INDEX MyCustomViewIndex ON [MyView] (MyColumn) WITH DISALLOW NULL

, и я получаю это сообщение об ошибке.

Невозможно выполнить операторы определения данных в связанных источниках данных.

Есть предложения?

С уважением, Алекс

РЕДАКТИРОВАТЬ:

Определение My View:

create view MyView as SELECT TableA.Field1, MyUnionQuery.Field2
FROM TableA, MyUnionQuery 

Определение MyUnionQuery:

Select * from ViewX
UNION select * from ViewY

Все таблицы в одном файле MDB

Ответы [ 2 ]

3 голосов
/ 11 мая 2011

Как обычно для Access (ACE, Jet, что угодно), документация расплывчата: она говорит о «таблицах» и, конечно, VIEW является «просматриваемой таблицей», но я думаю, что в этом случаеэто конкретно относится к «базовым таблицам».Я сильно подозреваю, что индексы не поддерживаются для Access VIEW s.

. Когда я пытаюсь создать индекс с использованием SQL DDL, я также получаю сообщение об ошибке: «Невозможно выполнить операторы определения данных в связанных источниках данных».Вот некоторый код VBA для воспроизведения ошибки (создает новую .mdb во временной папке, ссылки не требуются, просто вставьте в модуль кода VBA, например, в Excel):

Sub NoIndexedViews()

  On Error Resume Next
  Kill Environ$("temp") & "\DropMe.mdb"
  On Error GoTo 0

  Dim cat
  Set cat = CreateObject("ADOX.Catalog")
  With cat
    .Create _
        "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=" & _
        Environ$("temp") & "\DropMe.mdb"
    With .ActiveConnection

      Dim Sql As String
      Sql = _
      "CREATE TABLE T (col1 INTEGER);"
      .Execute Sql

      Sql = _
      "CREATE VIEW V (col1) AS SELECT col1 FROM T;"
      .Execute Sql

      On Error Resume Next

      Sql = _
      "CREATE INDEX idx ON V (col1) WITH DISALLOW NULL"
      .Execute Sql

      MsgBox Err.Description

    End With
    Set .ActiveConnection = Nothing
  End With
End Sub

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

0 голосов
/ 10 мая 2011

Согласно сообщению об ошибке, это связанный источник данных. Это означает, что таблица не внутри доступа, а связана внутри.

Поскольку Access не контролирует таблицу, он не может выполнить запрошенную операцию.

Где таблица, из которой поступают данные?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...