Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 578

/ вопрос открыт /

Здравствуйте, уважаемые эксперты! Извините, может повторюсь, но мне нужна помощь, а именно: программно добавлять поля в таблицу Access и программно удалять их. Также нужно после добавления поля в таблицу отображать его в DBGrid'e.
Начальные условия: есть три Edit'а (первый-имя поля таблицы, второй-имя заголовка колонки в гриде, третий-тип данных поля)
по нажатии кнопки BitBtn1 необходимо создать поле в таблице с необходимым типом данных и добавить колонку в грид.

Может это и просто, извините меня, но я только начинаю.
Также, не ругайте за то, что использую ADOTable, просто хочу пока сделать так, а потом уже перейду на квери. За ранее благодарен.

Приложение:
  1. Delphi 7, WinXP
  2.  
  3.  
  4.  
  5.  
  6.  


Терехин Саша Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Терехин Саша (статус: Посетитель)
Вопрос отправлен: 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

После выполнения запроса грид, по идее, должен обновиться автоматически. Вот как-то так, если вкратце.

Ответ отправил: Косолапов Дмитрий Юрьевич (статус: 8-ой класс)
Время отправки: 31 марта 2009, 09:27
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 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]:

Спасибо Дмитрий. С таблицей разобрался (нужно действительно убрать все статические поля в редакторе полей). Осталось реализовать, чтобы новые поля добавлялись в грид (автоматом они не добавляются), но с этим я уже разберусь. Спасибо за помощь!!!

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 10 апреля 2020, 04:08
Выполнено за 0.02 сек.
Рейтинг@Mail.ru