Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.07.17;
Скачать: [xml.tar.bz2];

Вниз

как сделать специфические столбцы в QReport е   Найти похожие ветки 

 
Valeriya   (2003-06-24 08:37) [0]

Уважаемые специалисты ! Требуется сделать отчёт, в котором в столбцах отображаются выборочно значения полей, примерно такого вида:

фамилия: | вид аттест-и(1) |вид аттест-и(2) |вид аттест-и(n) |
....(Fam1) | Date_att | Date_att |
....(Fam2) | | Date_att | Date_att
....(Fam3) | Date_att | | Date_att

Date_att - поле БД


 
ЮЮ   (2003-06-24 09:16) [1]

procedure TForm1.QRDBText1Print(sender: TObject; var Value: String);
begin
if <не надо печатать> then Value := "";
end;

Или написать запрос, возвращающий значения именно таким образом.
Но для этого надо знать структуру таблиц


 
Valeriya   (2003-06-24 09:27) [2]

Надо обязательно запрос, т.к. неизвестно, где будут значения, а где нет. Главная база Work из неё берётся ID_work, Date_att - берётся из подчинённой базы - Att_work (где есть ID_work,ID_att и Date_att). Work -> Att_work (ID_work)


 
ЮЮ   (2003-06-24 09:31) [3]

А как определяется вид аттестации?


 
ЮЮ   (2003-06-24 09:32) [4]

И какая БД? И возможно ли несколько записей по одному виду аттестации. Если да, то как их выводить?


 
Valeriya   (2003-06-24 09:41) [5]

Вид аттестации нах-ся в справочнике видов аттестации. В базе Att_work собирается вся инфа о прохождении челом аттестации. Он естественно аттестуется не один раз, но нужна последняя дата по каждому виду аттестации, по которому он аттестовался. Получится, что у каждого человека в отчёте будет не более одной даты для каждого вида аттестации.


 
Семен Сорокин   (2003-06-24 09:44) [6]

Valeriya © (24.06.03 09:41)
Пока Вы не представите полную структуру учавствующих в запросе таблиц и тип СУБД, Вам никто ничего не подскажет.


 
Valeriya   (2003-06-24 09:53) [7]

Тип - Paradox
Структура такая:
БД Work БД Att_work БД Vid_att
ID_work -> ID_work Vid_att
Fam ID_att <- ID_att
Name Date_att ...
... ...



 
Johnmen   (2003-06-24 10:05) [8]

То есть, фактически, нужна кросс-таблица (по-моему так это называется)...
Придется использовать что-то наподобие временной таблицы в памяти и формировать ее "ручками".


 
Семен Сорокин   (2003-06-24 10:10) [9]

сначала такой запрос
SELECT w.*, v.* FROM work AS w, vid_att AS v
а потом пробегая по всем строкам
SELECT date_att FROM att_work WHERE id_work=:id_work AND id_att=:id_att


 
Valeriya   (2003-06-24 10:16) [10]

У меня есть временная таблица, куда всё скидывается из запроса:

SELECT Att_work.ID_att, W.ID_work, W.ID_podr, Sp_rul.ID_att, Sp_rul.Name_short, Sp_rul.Name_att, W.ID_prof, Att_work.Date_att
FROM "Sp_rul.db" Sp_rul
INNER JOIN "Att_work.DB" Att_work
ON (Att_work.ID_att = Sp_rul.ID_att)
INNER JOIN "Work.DB" W
ON (W.ID_work = Att_work.ID_work)
WHERE (W.ID_podr in ("+inttostr(aPodr)+"))";
AND (Att_work.ID_att in ("+aVidAtt+")) AND (Att_work.Date_att=(SELECT max(Att_work.Date_att) FROM "Att_work.DB" Att_work WHERE (W.ID_work = Att_work.ID_work)))";


 
Семен Сорокин   (2003-06-24 10:18) [11]

проблема значит в том как реализовать переменное количество столбцов в отчете, а не сам запрос? я так понял?


 
Valeriya   (2003-06-24 10:34) [12]

Не, проблема в том, как разместить даты


 
Семен Сорокин   (2003-06-24 10:38) [13]

Не, проблема в том, как разместить даты
Не использовать DB-компоненты, а юзать обычный TQRLabel+OnBeforePrint


 
Valeriya   (2003-06-24 10:58) [14]

Извините, можно чуть рассказать как это можно сделать, плиз


 
Семен Сорокин   (2003-06-24 11:14) [15]

Valeriya © (24.06.03 10:58)
У QRBand"а есть событие OnBeforePrint, которое происходит на момент непосредственно перед печатью, также это событие есть у каждого TQRLabel"а:
1. на OnBeforePrint QRBand"а выполнять запрос и вытаскивать date_att для каждой аттестации - заполнять
2. На OnBeforePrint каждого QRLabel"а заносить его Caption из заьитого ранее массива данных


 
Valeriya   (2003-06-24 11:19) [16]

Ну это понятно, а КАК их заполнять - в цикле или как ещё?


 
Anatoly Podgoretsky   (2003-06-24 11:34) [17]

Цикл не требуестя, работать с событием OnNeedData, но основная проблема у тебя будет не с этим, а с конечной шириной листа, сумеешь поместить все свои колонки?
Если нет то придется перейти к много проходному формированию отчетов, столько раз сколько листов потребуется по ширине и в данном случае массив данных самое то, поскольку обеспечит одну единственную выборку и повторяемость.

Пример по OnNeedData есть в справке и в примерах по Quick Report, формирование листов чисто дизайнерская и простая алгоритмическая работа, в основном сведется к формированию заголовков листа и/или к заголовкам колонок.

Есть еще более мощный, но одновременно и более сложный путь, это динамическое формирование отчетов, об этом написано в фирменной документации по QR2 и QR3. Но это более для профессионалов.


 
Valeriya   (2003-06-24 11:50) [18]

Спасибо большое, буду разбираться.


 
ЮЮ   (2003-06-25 04:24) [19]

Вчера с ответом не успел: Интенет отключили. Советов, гляжу, тебе надавали проедостаточно. Но, учитывая, что нет варианта, как получить информацию в одном запросе (может в дальнейшем пригодится :-), предложу и свой:

Для Local SQL будет так (при условии, что кол-во видов аттестации не очень велико и не меняется очень стремительно :-).
При этом полагаем, что запись в Att_work с большим ID_att соответствует более поздней дате (это значительно упростит запрос).

Для каждого вида аттестации создаём файл attN.sql:

SELECT ID_Work, Max(ID_att)
FROM Att_work, Vid_att
WHERE (Att_work.ID_Att = Vid_att.ID_ATT) and (Vid_att.Vid_att = <n>)
GROUP BY ID_Work

Каждый из этих запросов вернёт не более одной (предполагаем, что последнюю, см. выше) запись для каждого значения ID_Work.

Наконец.
SELECT Work.*, att1.Date_att Date1, ... , attN.Date_att DateN
FROM Work
LEFT JOIN "att1.sql" att1 on Work.ID = att1.ID_work
...
LEFT JOIN "attN.sql" attn on Work.ID = attn.ID_work

Это запрос можно формировать и динамически, анализируя наличие файлов вида attN.sql в базе

P.S. В структуре не понятен тип связи Att_work.ID_Att <-> Vid_att.ID_Att. И что является ключевым полем в Att_work? Поэтому предложенные запросы могут оказаться не совсем верными :-(



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2003.07.17;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.014 c
1-55632
K_O_T
2003-07-03 15:17
2003.07.17
COM итерфейс IStorage. Общение с TTreeView.


14-55730
Centurion
2003-07-02 17:38
2003.07.17
mwEdit


6-55701
dtm
2003-05-13 18:34
2003.07.17
Соединение с IBase через Интернет


1-55495
ray_w
2003-07-02 19:57
2003.07.17
TabControl


1-55536
dima_matrix
2003-07-03 21:23
2003.07.17
VC модуль в проекте Delphi





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский