|
|
|
| Как получить список полей таблицы с указанием типа данных?
Желательно результат оформить в таблицу.
Еще интересует, как при использовании TransferSpreadsheet Method указать лист из которого тянуть данные из Excel? Или нужно использовать другой метод для этого? | |
|
| |
|
|
|
| 1. http://hiprog.com/index.php?option=com_content&task=view&id=437
или читать про ADO OpenSchema
2. http://hiprog.com/index.php?option=com_content&task=view&id=127 | |
|
| |
|
|
|
|
| Скорее всего мне нужно описать задачу, т.к. предложенный способ хороший и рабочий, но громоздкий (при выполнении).
У меня есть ряд файлов Excel, которые содержат схожие данные, но структура таблиц разная (количество и название полей).
В базе организуется импорт этих данных, дальнейшее структурирование и анализ.
С помощью TransferSpreadsheet Method я импортирую данные из Excel с именами полей.
ПОтом мне нужно проанализировать - что же я загрузил и как это все использовать с результирующем анализе, а именно - необходимо проверить, в какой колонке что расположено, можно ли разрешить дальнейшую вставку этих данных в основной массив и т.д.
Для этого я планировал получить список полей и тип данных (тип данных необязательно, но чувтсвую, что пригодится :)) таблицы. | |
|
| |
|
|
|
| "читать про ADODB OpenSchema"
Dim rs As ADODB.Recordset
Set rs = CurrentProject.Connection.OpenSchema(adSchemaColumns, Array(Empty, Empty, "tblOrder"))
With rs
Do While Not .EOF
Debug.Print !COLUMN_NAME, !Data_Type
.MoveNext
Loop
End With
|
Data_Type - числовое обозначение типа данных поля
http://msdn.microsoft.com/en-us/library/ms969745.aspx - здесь есть расшифровка правда она не совсем для ACCESS | |
|
| |
|
|
|
| не могу протестировать...
какую библиотеку подключить нужно? | |
|
| |
|
|
|
|
|
| по идее ничего. по умолчанию adodb должно быть подключено
проверьте Microsoft ActiveX Data Objects ... Library | |
|
| |
|
|
|
| нашел. )
работает! сейчас только все это в таблицу затолкаю )
спасибо большое! | |
|
| |
|
|
|
| Вашу задачу можно решить и проще, открыв Recordset (DAO или ADODB) и пройдясь по его семейству Fields.
Кроме того, промежуточные таблицы можно и не создавать, а читать данные прямо из Excel файла, использовав в тексте запроса строку подключения к нему. | |
|
| |
|
|
|
| О. Это очень интересно.
Можно поподробнее?
В дальнейшем я планировал пользователю выдавать список полей, и дать ему возможность выбрать что куда импортировать. | |
|
| |
|
|
|
| ТОЧ! здесь http://hiprog.com/index.php?option=com_content&task=view&id=437 товарищ делал через DAO и слишком как-то заморочено.. | |
|
| |
|
|
|
| Ну почему? Это хороший пример. Может понадобиться такой архивариус.
Но в моем случае все проще. | |
|
| |
|
|
|
| Крутил и так и эдак.
В итоге получил пот такое вот:
'Анализ структуры таблицы
Public Function TableDataStrAnalise(table As String)
'Создаем таблицу-отчет
Dim tblAnN As String 'Задаем имя таблицы-отчета (имеет вид 'ИмяАнализируемойТаблицы'+StrRep)
tblAnN = table & "StrRep"
On Error Resume Next
DoCmd.DeleteObject acTable, tblAnN 'Удаляем таблицу с заданным именем (если она была уже создана)
Err.Clear
Dim tblnew As TableDef
Set tblnew = CurrentDb.CreateTableDef(tblAnN)
With tblnew 'Создаем поля
.Fields.Append .CreateField("OrdinalPosition", dbByte) 'Позиция поля
.Fields.Append .CreateField("Name", dbText) 'Имя поля
.Fields.Append .CreateField("Caption", dbText) 'Подпись поля
.Fields.Append .CreateField("Description", dbText) 'Описание поля
.Fields.Append .CreateField("DataType", dbLong) 'Тип данных поля
End With
CurrentDb.TableDefs.Append tblnew 'Таблица-отчет создана
Dim tblO As DAO.Recordset 'Открываем рекордсет таблицы-отчета для добавления данных
Set tblO = CurrentDb.OpenRecordset(tblAnN)
Dim tblA As DAO.Recordset 'Открываем рекордсет анализируемой таблицы
Dim tbf As DAO.TableDef
Dim fld As DAO.Field
Set tblA = CurrentDb.OpenRecordset(table)
For Each fld In tblA.Fields 'Цикл по полям анализируемой таблицы со считыванием свойств
With tblO 'Цикл заполнения таблицы-отчета
tblO.AddNew
tblO!OrdinalPosition = fld.OrdinalPosition
tblO!Name = fld.Name
tblO!Caption = fld.Properties("Caption")
tblO!Description = fld.Properties("Description")
tblO!DataType = fld.Type
tblO.Update
.MoveNext
End With 'Конец цикла заполнения таблицы-отчета
Next fld
MsgBox "Структура таблицы '" & table & "' готова.", vbInformation, "Сервис"
DoCmd.OpenTable tblAnN
End Function
|
| |
|
| |