Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как в run-time добавить свои field-ы в dataset? [D7, MSSQL]


Bless ©   (2006-09-06 15:03:00) 

Сабж.
Можно ли ?
Если можно, то в какой момент Dataset создает поля и в какой момент мне можно создавать свои.
Аналогично и с удалением. Должен ли я их удалять при закрытии Dataset-а или Dataset сделает это сам? И кого назначать owner-ом моих полей при создании? Dataset?


evvcom   (2006-09-07 12:18:00) [1]

> [14] Bless ©   (07.09.06 11:33)

Найти соответствующий инструмент (не Дельфи). Мне было лень искать в свое время, но у меня и относительно немного файлов было. Нашел фаром все файлы с TAnyDataSet среди *.pas и *.dfm, ну штук 10-20 набралось, вошел в каждый из них и сделал замену искомого на TMyDataSet по всему тексту. Это полуавтомат. Есть желание, поищи полный автомат.


Bless   (2006-09-07 11:33:00) [2]


> Во-вторых, везде поменять можно и автоматом, а не руками.


Как?


evvcom   (2006-09-07 10:48:00) [3]

> [12] Bless ©   (07.09.06 10:36)
> заменяя везде стандартные на свои, лениво и стремно.

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


Bless   (2006-09-07 10:36:00) [4]


> evvcom ©   (07.09.06 10:16) [11]
>
> Если лень либу делать, раз все равно в ран-тайм делаешь,
>  то и создай объект в ран-тайм, но не стандартного, а наследника.
>  Чего париться?


Я хочу не датасет в ран-тайм создавать, а только field-ы().
Вообще-то твоя идея мне нравится (тем более можно в свой впихнуть счетчик ссылок, над чем подумываю), но переписывать, заменяя везде стандартные на свои, лениво и стремно.  Работает - не трогай.


evvcom   (2006-09-07 10:16:00) [5]

> [10] Bless ©   (07.09.06 10:05)

Сделай свою библиотеку компонент, которые унаследованы от стандартных/прочих продвинутых и добавляй туда примочки специфичные для твоего проекта. Очень удобно. В любой момент можешь в наследнике добавить любую полезную мелочь, а можешь и не мелочь. :)
Если лень либу делать, раз все равно в ран-тайм делаешь, то и создай объект в ран-тайм, но не стандартного, а наследника. Чего париться?


Bless   (2006-09-07 10:05:00) [6]

Ega23 ©   (06.09.06 17:25) [9]>

Именно в ран-тайм.
Хочу просто облегчить себе жизнь.
Есть датасеты, которые получают свои данные не через commandtext, а через AdoDataset.Clone. Чтобы в дизайн-тайм добавить свои поля, приходится написать им в commandText запрос (найдя его предварительно в хранимке), аналогичный по именам и типам стобцов тому, с которого он потому будет клонирован, после чего добавить свои столбцы, а затем commandText почистить.

И так каждый раз, когда изменится число возвращаемых стобцов.
А если б можно было это сделать в ран-тайм, то было бы хорошо.


Ega23   (2006-09-06 17:25:00) [7]


> Насколько я понял, надо либо ВСЕ поля создавать самому,
> либо ни одного. Так чтоб они создались сами в результате
> запроса, а потом я добавил только некоторые свои, видимо
> не выйдет?


Тебе непременно в ран-тайме создавать надо, или всё-таки в дизайн-тайме можно?


Bless   (2006-09-06 17:06:00) [8]

Не, нифига не получилось. Точнее, получилось, но не то.
Насколько я понял, надо либо ВСЕ поля создавать самому, либо ни одного. Так чтоб они создались сами в результате запроса, а потом я добавил только некоторые свои, видимо не выйдет?


Bless   (2006-09-06 16:38:00) [9]

Получилось. Спасибо.


evvcom   (2006-09-06 16:20:00) [10]

> [5] Bless ©   (06.09.06 15:45)

А без потомков значит сам заполняй Fields, а уж потом только Open. Имхо, с потомком лучче. :)


Bless   (2006-09-06 15:45:00) [11]

А без потомков?


evvcom   (2006-09-06 15:42:00) [12]

> [3] Bless ©   (06.09.06 15:36)
> к возвращенным полям добавить еще несколько полей (Lookup
> и Calculated).

procedure TMyDataSet.CreateFields;
begin
 inherited;
 if Assigned(FOnCreateFields) then
   FOnCreateFields(Self);
end;


Bless   (2006-09-06 15:36:00) [13]

Это выходит, так можно оторванные от базы датасеты творить?
Здорово! Пригодится.

Но это не то, что я в данный момент хочу, я недостаточно объяснил.
У меня есть нормальный adodataset с заполненным comandText-м, который что-то там возвращает. Я хочу в run-time чтобы после открытия данного датасета в добавок к возвращенным полям добавить еще несколько полей (Lookup и Calculated).


Bless   (2006-09-06 15:10:00) [14]


> Ega23 ©   (06.09.06 15:06) [1]


Спасибо. Сейчас попробую переделать на ADODataSet.


Ega23   (2006-09-06 15:06:00) [15]

Пример создания TClientDataSet:

procedure TGUIAlarmGridFrame.CreateCDS;
begin
 With cdsAlarms do
  begin

   With FieldDefs.AddFieldDef do
    begin
     DataType := ftInteger;
     Name := 'AlarmID';
    end;

   With FieldDefs.AddFieldDef do
    begin
     DataType := ftString;
     Name := 'DatInStr';
     Size:=20;
    end;

   With FieldDefs.AddFieldDef do
    begin
     DataType := ftString;
     Size:=255;
     Name := 'ZoneNam';
    end;

   With FieldDefs.AddFieldDef do
    begin
     DataType := ftString;
     Size:=255;
     Name := 'PointNam';
    end;

   With FieldDefs.AddFieldDef do
    begin
     DataType := ftString;
     Size:=255;
     Name := 'EventNam';
    end;

   CreateDataSet;
  end;

 dbgAlarmGrid.DataSource:=dsAlarms;
end;

//*****************************************************************************


Наверх

Титульная страница Поиск, карта сайта Написать письмо