Как добавить поле базы данных в Реал-тайм?
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
-
- Сообщения: 407
- Зарегистрирован: 13 сен 2004, 12:05
- Откуда: Курган
- Контактная информация:
Добрый всем! Гуглю инет, и все не то, что надо... Есть Adoquery, перед запуском выполняю sql запрос на создание поля в базе данных "alter table ...". Когда программа запустилась - нужно дать ему название для заголовка в гриде и добавить его в грид ко всем имеющимся колонкам. При чем набор имеющихся колонок не полон, т.е некоторые скрыты. Здесь не подходит полная очистка и добавление всех полей имеющихся в базе... Какие есть решения подскажите плиз?
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто!
Да! Кстати! Ctrl+V реально вставляет!!! ХDD

- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Эх! Лет 15 не брал в руки Delphi…
У Adoquery (как и у любых потомков TCustomDataset) есть коллекция columns (или что-то типа того)
Её можно заполнить design-time (когда в дизайнере у соотв.компонента настраиваются поля — заголовок, ширина и т.д.), а можно и runtime.
Что-нибудь типа
У Adoquery (как и у любых потомков TCustomDataset) есть коллекция columns (или что-то типа того)
Её можно заполнить design-time (когда в дизайнере у соотв.компонента настраиваются поля — заголовок, ширина и т.д.), а можно и runtime.
Что-нибудь типа
Код: Выделить всё
with MyDataset.Columns.Add(...) do begin
index = 5; // есть свойство отвечающее за позицию поля связанных в гридах. Вроде index
title = 'заголовок'; // ну и всё остальное…
width = …
end;
-
- Сообщения: 407
- Зарегистрирован: 13 сен 2004, 12:05
- Откуда: Курган
- Контактная информация:
Ну я тож в этом направлении двигался методом подбора процедур и функций... У Ado есть набор fields,F ieldDefList, а у DbGrid есть набор columns. Но прикол в том, что у адо.fields.add не вызывается в режиме реал-тайм, т.к. это свойство только для чтения, как пишет дельфа) у грида когда добавляю колонку - слетают все остальные колонки и остается только та - которую добавил только что ))
А еще отмечу интересную вещь - у ado.fieldbyname('<имя поля>') указав ново-созданное поле в режиме реалтайм - вылетает ошибка о том, что данного поля не существует... Но если обратиться так - ado.FieldDefList.Find('<имя поля>') - то могу обратиться к свойствам - например displayname...
А еще отмечу интересную вещь - у ado.fieldbyname('<имя поля>') указав ново-созданное поле в режиме реалтайм - вылетает ошибка о том, что данного поля не существует... Но если обратиться так - ado.FieldDefList.Find('<имя поля>') - то могу обратиться к свойствам - например displayname...
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто!
Да! Кстати! Ctrl+V реально вставляет!!! ХDD

-
- Сообщения: 407
- Зарегистрирован: 13 сен 2004, 12:05
- Откуда: Курган
- Контактная информация:
я все кручусь где-то рядом... нашел еще кусок кода
добавляет поле новое, но убивает все остальные поля )
Соображаю над алгоритмом - сохранить настройки полей, добавить новое поле, восстановить настройки полей
Код: Выделить всё
var
Column: TColumneh;
begin
Column := dbgrideh4.Columns.Add;
Column.FieldName:='sk2';
Соображаю над алгоритмом - сохранить настройки полей, добавить новое поле, восстановить настройки полей
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто!
Да! Кстати! Ctrl+V реально вставляет!!! ХDD

-
- Сообщения: 407
- Зарегистрирован: 13 сен 2004, 12:05
- Откуда: Курган
- Контактная информация:
Ура товарищи! Ура! Решил я проблему ))) В дизайнере у грида - добавил изначально колонки в columns и теперь метод Add добавляет новую колонку в конец грида ))) Спасибо всем!)
ээээх, рано радовался я.... колонка в грид добавилась, но не имеет реальной привязки к колонке в базе данных... и тут же еще проблема возникла - как обратится к данной колонке чтобы внести/изменить запись в базу данных.... ado.fieldbyname('sk2').value - не находит такое поле.
ээээх, рано радовался я.... колонка в грид добавилась, но не имеет реальной привязки к колонке в базе данных... и тут же еще проблема возникла - как обратится к данной колонке чтобы внести/изменить запись в базу данных.... ado.fieldbyname('sk2').value - не находит такое поле.
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто!
Да! Кстати! Ctrl+V реально вставляет!!! ХDD
