![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как в 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;
//*****************************************************************************