Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.08.2009, 16:04   #1
yulia
Форумчанин
 
Аватар для yulia
 
Регистрация: 24.03.2007
Сообщений: 314
По умолчанию QReport динамическое формирование отчета

Надо строить отчет по результатам запроса. Если надо вывести все столбцы, то проблем никаких. А вот скажите, пожалуйста, как можно мделать так, чтобы пользователь мог ставить галочки и выбирать какие столбцы будут отображаться в отчете?
yulia вне форума Ответить с цитированием
Старый 14.08.2009, 16:54   #2
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

на форму поставить CheckListBox1
получить поля с компонента както так
Код:
 CheckListBox1.Items:=query1.FieldList;
, ну или по другому

И сформировать отчёт
Код:
var
 i,col_Width,col_Width1:Integer;
 QR:TQuickRep;
 QRT:TQRDBText;
 SList:TStringList;
 begin
  try
    Slist:=TStringList.Create;
     for i:=0 to CheckListBox1.Items.Count-1 do
      if CheckListBox1.Checked[i]=True then
      SList.Add(CheckListBox1.Items.Strings[i]);
       if SList.Count>0 then
   begin
     try
       QR:=TQuickRep.Create(Self);
       QR.Bands.HasTitle:=True;
     with   TQRMemo(QR.Bands.TitleBand.AddPrintable(TQRMemo)) do
     begin
        AlignToBand:=True;
        Alignment:=taCenter;
        Font.Size:= 20;
        Font.Name:='Comic Sans MS';
        Lines.Text:='Ìîé ñàìûé ãëàâíûé Àò÷Îò';
     end;
       QR.Bands.HasDetail:=True;
       QR.Bands.DetailBand.Frame.DrawTop:=True;
       QR.Bands.DetailBand.Frame.DrawBottom:=True;
       QR.Bands.DetailBand.Frame.DrawLeft:=True;
       QR.DataSet:=query1;
       col_Width:= QR.Bands.DetailBand.Width div SList.Count;
       col_Width1:=col_Width+QR.Bands.DetailBand.Width mod SList.Count;
       for i:=0 to Slist.Count-1 do
          begin
            QRT:=TQRDBText.Create(QR.Bands.DetailBand);
            with QRT do
              begin
                Name:=SList.Strings[i];
                AutoSize:=False;
                AutoStretch:=True;
                Top := 0;
                DataSet := Query1;
                DataField := Slist.strings[i];
                Parent:=QR.Bands.DetailBand;
                Frame.DrawRight:=True;
                Left:=i*col_Width;
                if i=SList.Count-1 then
                Width:=col_Width1
                else
                Width:=col_Width;
              end;
          end;
         QR.Preview;
      finally
        QR.free;
     end;
   end;
  finally
    SList.Free;
  end;
end;
не идеал конечно, ещё нужно над ним поработать. Да и наверное попроще местами можно, но всёже

Последний раз редактировалось vovk; 14.08.2009 в 16:57.
vovk вне форума Ответить с цитированием
Старый 17.08.2009, 12:21   #3
yulia
Форумчанин
 
Аватар для yulia
 
Регистрация: 24.03.2007
Сообщений: 314
По умолчанию

Спасибо большое, очень помогло.. у меня получилось вот так:

Код:
procedure TForm10.QuickRep2Preview(Sender: TObject);
var
 i,col_Width,col_Width1:Integer;
 QR:TQuickRep;
 QRT:TQRDBText;
 SList:TStringList;
begin
try
    Slist:=TStringList.Create;
     for i:=0 to Form7.RzCheckList1.Items.Count-1 do
      if Form7.RzCheckList1.ItemChecked[i]=True then
      SList.Add(Form7.RzCheckList1.Items.Strings[i]);
       if SList.Count>0 then
   begin
     try
       QR:=TQuickRep.Create(Self);
       QR.Bands.HasTitle:=True;
     with   TQRMemo(QR.Bands.TitleBand.AddPrintable(TQRMemo)) do
     begin
        AlignToBand:=True;
        Alignment:=taLeftJustify;
        Font.Size:= 16;
        Font.Name:='Times New Roman';
        Lines.Text:='Îáë³ê çàÿâîê';
     end;
       QR.Bands.HasDetail:=True;
       QR.Bands.DetailBand.Frame.DrawTop:=True;
       QR.Bands.DetailBand.Frame.DrawBottom:=True;
       QR.Bands.DetailBand.Frame.DrawLeft:=True;
       QR.DataSet:=dm.potype;
       col_Width:= QR.Bands.DetailBand.Width div SList.Count;
       col_Width1:=col_Width+QR.Bands.DetailBand.Width mod SList.Count;
       for i:=0 to Slist.Count-1 do
          begin
            QRT:=TQRDBText.Create(QR.Bands.DetailBand);
            with QRT do
              begin
                Name:='a'+ inttostr(i);
                AutoSize:=False;
                AutoStretch:=True;
                Top := 0;
                DataSet :=dm.potype;
                DataField := Slist.strings[i];
                Parent:=QR.Bands.DetailBand;
                Frame.DrawRight:=True;
                Left:=i*col_Width;
                if i=SList.Count-1 then
                Width:=col_Width1
                else
                Width:=col_Width;
              end;
          end;
         QR.Preview;
      finally
        QR.free;
     end;
   end;
  finally
    SList.Free;
  end;
end;

Последний раз редактировалось yulia; 17.08.2009 в 12:26.
yulia вне форума Ответить с цитированием
Старый 17.08.2009, 12:31   #4
yulia
Форумчанин
 
Аватар для yulia
 
Регистрация: 24.03.2007
Сообщений: 314
По умолчанию

Если не сложно, подскажите еще, плиз, как сделать заголовки у столбцов...
yulia вне форума Ответить с цитированием
Старый 17.08.2009, 17:28   #5
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

Код:
 QRTLB:TQRLabel;
.......
......
QR.Bands.HasColumnHeader:=True;
       QR.Bands.ColumnHeaderBand.Frame.DrawTop:=True;
       QR.Bands.ColumnHeaderBand.Frame.DrawBottom:=True;
       QR.Bands.ColumnHeaderBand.Frame.DrawLeft:=True;
       col_Width:= QR.Bands.DetailBand.Width div SList.Count;
       col_Width1:=col_Width+QR.Bands.DetailBand.Width mod SList.Count;
       for i:=0 to Slist.Count-1 do
          begin
            QRTLB:=TQRLabel.Create(QR.Bands.ColumnHeaderBand);
            QRT:=TQRDBText.Create(QR.Bands.DetailBand);
            with QRT do
              begin
                Name:=SList.Strings[i];
                .....
                 . ...
                Width:=col_Width1
                else
                Width:=col_Width;
              end;
              with QRTLB do
              begin
                AutoSize:=False;
                AutoStretch:=True;
                Top := 0;
                Caption := Slist.strings[i];
                Parent:=QR.Bands.ColumnHeaderBand;
                Frame.DrawRight:=True;
                Left:=i*col_Width;
                if i=SList.Count-1 then
                Width:=col_Width1
                else
                Width:=col_Width;
              end;
          end;
Как говорится найдите 10 отличий..

Последний раз редактировалось vovk; 17.08.2009 в 18:20.
vovk вне форума Ответить с цитированием
Старый 17.08.2009, 18:17   #6
yulia
Форумчанин
 
Аватар для yulia
 
Регистрация: 24.03.2007
Сообщений: 314
По умолчанию

Спасибо огромное-преогромное!! Вы очень-очень меня выручили!!
yulia вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
QReport 3.0 формирование отчета без БД. OLEG'arh БД в Delphi 0 21.06.2008 03:21
RepoRTF: формирование отчета БД Lady_olga БД в Delphi 0 04.06.2008 13:13
Формирование отчета в Excel из Delphi Chals Общие вопросы Delphi 1 04.06.2007 19:25
qreport мозголом Алёна БД в Delphi 0 27.03.2007 09:26
qReport Дамир БД в Delphi 1 18.02.2007 16:53