Конференция "Базы" » В IB связать, отфильтровать и вывести несколько больших ХП [D7, Firebird 2.0]
 
  • samalex2504 (28.03.11 16:23) [0]
    Уважаемые знатоки!!!
    В FB2.0+D7 написана база документооборота.
    Состоит из 5 главных таблиц (Т) и большого чиста вложенных Т и справочников. Главные Т связаны друг с другом по ключевым полям.
    Для каждой Т уже написана хранимая процедура (ХП) с большим количеством входных и выходных параметров. Сейчас программа поделена на 5 вкладок, в каждой из которых есть вывод данных с фильтрацией.
    Вопрос - как сделать общую фильтрацию? То есть связать все ХП.
    Если писать общую ХП, то FB будет ругаться на большое количество входных и выходных параметров.
    Пробовал связывать ХП через join, но тоже самое + очень медленно получается.

    Поделитесь, пжс, кто реализовывал подобные задачи. Может, можно в Delphi через компоненты вывода данных сделать?

    Заранее благодарен!!!
  • Sergey13 © (28.03.11 16:49) [1]
    Что есть "вложенные таблицы"?
    Если есть ХП, то зачем фильтрация?
  • samalex2504 (28.03.11 17:02) [2]
    Вложенные таблицы - это к делу не относится.
    Смысл - сделать общий фильтр.
    Если в ХП соединить все 5 таблиц, то FB не пропустит такого большого количества входных и выходных параметров.
  • Sergey13 © (28.03.11 17:35) [3]
    Если на паровозе нельзя доехать за час из А в Б, то либо меняют либо транспорт либо пункт назначения.
    Что за немыслимое количество входных и выходных параметров? Откуда они?
  • ssnakess © (28.03.11 19:02) [4]
    без структуры таблиц непонятен смысл их объединения и установки какого-то там общего фильтра, да и если программа организованна "вкладками", то повесьте на выбор той или иной вкладки установку фильтра перед отображением данных и всё.
     
    по поводу join. есть сайтик http://www.sqlly.com/ там лежит классная программа (для россии безплатно т.е. дагом) так вот, у неё есть анализатор запросов, который в графическом виде выдает какие именно индексы используются или не используются для выполнения того или иного запроса. Попробуйте сделать требуемый запрос в ней и посмотрите, может все таки можно обойтись обычным join :)
  • samalex2504 (29.03.11 16:03) [5]
    Большое количество входных и выходных данных из-за желания заказчика.
    Там было коротко сказано : желаю фильтровать по всему.

    Попробую использовать временные таблицы. В FB 2.1 есть такая возможность.
    Кто-нибудь работал с ними в FB ?
  • Sergey13 © (29.03.11 17:43) [6]
    > [5] samalex2504   (29.03.11 16:03)
    Насколько я понимаю вы создали 5 основных широченных (полей на стописят) таблиц и раз заказчик "желаю фильтровать по всему" тянете все поля как параметры в хранимку, которая неизвестно пока зачем нужна. Так?
    А "вкладки" у вас наверное называются "Приказы", "Постановления" и т.п.?
  • samalex2504 (29.03.11 17:47) [7]
    Да, примерно так.
  • samalex2504 (29.03.11 17:55) [8]
    Заказчики до этого вели базу в экселе. В нескольких файлах несвязанных друг с другом. Я написал базу, нормализовал.
    Но они постоянно требуют, чтобы возможность фильтрации была по каждому полю. Еще будет необходимость работы через низкоскоростные каналы связи. Поэтому я не хочу качать лишние данные через сеть, а фильтровать их прямо на сервере.
  • Loginov Dmitry © (29.03.11 21:10) [9]

    > Но они постоянно требуют, чтобы возможность фильтрации была
    > по каждому полю. Еще будет необходимость работы через низкоскоростные
    > каналы связи. Поэтому я не хочу качать лишние данные через
    > сеть, а фильтровать их прямо на сервере.


    В качестве предложения:
    1. Загрузить с сервера на клиент записи за некоторый выбранный период.
    2. Фильтровать записи на клиенте. При этом фильтрацию можно организовать по любому полю, не задействуя сервер.

    При таком подходе объем пересылаемых данных скорее всего будет минимальным, нагрузка на сервер будет мизерной, необходимость в хранимых процедурах с сотней параметров попросту отпадет.
  • Игорь Шевченко © (29.03.11 21:42) [10]
    Sergey13 ©   (29.03.11 17:43) [6]


    > Насколько я понимаю вы создали 5 основных широченных (полей
    > на стописят) таблиц


    ради интереса посмотрел на результаты запроса
    SELECT table_name,count(*)
     FROM user_tab_columns
    GROUP BY table_name
    ORDER BY 2 DESC

    стало стыдно :)
    143 максимум, в первой десятке все больше 80
  • samalex2504 (30.03.11 11:08) [11]
    У меня сейчас в программе сделано 5 вкладок(по каждой на таблицу) с фильтрами и гридами. Фильтры во вкладках работают независимо.
    А нужно все связать.
    Хотел через связь таблиц в Delphi - MasterSourse. Но это воэможно только для IBTable. Я использую IBQuery для вывода данных.
  • Виталий Панасенко (30.03.11 11:55) [12]

    > Но это воэможно только для IBTable. Я использую IBQuery
    > для вывода данных.

    глупости
  • samalex2504 (30.03.11 12:27) [13]

    > Виталий Панасенко   (30.03.11 11:55) [12]
    >
    >
    > > Но это воэможно только для IBTable. Я использую IBQuery
    > > для вывода данных.
    >
    > глупости
    >


    Объясни. Глупости - что хотел использовать ? или связывание можно реализовать на IBQuery ?
  • Виталий Панасенко (30.03.11 12:29) [14]

    > или связывание можно реализовать на IBQuery ?

    конечно возможно, DataSource тебе в помощ
  • Sergey13 © (30.03.11 14:15) [15]
    > [11] samalex2504   (30.03.11 11:08)
    > У меня сейчас в программе сделано 5 вкладок(по каждой на
    > таблицу) с фильтрами и гридами.

    А можешь сказать чем, например, вторая отличается от, например, четвертой ПРИНЦИПИАЛЬНО?
    ИМХО у тебя не правильно спроектирована структура документооборота как такового. И ты уже начал огребать по полной плоды такого проектирования.
  • та сделано ж по аногии M$ Excel
 
Конференция "Базы" » В IB связать, отфильтровать и вывести несколько больших ХП [D7, Firebird 2.0]
Есть новые Нет новых   [134431   +15][b:0][p:0]