Function TableDAO() Dim db As DAO.Database Dim tdf As DAO.TableDef Dim fld As DAO.Field Set db = CurrentDb()
Set tdf = db.TableDefs("Таблица1") ' Добавить поле tdf.Fields.Append tdf.CreateField("Поле1", dbText, 80) ' Удалить поле tdf.Fields.Delete "Поле1" Set fld = Nothing Set tdf = Nothing Set db = Nothing End Function
2. Верхний пример создает и удаляет поле. Объект таблица tdf содержит список полей fields, следовательно в цикле можно пройти по всем полям for i=0 to tdf.fields.Count-1 ... 3. Порядок полей создается в SQL запросе или можно, просматривая таблицу, передвинуть поля и запомнить ее расширенные свойства, что несовсем правильно. Программным способом такие вещие не делают.
А ка Access определяет в каком MDB создавать таблицу? Т.е. Как получить путь к конкретному MDB-файлу, на который ссылается MDE на "Таблица1"?
И можно ли программно "сжать и восстановить" MDB по пути из ссылке в Таблицах?
1. Конкретный файл определяется разработчиком, в лекциях все операции проводятся над конкретным внешним файлом. Суть идеи создаете Access Приложение (CreateObject("Access.Application") ), а потом над ним делаете операции. В примерах есть также создание и привязка к внешним таблицам. Оттуда берется информация о ссылке на внешний файл mdb, ODBC и т.п. Все переменные лучше смотреть в отладчике. For Each tdf In db.TableDefs strConnect = tdf.Connect If Len(strConnect) > 0 And left$(tdf.Name, 1) <> "~" Then If left$(strConnect, 4) = "ODBC" Then ReDim Preserve mastODBCInfo(intTableCount) With mastODBCInfo(intTableCount) .strTableName = tdf.Name rs.FindFirst "LocalTableName='" & .strTableName & "'" If Not rs.NoMatch Then .strConnectString = rs!ConnectString .strSourceTable = rs!SourceTable Else .strSourceTable = tdf!SourceTableName .strConnectString = tdf!ConnectString End If End With boolTablesPresent = True intTableCount = intTableCount + 1 End If End If Next 2. Сжатие возможно, если файл не занят каким-либо процессом. Const CreateLog = True Set objAccess = CreateObject("Access.Application") Set objFSO = CreateObject("Scripting.FileSystemObject") If objFSO.FileExists("c:\Access\test2.mdb") Then objFSO.DeleteFile("c:\Access\test2.mdb") End If errReturn = objAccess.CompactRepair _ ("c:\Access\test1.mdb", "c:\Access\test2.mdb", CreateLog)