Как обычно для 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
.