| 
| 
 | Вопрос # 5 272/ вопрос решён / | 
 |  Здравствуйте, эксперты!Подскажите пожалуйста как сделать так чтобы при нажатии кнопки  и сохранении программа автоматически присваивала имени файла названия параметров. Например выбраны параметры "Пол", "Возраст", дата создания (Муж_18-20_10.09.11.xls)
 К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса) Приложение:Переключить в обычный режим unit Unit4; interface uses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls, ComCtrls, Grids, ExtCtrls, Gauges, Buttons, ComObj;  type  TForm4 = class(TForm)    DateTimePicker1: TDateTimePicker;    DateTimePicker2: TDateTimePicker;    Label2: TLabel;    Edit1: TEdit;    ComboBox1: TComboBox;    ComboBox2: TComboBox;    ComboBox3: TComboBox;    Label7: TLabel;    Edit2: TEdit;    CheckBox1: TCheckBox;    CheckBox2: TCheckBox;    CheckBox3: TCheckBox;    CheckBox4: TCheckBox;    Label3: TLabel;    ComboBox4: TComboBox;    mems: TStringGrid;    Label4: TLabel;    Label5: TLabel;    RadioButton1: TRadioButton;    RadioButton2: TRadioButton;    Label6: TLabel;    Button2: TButton;    Panel1: TPanel;    Label1: TLabel;    BitBtn1: TBitBtn;    Gauge1: TGauge;    SaveDialog1: TSaveDialog;    procedure FormCreate(Sender: TObject);    procedure DoQuery(s:string);    procedure ComboBox4Change(Sender: TObject);    procedure Button2Click(Sender: TObject);    procedure Button1Click(Sender: TObject);    procedure RadioButton1Click(Sender: TObject);    procedure RadioButton2Click(Sender: TObject);    procedure BitBtn1Click(Sender: TObject);  private    { Private declarations }  public    { Public declarations }  end;   var  Form4: TForm4;   function fdate(d:TDateTime):string; implementation uses Unit3, Unit2; {$R *.dfm}function fdate(d:TDateTime):string;beginresult:=char(39)+copy(DateToStr(d),7,4)+'-'+copy(DateToStr(d),4,2)+'-'+copy(DateToStr(d),1,2)+char(39);end; procedure TForm4.DoQuery(s:string);var i,j:integer;beginDM.query.SQL.Text:='select distinct'+' f as
'+char(39)+'Ôàìèëèÿ'+char(39)+','+' i as '+char(39)+'Èìÿ'+char(39)+','+' o as
'+char(39)+'Îò÷åñòâî'+char(39)+','+' card_number as '+char(39)+'Íîìåð
êàðòî÷êè'+char(39)+','+' mobile_phone as
'+char(39)+'Òåëåôîí'+char(39)+','+' email_address as '+char(39)+'Ïî÷òà'+char(39)+','+' (select distinct sum(doc_summ)'+' from doc'+' where doc.card_id = owner.card_id'+' and (doc_date between convert(datetime,'+fdate(DateTimePicker1.Date)+') and
convert(datetime,'+fdate(DateTimePicker2.Date)+') )) as
'+char(39)+'Ñóììà
ïîêóïîê'+char(39)+','+' (select count(distinct doc_number)'+' from doc'+' where doc.card_id = owner.card_id'+' and (doc_date between convert(datetime,'+fdate(DateTimePicker1.Date)+') and
convert(datetime,'+fdate(DateTimePicker2.Date)+') )) as
'+char(39)+'Êîë-âî
ïîêóïîê'+char(39)+' from owner inner join'+' (doc inner join card on doc.card_id=card.card_id) on doc.card_id=owner.card_id'+' where (doc_date between convert(datetime,'+fdate(DateTimePicker1.Date)+') and
convert(datetime,'+fdate(DateTimePicker2.Date)+') )';if CheckBox1.Checked then DM.query.SQL.Text:=DM.query.SQL.Text+' and (datediff(year,date_of_birth,getdate())>='+Edit1.Text+')'+' and (datediff(year,date_of_birth,getdate())<='+Edit2.Text+')';if (CheckBox2.Checked) and (Combobox1.ItemIndex<>-1) then
DM.query.SQL.Text:=DM.query.SQL.Text+' and (speciality='+char(39)+Combobox1.Text+char(39)+')';if (CheckBox3.Checked) and (Combobox2.ItemIndex<>-1) then
DM.query.SQL.Text:=DM.query.SQL.Text+' and (sex='+inttostr(ComboBox2.itemindex+1)+')';if (CheckBox4.Checked) and (Combobox3.ItemIndex<>-1) then
DM.query.SQL.Text:=DM.query.SQL.Text+' and (TypeOrg='+char(39)+Combobox3.text+char(39)+')';if Combobox4.ItemIndex<>-1 thenbeginDM.query.SQL.Text:=DM.query.SQL.Text+' order by '+inttostr(Combobox4.Itemindex+1);if RadioButton2.Checked then DM.query.SQL.Text:=DM.query.SQL.Text+' desc';end;DM.dbs.Open;dm.query.Open;DM.query.First;i:=0;while not DM.query.Eof dobegininc(i);mems.Cells[0,i]:=dm.query.Fields[0].AsString+' '+dm.query.Fields[1].AsString+'
'+dm.query.Fields[2].AsString;for j:=1 to 5 domems.Cells[j,i]:=dm.query.Fields[j+2].AsString;mems.RowCount:=i+1;DM.query.Next;end;Label5.Caption:=inttostr(mems.RowCount-1);if i=0 then beginmems.RowCount:=2;mems.Cells[0,1]:='';mems.Cells[1,1]:='';mems.Cells[2,1]:='';mems.Cells[3,1]:='';mems.Cells[4,1]:='';mems.Cells[5,1]:='';mems.FixedRows:=1;Label5.Caption:='0';MessageBox(Form4.Handle,'Ñîîòâåòñòâèé
íå
íàéäåíî','Èíôîðìàöèÿ',0);end; DM.Query.close;DM.dbs.close;end; procedure TForm4.FormCreate(Sender: TObject);beginmems.Cells[0,0]:='Ô.È.Î.';mems.Cells[1,0]:='Íîìåð
êàðòî÷êè';mems.Cells[2,0]:='Òåëåôîí';mems.Cells[3,0]:='Ïî÷òà';mems.Cells[4,0]:='Ñóììà
ïîêóïîê çà
âûáðàííûé
ïåðèîä';mems.Cells[5,0]:='Êîëè÷åñòâî
ïîêóïîê';end;   procedure TForm4.ComboBox4Change(Sender: TObject);beginDoQuery('f');end; procedure TForm4.Button2Click(Sender: TObject);beginDoQuery('g');Combobox4.Enabled:=true;end; procedure TForm4.Button1Click(Sender: TObject);beginform2.CheckBox3.Checked:=true;close;end; procedure TForm4.RadioButton1Click(Sender: TObject);beginDoQuery('g');end; procedure TForm4.RadioButton2Click(Sender: TObject);beginDoQuery('g');end; procedure TForm4.BitBtn1Click(Sender: TObject);varExcel, WorkBook, Sheet:variant;i, j: integer;GridPrevFile,extens: string;  begin Excel:=CreateOleObject('Excel.Application');Excel.DisplayAlerts:=False;try Workbook:=Excel.Workbooks.Add;if (SaveDialog1.Execute) then Workbook.SaveAs(Filename:=SaveDialog1.FileName) elseexit;Sheet:= Workbook.ActiveSheet;Gauge1.MaxValue:=100;Gauge1.Progress:=0; for i:= 0 to mems.RowCount - 1 do // no?i?eo iiia? 0 ia yenii?oe?oai - yoi caaeaaea noieaoia // Anee io?ii yenii?oe?iaaou n caaeaaeai noieaoia oi ieoai: for i:= 0 to StringGrid1.RowCount - 1 do beginfor j:= 0 to mems.ColCount - 1 doSheet.Cells[i+1, j+1]:= mems.Cells[j, i];// Anee io?ii yenii?oe?iaaou aianoa n caaeaaeai noieaoia oi ieoai: Sheet.Cells[i+1, j+1]:=
StringGrid1.Cells[j, i]; Excel.WorkBooks[1].WorkSheets[1].Name := 'Îò÷åò';Excel.WorkBooks[1].WorkSheets[1].Columns[1].ColumnWidth := 33;Excel.WorkBooks[1].WorkSheets[1].Columns[2].ColumnWidth := 15;Excel.WorkBooks[1].WorkSheets[1].Columns[3].ColumnWidth := 10;Excel.WorkBooks[1].WorkSheets[1].Columns[4].ColumnWidth := 23;Excel.WorkBooks[1].WorkSheets[1].Columns[5].ColumnWidth := 15;Excel.WorkBooks[1].WorkSheets[1].Columns[6].ColumnWidth := 19;if mems.RowCount>0 thenGauge1.Progress:=Round(((i+1)*100)/mems.RowCount);end;Workbook.Save;Workbook.Close;finallyExcel.Quit;Excel:= UnAssigned; end;end;end.
|  |   Вопрос задал: mobidik (статус: Посетитель)Вопрос отправлен: 10 мая 2011, 10:15
 Состояние вопроса: решён, ответов: 0.
 |  
 Мини-форум вопросаВсего сообщений: 4; последнее сообщение — 11 мая 2011, 04:13; участников в обсуждении: 4. 
|   | min@y™ (статус: Доктор наук), 10 мая 2011, 10:26 [#1]:Супер-вопрос! Ога, щас все догадаются, чему должно присваиваться имя файла и откуда возьмутся данные для его формирования. Канешна, тут одни телепаты сидят! А что так мало кода? 288 строк всего.
  Надо было выложить ВЕСЬ проект из 100500 модулей, а также все DFM-файлы в текстовом виде и все исходники компонентов, лежащих на формах! Чем больше кода, тем больше вероятность, что этот код кто-нибудь будет читать, ога! Как всё просто: что-то не получается - вываливаешь в енторнет свою писанину, нехай добрые дяди отложат в сторону работу и сделают всё за тебя. Да шоб я так жил!
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | Андрей_trico (статус: Посетитель), 10 мая 2011, 23:31 [#3]:Не знаю я каким образом ты сохранять будешь, напрямую или через сейв диалог... я сейчас пишу подобную программу, но у меня файлы .db поэтому алгоритм сохранения иной у тебя, но имя файла сгенерировать так как ты хочешь не сложно. у меня такой алгоритм формирования имени файла работает без сюрпризов. может что возьмёшь полезное: 
 
 var
f: textfile;
a,b,c, name: string;
begin
 if (например, если CheckBox1.Checked ) then // пол
  a := Combobox1.Text; // тут либо Мужской либо Женскский
 if (CheckBox2.Checked ) then                // возраст
  b := Edit1.Text + '-' + Edit2.Text;
 if (CheckBox3.Checked ) then begin           // дата
  DecodeDate(Now, Year, Month, Day);
  с := Year + '_' + Month + '_' + Day; 
  end; 
name := a + b + c + '.xls'; //  xls к примеру...
Save(f, name);
 
end; процедуру Save напишешь для xls.
 |  11 мая 2011, 04:14: Статус вопроса изменён на решённый (изменил автор вопроса — mobidik): Проблема решена. Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |