| 
| 
 | Вопрос # 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]:Спасибо Дмитрий. С таблицей разобрался (нужно действительно убрать все статические поля в редакторе полей). Осталось реализовать, чтобы новые поля добавлялись в грид (автоматом они не добавляются), но с этим я уже разберусь. Спасибо за помощь!!! |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |