программно добавить поле в существующеу таблице

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
basicom
Обычный пользователь
Обычный пользователь
 
Сообщения: 60
Зарегистрирован: 20.05.2003 (Вт) 10:10
Откуда: Екатеринбург

программно добавить поле в существующеу таблице

Сообщение basicom » 21.09.2004 (Вт) 13:21

Есть база.mdb одну из таблиц надо расширить(добавить несколько колонок). Работаю с DAO.
открываю базу:

Set StatWS = DBEngine.Workspaces(0)
Set StatDB = StatWS.OpenDatabase(s)
Set ConfigRS = StatDB.OpenRecordset("config", dbOpenTable)

далее ругается на метод

Set MyField = ConfigRS.CreateField(s, dbDouble)

если как в Help-е:

Dim MyDB As Database, Fd As Field
Set MyDB = Workspaces(0).OpenDatabase("BIBLIO.MDB") ' Open a database.
Fd.Name = "Phone" ' Set field properties.
Fd.Type = dbText
Fd.Size = 15
MyDB.TableDefs("Authors").Fields.Append Fd ' Add field to collection.

ругается, что объект Fd не определён

Вообщем просветите : как изменить конфигурацию таблиц

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 21.09.2004 (Вт) 13:32

Вообще - нормальный SQL синтаксис модификации существующей таблицы ищется в HELP-е по словам ALTER TABLE...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 21.09.2004 (Вт) 13:50

Ты не указал Set Fd = New Field
Lasciate ogni speranza, voi ch'entrate.

basicom
Обычный пользователь
Обычный пользователь
 
Сообщения: 60
Зарегистрирован: 20.05.2003 (Вт) 10:10
Откуда: Екатеринбург

Сообщение basicom » 22.09.2004 (Ср) 6:33

добавил:

Set Fd = New Field

теперь ругается на метод Append:

ConfigRS.Append Fd

что ещё делаю не правильно ????

и если не затруднит, то пример с использованием ALTER TABLE (не в общих чертах а из кода)

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 22.09.2004 (Ср) 7:46

Примерчик для ADO/DAO:

Код: Выделить всё
    Dim s As String
   
    ' ADO
    Dim cn As New ADODB.Connection, ra As New ADODB.Recordset
    cn.Provider = "Microsoft.Jet.OLEDB.4.0"
    cn.Open "Data Source=" & App.Path & "\Demo.mdb"
    ' Посмотрим сколько полей в таблице (для получения имени нового поля)
    ra.MaxRecords = 1
    ra.Open "SELECT * FROM tblDemo", cn, adOpenStatic, adLockOptimistic
    s = "T" & ra.Fields.Count + 1
    ra.Close
    ' Добавим новое поле
    cn.Execute "ALTER TABLE tblDemo ADD COLUMN " & s & " TEXT(25)"
   
    ' DAO
    Dim db As DAO.Database, rd As DAO.Recordset
    Set db = DBEngine.OpenDatabase(App.Path & "\Demo.mdb", , False)
    ' Посмотрим сколько полей в таблице (для получения имени нового поля)
    Set rd = db.OpenRecordset("SELECT TOP 1 * FROM tblDemo")
    s = "T" & rd.Fields.Count + 1
    rd.Close
    ' Добавим новое поле
    cn.Execute "ALTER TABLE tblDemo ADD COLUMN " & s & " TEXT(25)"
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 22.09.2004 (Ср) 9:24

А как именно ругается?
Lasciate ogni speranza, voi ch'entrate.

basicom
Обычный пользователь
Обычный пользователь
 
Сообщения: 60
Зарегистрирован: 20.05.2003 (Вт) 10:10
Откуда: Екатеринбург

Сообщение basicom » 22.09.2004 (Ср) 9:34

Спасибо! В DAO всё работает!


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

    TopList