Поиск:

Ответ в темуСоздание новой темы Создание опроса
> один dataset зависит от другого dataset 
:(
    Опции темы
EmilRegis
Дата 10.12.2009, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 306
Регистрация: 21.9.2007

Репутация: нет
Всего: 4



Здравствуйте...что-то на могу сообразить как сделать следущую вещь и можно ли вообще такое сделать...
У меня есть программа, в которой данными заполняется табличка...при двойном щелчке на строчке этой таблицы появляется фастрепортовский отчёт...Так же есть функция "Показать всё" - она выводит отчёты по всем строкам таблицы...
Дело в том, что данные, которые отображаются в таблице и в отчётах - разные...Поэтому приходится делать довольно сложный запрос к бд, чтобы вытянуть и те данные, которые показываются в таблице, и те, которые отображаются в отчёте...Запрос оказывается очень сложным и выполняется долго(при том, что каждый раз достаётся 3-5тыс записей)
Было решено разделить запросы для таблицы и для отчётов...

Т.о. теперь у меня таблица заполняется очень быстро и для отчётов я создал параметризованный запрос, использующий в качестве параметров данные выбранной строки таблицы...Здесь всё работает замечательно, но проблема в другом.Теперь мне надо, чтобы работала функция "Показать всё", а это не получается, т.к. запрос параметризованный то у меня получается 5тыщ одинаковых отчётов, т.к. когда я пишу
Код

OraQuery1.ParamByName('sdid').AsString:=frDBDataSet.DataSource.DataSet.FieldValues['did'];
OraQuery1.ParamByName('slogin').AsString:=frDBDataSet.DataSource.DataSet.FieldValues['login'];

используются параметры одной строки...
Вопрос, как мне можно и можно ли сделать так, чтобы заполнить один датасет в зависимости от того как заполнен другой датасет?
PM MAIL   Вверх
EmilRegis
Дата 11.12.2009, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 306
Регистрация: 21.9.2007

Репутация: нет
Всего: 4



что, никто не знает?
PM MAIL   Вверх
Vas
Дата 11.12.2009, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

Репутация: 23
Всего: 28



Код

select * from table
where id in (select id from table where ....)

В скобках запрос показываемого датасета, если ты конечно свои записи показываешь запросом, а не фильтрацией по таблице


--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
EmilRegis
Дата 14.12.2009, 07:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 306
Регистрация: 21.9.2007

Репутация: нет
Всего: 4



всё было бы здорово...но в отчётном запросе есть одна дурацкая связка...Связываются 3 таблицы, в одной из них время работы, в другой логин того кто работает и общий логин для группы, а в третьей соответствие общего логина и ФИО...фишка в том, что надо доставать ФИО, соответствующее общему логину, а если время больше 17:00:00 то доставать ФИО, соответствующее логину CLVECH...в итоге из-за этого дурацкого условия запрос для отчётов выглядит примерно так
Код

select ...
from constr.RUB_DOC D,
 inq.usr,
 constr.otkaz O,
 pb.rub_doc_time tm 
where d.id = :sdid 
 and d.kor_bank = MN1.BILL_N(+) 
 and d.otkaz = O.id(+)
 and tm.id_doc=d.id
 and ( 
      (:sprb_hour<17 and upper(usr.cusrlogname) = :sccontr) 
      or 
      (:sprb_hour>=17 and upper(usr.cusrlogname)='CLVECH') 
   )


и вот последнее условие и рушит возможность использовать приведённый вами пример...для каждой записи в гриде известны sdid и sprb_hour, но вот как построить запрос, использующий эти параметры и проходящий по всем записям грида непонятно
PM MAIL   Вверх
Vas
Дата 14.12.2009, 08:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

Репутация: 23
Всего: 28



Логин для всех записей у вас получается один до 17, второй после 17, в чем тога проблема, передавайте вместо sdid одной строки сразу выборку? 
Код

select ...
from constr.RUB_DOC D,
 inq.usr,
 constr.otkaz O,
 pb.rub_doc_time tm 
where d.id in (select sdid from table where ....) 
 and d.kor_bank = MN1.BILL_N(+) 
 and d.otkaz = O.id(+)
 and tm.id_doc=d.id
 and ( 
      (:sprb_hour<17 and upper(usr.cusrlogname) = :sccontr) 
      or 
      (:sprb_hour>=17 and upper(usr.cusrlogname)='CLVECH') 
   )



--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
EmilRegis
Дата 14.12.2009, 08:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 306
Регистрация: 21.9.2007

Репутация: нет
Всего: 4



а как быть со строчкой
Код

and ( 
      (:sprb_hour<17 and upper(usr.cusrlogname) = :sccontr) 
      or 
      (:sprb_hour>=17 and upper(usr.cusrlogname)='CLVECH') 
   )

тут параметры sprb_hour и sccontr для каждой строки гридовой выборки разные...
то есть у меня первая выборка(для грида) выглядит следующим образом
Код

select ....,
          ...,
          sprb_hour,
          sccontr
from ...
where...

PM MAIL   Вверх
Vas
Дата 14.12.2009, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

Репутация: 23
Всего: 28



Цитата(EmilRegis @  14.12.2009,  08:20 Найти цитируемый пост)
тут параметры sprb_hour и sccontr для каждой строки гридовой выборки разные...
то есть у меня первая выборка(для грида) выглядит следующим образом

А откуда они в грид попадают то?
sprb_hour - это время? 
sccontr аналогично, для текущего пользователя ФИО по его логину одно 
Для формирования отчето оно одно, а не для каждой строки разное, или я чегото не догоняю?

Цитата(EmilRegis @  14.12.2009,  07:52 Найти цитируемый пост)
Связываются 3 таблицы, в одной из них время работы, в другой логин того кто работает и общий логин для группы, а в третьей соответствие общего логина и ФИО...фишка в том, что надо доставать ФИО, соответствующее общему логину, а если время больше 17:00:00 то доставать ФИО, соответствующее логину CLVECH

Ну если как то в гриде они связываются то также и в запросе в отчет можно их связать.


--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0694 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.