Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.11.05;
Скачать: [xml.tar.bz2];

Вниз

Как в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.044 c
2-1161070044
kyn66
2006-10-17 11:27
2006.11.05
Множество в качестве параметра для функции


15-1161169749
Сергей М.
2006-10-18 15:09
2006.11.05
Эмуляция HL EYE


6-1150219083
Интересующийся
2006-06-13 21:18
2006.11.05
Как определьть IP указывающий основной шлюз?


15-1161121504
ДЛЛ
2006-10-18 01:45
2006.11.05
А можно ли сделать так, чтобы другие не могли подключить мою ДЛЛ


1-1159270330
CSB
2006-09-26 15:32
2006.11.05
TrackBar с несколькими движками





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский