Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.11.05;
Скачать: CL | DM;

Вниз

Как в run-time добавить свои field-ы в dataset?   Найти похожие ветки 

 
Bless ©   (2006-09-06 15:03) [0]

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


 
Ega23 ©   (2006-09-06 15:06) [1]

Пример создания 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;

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


 
Bless ©   (2006-09-06 15:10) [2]


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


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


 
Bless ©   (2006-09-06 15:36) [3]

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

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


 
evvcom ©   (2006-09-06 15:42) [4]

> [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:45) [5]

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


 
evvcom ©   (2006-09-06 16:20) [6]

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

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


 
Bless ©   (2006-09-06 16:38) [7]

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


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

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


 
Ega23 ©   (2006-09-06 17:25) [9]


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


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


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

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

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

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


 
evvcom ©   (2006-09-07 10:16) [11]

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

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


 
Bless ©   (2006-09-07 10:36) [12]


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


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


 
evvcom ©   (2006-09-07 10:48) [13]

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

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


 
Bless ©   (2006-09-07 11:33) [14]


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


Как?


 
evvcom ©   (2006-09-07 12:18) [15]

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

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



Страницы: 1 вся ветка

Текущий архив: 2006.11.05;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.039 c
15-1161093301
Почемучка
2006-10-17 17:55
2006.11.05
Помогите


1-1159177313
Alex_C
2006-09-25 13:41
2006.11.05
Как сохранить цветовое выделение текста в TRichEdit?


6-1149699693
Whitevova
2006-06-07 21:01
2006.11.05
Как передать голос по сети и ..., Internet


15-1161079948
Empleado
2006-10-17 14:12
2006.11.05
Интересно, через какое время оно придет в каждый дом?


1-1159238370
dreamse
2006-09-26 06:39
2006.11.05
Работа с Flash