Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Получение списка полей таблицы
 
 автор: shaucha   (27.10.2008 в 16:12)   личное сообщение
 
 

Как получить список полей таблицы с указанием типа данных?
Желательно результат оформить в таблицу.


Еще интересует, как при использовании TransferSpreadsheet Method указать лист из которого тянуть данные из Excel? Или нужно использовать другой метод для этого?

  Ответить  
 
 автор: osmor   (27.10.2008 в 16:36)   личное сообщение
 
 

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

  Ответить  
 
 автор: shaucha   (27.10.2008 в 16:43)   личное сообщение
 
 

Спасибо )

  Ответить  
 
 автор: shaucha   (27.10.2008 в 16:57)   личное сообщение
 
 

Скорее всего мне нужно описать задачу, т.к. предложенный способ хороший и рабочий, но громоздкий (при выполнении).
У меня есть ряд файлов Excel, которые содержат схожие данные, но структура таблиц разная (количество и название полей).
В базе организуется импорт этих данных, дальнейшее структурирование и анализ.
С помощью TransferSpreadsheet Method я импортирую данные из Excel с именами полей.
ПОтом мне нужно проанализировать - что же я загрузил и как это все использовать с результирующем анализе, а именно - необходимо проверить, в какой колонке что расположено, можно ли разрешить дальнейшую вставку этих данных в основной массив и т.д.
Для этого я планировал получить список полей и тип данных (тип данных необязательно, но чувтсвую, что пригодится :)) таблицы.

  Ответить  
 
 автор: osmor   (27.10.2008 в 17:14)   личное сообщение
 
 

"читать про 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

  Ответить  
 
 автор: shaucha   (27.10.2008 в 17:33)   личное сообщение
 
 

не могу протестировать...
какую библиотеку подключить нужно?

  Ответить  
 
 автор: osmor   (27.10.2008 в 17:35)   личное сообщение
 
 

какой ACCESS?

  Ответить  
 
 автор: shaucha   (27.10.2008 в 17:36)   личное сообщение
 
 

2000

  Ответить  
 
 автор: osmor   (27.10.2008 в 17:42)   личное сообщение
 
 

по идее ничего. по умолчанию adodb должно быть подключено
проверьте Microsoft ActiveX Data Objects ... Library

  Ответить  
 
 автор: shaucha   (27.10.2008 в 17:45)   личное сообщение
 
 

нашел. )
работает! сейчас только все это в таблицу затолкаю )
спасибо большое!

  Ответить  
 
 автор: Анатолий (Киев)   (27.10.2008 в 18:34)   личное сообщение
 
 

Вашу задачу можно решить и проще, открыв Recordset (DAO или ADODB) и пройдясь по его семейству Fields.
Кроме того, промежуточные таблицы можно и не создавать, а читать данные прямо из Excel файла, использовав в тексте запроса строку подключения к нему.

  Ответить  
 
 автор: shaucha   (27.10.2008 в 18:45)   личное сообщение
 
 

О. Это очень интересно.
Можно поподробнее?


В дальнейшем я планировал пользователю выдавать список полей, и дать ему возможность выбрать что куда импортировать.

  Ответить  
 
 автор: П.Полиграфович   (27.10.2008 в 22:00)   личное сообщение
 
 

ТОЧ! здесь http://hiprog.com/index.php?option=com_content&task=view&id=437 товарищ делал через DAO и слишком как-то заморочено..

  Ответить  
 
 автор: shaucha   (28.10.2008 в 10:15)   личное сообщение
 
 

Ну почему? Это хороший пример. Может понадобиться такой архивариус.
Но в моем случае все проще.

  Ответить  
 
 автор: shaucha   (02.12.2008 в 13:43)   личное сообщение
 
 

Крутил и так и эдак.
В итоге получил пот такое вот:


'Анализ структуры таблицы
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

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList