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