DAO Создание таблицы с подписями полей

despana
Дата: 18.01.2012 18:04:06
Хочу сделать новую таблицу в .mdb файле, с известными заранее полями. Делает это все макрос в Excel-е.

Задача простая, вроде, но бьюсь уже сутки - безрезультатно, а проблема заключается в том, что поля в таблице должны быть с подписями (т.е. со свойством "Caption").

Что пробовал и почему не сработало:

Попытка 1. Пытался добавить сам это свойство в список свойств поля.

    Dim db As DAO.Database
    Dim td As DAO.TableDef
    Dim fd As DAO.Field
    Dim pd As DAO.Property

    Set db = DBEngine.OpenDatabase("c:\db1.mdb")

    Set td = db.CreateTableDef("NODES")
        
    Set fd = td.CreateField("RES", DAO.dbText, 50)
    td.Fields.Append fd
    Set pd = fd.CreateProperty("Caption", dbText, "РЭС")
    td.Fields("RES").Properties.Append pd


Не работает. Вылетает на последней строчке с ошибкой "Недопустимая операция. (Ошибка 3219)", видимо причина ошибки такая: "Попытка добавить свойство в семейство Properties объекта, который не поддерживает определяемые пользователем свойства."

Попытка 2. Создал вспомогательный файлик в котором создал требуемую табличку, и пытался ее копировать в главную БД.

    Dim db As DAO.Database

    Set db = DBEngine.OpenDatabase("c:\db1.mdb")

    db.Execute ("SELECT * INTO NODES FROM NODES IN "c:\dbTemplate.mdb"")


Все работает, табличка копируется, но без подписей.

Пробовал еще кучу всего, но никак. Есть идеи? Неужели создать свойство "Caption" у поля можно только руками через Access?
непоймучка
Дата: 18.01.2012 18:30:13
despana
Хочу сделать новую таблицу в .mdb файле, с известными заранее полями. Делает это все макрос в Excel-е.

Задача простая, вроде, но бьюсь уже сутки - безрезультатно, а проблема заключается в том, что поля в таблице должны быть с подписями (т.е. со свойством "Caption").

Что пробовал и почему не сработало:

Попытка 1. Пытался добавить сам это свойство в список свойств поля.

    Dim db As DAO.Database
    Dim td As DAO.TableDef
    Dim fd As DAO.Field
    Dim pd As DAO.Property

    Set db = DBEngine.OpenDatabase("c:\db1.mdb")

    Set td = db.CreateTableDef("NODES")
        
    Set fd = td.CreateField("RES", DAO.dbText, 50)
    td.Fields.Append fd
    Set pd = fd.CreateProperty("Caption", dbText, "РЭС")
    td.Fields("RES").Properties.Append pd


Не работает. Вылетает на последней строчке с ошибкой "Недопустимая операция. (Ошибка 3219)", видимо причина ошибки такая: "Попытка добавить свойство в семейство Properties объекта, который не поддерживает определяемые пользователем свойства."

Попытка 2. Создал вспомогательный файлик в котором создал требуемую табличку, и пытался ее копировать в главную БД.

    Dim db As DAO.Database

    Set db = DBEngine.OpenDatabase("c:\db1.mdb")

    db.Execute ("SELECT * INTO NODES FROM NODES IN "c:\dbTemplate.mdb"")


Все работает, табличка копируется, но без подписей.

Пробовал еще кучу всего, но никак. Есть идеи? Неужели создать свойство "Caption" у поля можно только руками через Access?
Создавать новые свойства полей с помощью CreateProperty можно только для полей сохраненных TableDef'ов. Поэтому перед тем как делать это в вашем коде следует сначала сохранить вновь созданную таблицу:
    Set td = db.CreateTableDef("NODES")
        
    Set fd = td.CreateField("RES", DAO.dbText, 50)
    td.Fields.Append fd
'------------------------------------
    db.TableDefs.Append td '<- вот так
'------------------------------------
    Set pd = fd.CreateProperty("Caption", dbText, "РЭС")
    td.Fields("RES").Properties.Append pd
...
непоймучка
Дата: 18.01.2012 18:47:46
в принципе, вы могли бы и в вашем примере 2 после выполнения запроса на создание таблицы, открыть его TableDef и "досоздать" в нем ваши Caption точно так же через CreateProperty (таблица ведь уже будет существовать, поэтому свойства в этом случае можно сразу создавать)
despana
Дата: 18.01.2012 18:56:54
Ах тыж! Все так просто. И ведь были мысли в эту сторону.
Попробовал - все получилось. Спасибо!