Страница 1 из 1

Как добавить поле базы данных в Реал-тайм?

Добавлено: 08 июл 2014, 14:43
Dr_Grizzly
Добрый всем! Гуглю инет, и все не то, что надо... Есть Adoquery, перед запуском выполняю sql запрос на создание поля в базе данных "alter table ...". Когда программа запустилась - нужно дать ему название для заголовка в гриде и добавить его в грид ко всем имеющимся колонкам. При чем набор имеющихся колонок не полон, т.е некоторые скрыты. Здесь не подходит полная очистка и добавление всех полей имеющихся в базе... Какие есть решения подскажите плиз?

Re: Как добавить поле базы данных в Реал-тайм?

Добавлено: 08 июл 2014, 15:19
Naeel Maqsudov
Эх! Лет 15 не брал в руки Delphi…
У Adoquery (как и у любых потомков TCustomDataset) есть коллекция columns (или что-то типа того)
Её можно заполнить design-time (когда в дизайнере у соотв.компонента настраиваются поля — заголовок, ширина и т.д.), а можно и runtime.
Что-нибудь типа

Код: Выделить всё

with MyDataset.Columns.Add(...) do begin
    index = 5;   // есть свойство отвечающее за позицию поля связанных в гридах. Вроде index
    title = 'заголовок'; // ну и всё остальное…
    width = …
end;

Re: Как добавить поле базы данных в Реал-тайм?

Добавлено: 09 июл 2014, 07:20
Dr_Grizzly
Ну я тож в этом направлении двигался методом подбора процедур и функций... У Ado есть набор fields,F ieldDefList, а у DbGrid есть набор columns. Но прикол в том, что у адо.fields.add не вызывается в режиме реал-тайм, т.к. это свойство только для чтения, как пишет дельфа) у грида когда добавляю колонку - слетают все остальные колонки и остается только та - которую добавил только что ))

А еще отмечу интересную вещь - у ado.fieldbyname('<имя поля>') указав ново-созданное поле в режиме реалтайм - вылетает ошибка о том, что данного поля не существует... Но если обратиться так - ado.FieldDefList.Find('<имя поля>') - то могу обратиться к свойствам - например displayname...

Re: Как добавить поле базы данных в Реал-тайм?

Добавлено: 09 июл 2014, 08:42
Dr_Grizzly
я все кручусь где-то рядом... нашел еще кусок кода

Код: Выделить всё

var
Column: TColumneh;
begin
  Column := dbgrideh4.Columns.Add;
  Column.FieldName:='sk2';
добавляет поле новое, но убивает все остальные поля )

Соображаю над алгоритмом - сохранить настройки полей, добавить новое поле, восстановить настройки полей

Re: Как добавить поле базы данных в Реал-тайм?

Добавлено: 09 июл 2014, 09:14
Dr_Grizzly
Ура товарищи! Ура! Решил я проблему ))) В дизайнере у грида - добавил изначально колонки в columns и теперь метод Add добавляет новую колонку в конец грида ))) Спасибо всем!)

ээээх, рано радовался я.... колонка в грид добавилась, но не имеет реальной привязки к колонке в базе данных... и тут же еще проблема возникла - как обратится к данной колонке чтобы внести/изменить запись в базу данных.... ado.fieldbyname('sk2').value - не находит такое поле.