|
Вопрос # 2 578/ вопрос открыт / |
|
Здравствуйте, уважаемые эксперты! Извините, может повторюсь, но мне нужна помощь, а именно: программно добавлять поля в таблицу Access и программно удалять их. Также нужно после добавления поля в таблицу отображать его в DBGrid'e.
Начальные условия: есть три Edit'а (первый-имя поля таблицы, второй-имя заголовка колонки в гриде, третий-тип данных поля)
по нажатии кнопки BitBtn1 необходимо создать поле в таблице с необходимым типом данных и добавить колонку в грид.
Может это и просто, извините меня, но я только начинаю.
Также, не ругайте за то, что использую ADOTable, просто хочу пока сделать так, а потом уже перейду на квери. За ранее благодарен.
 |
Вопрос задал: Терехин Саша (статус: Посетитель)
Вопрос отправлен: 30 марта 2009, 23:02
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Косолапов Дмитрий Юрьевич
Здравствуйте, Терехин Саша!
Решение видится в использовании специальных запросов на изменение таблицы, который можно вызвать с помощью ADOConnetion1.Execute. Например, добавление поля:
ALTER TABLE Table1 ADD Field1 CHAR(16)
Разумеется, текст запроса нужно формировать динамически на основании заполненных едитов (соответственно Table1 - имя таблицы, Field1 - имя поля, CHAR(16) - тип поля, в данном случае текстовый с длиной до 16 символов). Удалить поле:
ALTER TABLE Table1 DROP Field1
После выполнения запроса грид, по идее, должен обновиться автоматически. Вот как-то так, если вкратце.
Мини-форум вопроса
Всего сообщений: 5; последнее сообщение — 4 апреля 2009, 00:29; участников в обсуждении: 2.
|
Терехин Саша (статус: Посетитель), 31 марта 2009, 23:08 [#1]:
Спасибо за совет. Все работает - в таблицу в базе поля добавляются.
Но теперь возникла очередная проблема: после добавления поля в таблицу базы, это самое поле нужно добавить в ADOTable (автоматически оно не добавляется), а так как поле в ADOTable не добавлено, то и в гриде оно не высвечивается.
пробовал следующий код: DataModule1.ADOTable_Main.Fields.Add(DataModule1.ADOTable_Main.FindField('newfield'))
но он выдает ошибку...
Как быть?
|
|
Косолапов Дмитрий Юрьевич (статус: 8-ой класс), 1 апреля 2009, 10:31 [#2]:
А, ну раз автоматом не обновляется, значит надо ADOTable прорефрешить ADOTable1.Refresh
|
|
Терехин Саша (статус: Посетитель), 2 апреля 2009, 01:02 [#3]:
ADOTable1.Refresh тоже не добавляет поле в таблицу
После команды ADOTable1.Refresh, пытаюсь обратиться к новосозданному полю типа DataModule1.ADOTable1.FieldByName('Dop1').AsString:='123345';
после этого кода выдает ошибку, что поля не существует....((((
|
|
Косолапов Дмитрий Юрьевич (статус: 8-ой класс), 3 апреля 2009, 17:30 [#4]:
Так-с, а статические поля (через редактор полей) есть? Если есть, то от них, скорее всего, нужно избавиться. Вместо Refresh также могу предложить
ADOTable1.Active:=false;
ADOTable1.Active:=true;
|
|
Терехин Саша (статус: Посетитель), 4 апреля 2009, 00:29 [#5]:
Спасибо Дмитрий. С таблицей разобрался (нужно действительно убрать все статические поля в редакторе полей). Осталось реализовать, чтобы новые поля добавлялись в грид (автоматом они не добавляются), но с этим я уже разберусь. Спасибо за помощь!!!
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|