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

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

как продублировать датасет? [D5, FireBird, FIBPlus]


zunder ©   (2005-02-02 15:02:00) 

есть датасет с запросом и созданными полями (в дизайнере)
как можно продублировать этот датасет если в нем присутствуют вычисляемые поля.
если просто копировать запрос то теряются вычисляемые поля.
есть идея скопировать обработчик для вычисляемых полей и самому создать поле.
может кто-нить подскажет лучшее решение?


atruhin   (2005-02-04 12:53:00) [1]

На сайте Николая Банникова есть набор компонент UDB - датасет, он позволяет работать в частности через FIB и позволяет содержимое датасета выгрузить в поток и загрузить из потока, всего 2 строки реализуют то что тебе нужно. Правдо непонятно зачем :)


zunder   (2005-02-03 13:20:00) [2]

вопрос - "поля лучше добавлять до открытия Датасета или после?"


ЮЮ   (2005-02-03 11:13:00) [3]

FieldDefs, судя по Help-у, только для физических полей. Просканируй dstFields на наличие Calculated полей и добавь такие же в dstMain.Fields


zunder   (2005-02-03 10:57:00) [4]

ЮЮ ©   (03.02.05 10:28) [15]
Попробовал Assign'ом присвоить FieldDefs из полученного датасета в новый:
dstMain.FieldDefs.Assign( dstFields.FieldDefs );
 // создаем все имеющиеся поля
 for i := 0 to dstMain.FieldDefs.Count-1 do
   dstMain.FieldDefs[i].CreateField(dstMain);
Но при попытке обратится к какому-нить вычисляемому полю прога лажается говорит что - нет такого поля.


ЮЮ   (2005-02-03 10:28:00) [5]

[14] - вот ты и написал, что нужно. Теперь дело за реализацией - вперед. См. TFields.Add, TFieldDefs, TxxxField.Create.


zunder   (2005-02-03 08:45:00) [6]

вообщем мне нужно в полученных датасетах находить вычисляемые поля (OnCalcFields), создавать их в новом датасете и подцеплять обработчик OnCalcFields


Sergey13   (2005-02-02 17:56:00) [7]

Честно говоря понял мало.
Еще вариант. CDS или таблица в памяти типа RxMemoryData. Закинь туда то что тебе надо, добавь поля, пробегись циклом и расчитай недостающее.


zunder   (2005-02-02 17:37:00) [8]

Sergey13 ©   (02.02.05 17:27) [11]
Фильтры в виде параметров (их задают юзеры), новый запрос формирую. Вариант с ХП не катит - слишком много изаменений в проге нужно делать.
Как мне быть с вычисляемыми полями, которые созданы в дизайнере и вычисляются в OnCalcFields?


Sergey13   (2005-02-02 17:27:00) [9]

2[10] zunder ©   (02.02.05 17:20)
Ничего не понял.
>Мне приходит два датасета в одном нужны фильтры в другом список полей
Откуда приходит? По тому который с фильтрами (что там за фильтры в датасете?) нельзя сделать список полей?

Может тебе надо просто сформировать динамически новый запрос? Или ХП?


zunder   (2005-02-02 17:20:00) [10]

Соловьев ©   (02.02.05 16:53) [8]
Датасет создается для формирования отчетов в Excel.
Sergey13 ©   (02.02.05 16:54) [9]
Мне приходит два датасета в одном нужны фильтры в другом список полей, связка таблиц одинаковая.
Соответсвенно я формирую запрос используя эти 2 датасета,
но в некоторых датасетах поля созданы в дизайнере и их нет в запросах полученных мной датасетах, соответственно их нет и в формируемом мной запросе, а они нужны юзеру. Причем такие поля как правило вычисляемые через OnCalcFields. Вот я и думаю как их можно красиво получить в создаваемом мной датасете. Единственное до чего я додумался можно посмотреть в самом начале.


Sergey13   (2005-02-02 16:54:00) [11]

2[7] zunder ©   (02.02.05 16:52)
Похоже вроде на удаление гландов электродрелью через... ну ты понял.
Может я и не правильно понял. Поподробнее можно?


Соловьев   (2005-02-02 16:53:00) [12]


> дубль нужен чтобы запрос подправить и поля лишние убрать
> (по выбору пользователя)

подправить в каком смысле?
поля лишние убрать? Columns[i].Visible = false?


zunder   (2005-02-02 16:52:00) [13]

Соловьев ©   (02.02.05 15:44) [6]
дубль нужен чтобы запрос подправить и поля лишние убрать (по выбору пользователя)


Соловьев   (2005-02-02 15:44:00) [14]


> нашел Clone в делфе,

это для АДО, а тебе надо в ФИБах искать.

> скопировать обработчик для вычисляемых полей и самому создать
> поле.

зачем тебе еще дубль?


zunder   (2005-02-02 15:41:00) [15]

Соловьев ©   (02.02.05 15:04) [1]
нашел Clone в делфе, только вот справку по нему не нашел
а что по поводу этого думаешь?
>скопировать обработчик для вычисляемых полей и самому создать поле.


Vlad   (2005-02-02 15:24:00) [16]


> zunder ©   (02.02.05 15:02)  

Копировать данные можно в TClientDataSet например.


msguns   (2005-02-02 15:23:00) [17]

Создать на датасете еще один курсор (Assign)


Johnmen   (2005-02-02 15:19:00) [18]

ДатаСет есть результатвыполнения запроса.
Что значит "продублировать", "копировать запрос" etc ?


Соловьев   (2005-02-02 15:04:00) [19]

зачем дубль?
кажется у плюсов есть метод клон и дубликейт...


Наверх

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