Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 5 272

/ вопрос решён /

Здравствуйте, эксперты!
Подскажите пожалуйста как сделать так чтобы при нажатии кнопки и сохранении программа автоматически присваивала имени файла названия параметров. Например выбраны параметры "Пол", "Возраст", дата создания (Муж_18-20_10.09.11.xls)

К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)

Приложение:
  1. unit Unit4;
  2.  
  3. interface
  4.  
  5. uses
  6. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7. Dialogs, StdCtrls, ComCtrls, Grids, ExtCtrls, Gauges, Buttons, ComObj;
  8.  
  9.  
  10. type
  11. TForm4 = class(TForm)
  12. DateTimePicker1: TDateTimePicker;
  13. DateTimePicker2: TDateTimePicker;
  14. Label2: TLabel;
  15. Edit1: TEdit;
  16. ComboBox1: TComboBox;
  17. ComboBox2: TComboBox;
  18. ComboBox3: TComboBox;
  19. Label7: TLabel;
  20. Edit2: TEdit;
  21. CheckBox1: TCheckBox;
  22. CheckBox2: TCheckBox;
  23. CheckBox3: TCheckBox;
  24. CheckBox4: TCheckBox;
  25. Label3: TLabel;
  26. ComboBox4: TComboBox;
  27. mems: TStringGrid;
  28. Label4: TLabel;
  29. Label5: TLabel;
  30. RadioButton1: TRadioButton;
  31. RadioButton2: TRadioButton;
  32. Label6: TLabel;
  33. Button2: TButton;
  34. Panel1: TPanel;
  35. Label1: TLabel;
  36. BitBtn1: TBitBtn;
  37. Gauge1: TGauge;
  38. SaveDialog1: TSaveDialog;
  39. procedure FormCreate(Sender: TObject);
  40. procedure DoQuery(s:string);
  41. procedure ComboBox4Change(Sender: TObject);
  42. procedure Button2Click(Sender: TObject);
  43. procedure Button1Click(Sender: TObject);
  44. procedure RadioButton1Click(Sender: TObject);
  45. procedure RadioButton2Click(Sender: TObject);
  46. procedure BitBtn1Click(Sender: TObject);
  47. private
  48. { Private declarations }
  49. public
  50. { Public declarations }
  51. end;
  52.  
  53.  
  54.  
  55. var
  56. Form4: TForm4;
  57.  
  58. function fdate(d:TDateTime):string;
  59.  
  60. implementation
  61.  
  62. uses Unit3, Unit2;
  63.  
  64. {$R *.dfm}
  65. function fdate(d:TDateTime):string;
  66. begin
  67. result:=char(39)+copy(DateToStr(d),7,4)+'-'+copy(DateToStr(d),4,2)+'-'+copy(DateToStr(d),1,2)+char(39);
  68. end;
  69.  
  70. procedure TForm4.DoQuery(s:string);
  71. var i,j:integer;
  72. begin
  73. DM.query.SQL.Text:=
  74. 'select distinct'+
  75. ' f as '+char(39)+'Ôàìèëèÿ'+char(39)+','+
  76. ' i as '+char(39)+'Èìÿ'+char(39)+','+
  77. ' o as '+char(39)+'Îò÷åñòâî'+char(39)+','+
  78. ' card_number as '+char(39)+'Íîìåð êàðòî÷êè'+char(39)+','+
  79. ' mobile_phone as '+char(39)+'Òåëåôîí'+char(39)+','+
  80. ' email_address as '+char(39)+'Ïî÷òà'+char(39)+','+
  81. ' (select distinct sum(doc_summ)'+
  82. ' from doc'+
  83. ' where doc.card_id = owner.card_id'+
  84. ' and (doc_date between convert(datetime,'+fdate(DateTimePicker1.Date)+') and convert(datetime,'+fdate(DateTimePicker2.Date)+') )) as '+char(39)+'Ñóììà ïîêóïîê'+char(39)+','+
  85. ' (select count(distinct doc_number)'+
  86. ' from doc'+
  87. ' where doc.card_id = owner.card_id'+
  88. ' and (doc_date between convert(datetime,'+fdate(DateTimePicker1.Date)+') and convert(datetime,'+fdate(DateTimePicker2.Date)+') )) as '+char(39)+'Êîë-âî ïîêóïîê'+char(39)+
  89. ' from owner inner join'+
  90. ' (doc inner join card on doc.card_id=card.card_id) on doc.card_id=owner.card_id'+
  91. ' where (doc_date between convert(datetime,'+fdate(DateTimePicker1.Date)+') and convert(datetime,'+fdate(DateTimePicker2.Date)+') )';
  92. if CheckBox1.Checked then DM.query.SQL.Text:=DM.query.SQL.Text+
  93. ' and (datediff(year,date_of_birth,getdate())>='+Edit1.Text+')'+
  94. ' and (datediff(year,date_of_birth,getdate())<='+Edit2.Text+')';
  95. if (CheckBox2.Checked) and (Combobox1.ItemIndex<>-1) then DM.query.SQL.Text:=DM.query.SQL.Text+
  96. ' and (speciality='+char(39)+Combobox1.Text+char(39)+')';
  97. if (CheckBox3.Checked) and (Combobox2.ItemIndex<>-1) then DM.query.SQL.Text:=DM.query.SQL.Text+
  98. ' and (sex='+inttostr(ComboBox2.itemindex+1)+')';
  99. if (CheckBox4.Checked) and (Combobox3.ItemIndex<>-1) then DM.query.SQL.Text:=DM.query.SQL.Text+
  100. ' and (TypeOrg='+char(39)+Combobox3.text+char(39)+')';
  101. if Combobox4.ItemIndex<>-1 then
  102. begin
  103. DM.query.SQL.Text:=DM.query.SQL.Text+
  104. ' order by '+inttostr(Combobox4.Itemindex+1);
  105. if RadioButton2.Checked then DM.query.SQL.Text:=DM.query.SQL.Text+' desc';
  106. end;
  107. DM.dbs.Open;
  108. dm.query.Open;
  109. DM.query.First;
  110. i:=0;
  111. while not DM.query.Eof do
  112. begin
  113. inc(i);
  114. mems.Cells[0,i]:=dm.query.Fields[0].AsString+' '+dm.query.Fields[1].AsString+' '+dm.query.Fields[2].AsString;
  115. for j:=1 to 5 do
  116. mems.Cells[j,i]:=dm.query.Fields[j+2].AsString;
  117. mems.RowCount:=i+1;
  118. DM.query.Next;
  119. end;
  120. Label5.Caption:=inttostr(mems.RowCount-1);
  121. if i=0 then begin
  122. mems.RowCount:=2;
  123. mems.Cells[0,1]:='';
  124. mems.Cells[1,1]:='';
  125. mems.Cells[2,1]:='';
  126. mems.Cells[3,1]:='';
  127. mems.Cells[4,1]:='';
  128. mems.Cells[5,1]:='';
  129. mems.FixedRows:=1;
  130. Label5.Caption:='0';
  131. MessageBox(Form4.Handle,'&#209;&#238;&#238;&#242;&#226;&#229;&#242;&#241;&#242;&#226;&#232;&#233; &#237;&#229; &#237;&#224;&#233;&#228;&#229;&#237;&#238;','&#200;&#237;&#244;&#238;&#240;&#236;&#224;&#246;&#232;&#255;',0);
  132. end;
  133.  
  134. DM.Query.close;
  135. DM.dbs.close;
  136. end;
  137.  
  138. procedure TForm4.FormCreate(Sender: TObject);
  139. begin
  140. mems.Cells[0,0]:='&#212;.&#200;.&#206;.';
  141. mems.Cells[1,0]:='&#205;&#238;&#236;&#229;&#240; &#234;&#224;&#240;&#242;&#238;&#247;&#234;&#232;';
  142. mems.Cells[2,0]:='&#210;&#229;&#235;&#229;&#244;&#238;&#237;';
  143. mems.Cells[3,0]:='&#207;&#238;&#247;&#242;&#224;';
  144. mems.Cells[4,0]:='&#209;&#243;&#236;&#236;&#224; &#239;&#238;&#234;&#243;&#239;&#238;&#234; &#231;&#224; &#226;&#251;&#225;&#240;&#224;&#237;&#237;&#251;&#233; &#239;&#229;&#240;&#232;&#238;&#228;';
  145. mems.Cells[5,0]:='&#202;&#238;&#235;&#232;&#247;&#229;&#241;&#242;&#226;&#238; &#239;&#238;&#234;&#243;&#239;&#238;&#234;';
  146. end;
  147.  
  148.  
  149.  
  150. procedure TForm4.ComboBox4Change(Sender: TObject);
  151. begin
  152. DoQuery('f');
  153. end;
  154.  
  155. procedure TForm4.Button2Click(Sender: TObject);
  156. begin
  157. DoQuery('g');
  158. Combobox4.Enabled:=true;
  159. end;
  160.  
  161. procedure TForm4.Button1Click(Sender: TObject);
  162. begin
  163. form2.CheckBox3.Checked:=true;
  164. close;
  165. end;
  166.  
  167. procedure TForm4.RadioButton1Click(Sender: TObject);
  168. begin
  169. DoQuery('g');
  170. end;
  171.  
  172. procedure TForm4.RadioButton2Click(Sender: TObject);
  173. begin
  174. DoQuery('g');
  175. end;
  176.  
  177. procedure TForm4.BitBtn1Click(Sender: TObject);
  178. var
  179. Excel, WorkBook, Sheet:variant;
  180. i, j: integer;
  181. GridPrevFile,extens: string;
  182.  
  183.  
  184. begin
  185.  
  186. Excel:=CreateOleObject('Excel.Application');
  187. Excel.DisplayAlerts:=False;
  188. try
  189.  
  190. Workbook:=Excel.Workbooks.Add;
  191. if (SaveDialog1.Execute) then
  192.  
  193. Workbook.SaveAs(Filename:=SaveDialog1.FileName)
  194.  
  195. else
  196. exit;
  197. Sheet:= Workbook.ActiveSheet;
  198. Gauge1.MaxValue:=100;
  199. Gauge1.Progress:=0;
  200.  
  201. for i:= 0 to mems.RowCount - 1 do // no?i?eo iiia? 0 ia yenii?oe?oai - yoi caaeaaea noieaoia
  202.  
  203. // Anee io?ii yenii?oe?iaaou n caaeaaeai noieaoia oi ieoai: for i:= 0 to StringGrid1.RowCount - 1 do
  204.  
  205. begin
  206. for j:= 0 to mems.ColCount - 1 do
  207. Sheet.Cells[i+1, j+1]:= mems.Cells[j, i];
  208. // Anee io?ii yenii?oe?iaaou aianoa n caaeaaeai noieaoia oi ieoai: Sheet.Cells[i+1, j+1]:= StringGrid1.Cells[j, i];
  209.  
  210. Excel.WorkBooks[1].WorkSheets[1].Name := '&#206;&#242;&#247;&#229;&#242;';
  211. Excel.WorkBooks[1].WorkSheets[1].Columns[1].ColumnWidth := 33;
  212. Excel.WorkBooks[1].WorkSheets[1].Columns[2].ColumnWidth := 15;
  213. Excel.WorkBooks[1].WorkSheets[1].Columns[3].ColumnWidth := 10;
  214. Excel.WorkBooks[1].WorkSheets[1].Columns[4].ColumnWidth := 23;
  215. Excel.WorkBooks[1].WorkSheets[1].Columns[5].ColumnWidth := 15;
  216. Excel.WorkBooks[1].WorkSheets[1].Columns[6].ColumnWidth := 19;
  217. if mems.RowCount>0 then
  218. Gauge1.Progress:=Round(((i+1)*100)/mems.RowCount);
  219. end;
  220. Workbook.Save;
  221. Workbook.Close;
  222. finally
  223. Excel.Quit;
  224. Excel:= UnAssigned;
  225.  
  226. end;
  227. end;
  228. end.


mobidik Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: mobidik (статус: Посетитель)
Вопрос отправлен: 10 мая 2011, 10:15
Состояние вопроса: решён, ответов: 0.


Мини-форум вопроса

Всего сообщений: 4; последнее сообщение — 11 мая 2011, 04:13; участников в обсуждении: 4.
min@y™

min@y™ (статус: Доктор наук), 10 мая 2011, 10:26 [#1]:

Супер-вопрос! Ога, щас все догадаются, чему должно присваиваться имя файла и откуда возьмутся данные для его формирования. Канешна, тут одни телепаты сидят!
А что так мало кода? 288 строк всего. :( Надо было выложить ВЕСЬ проект из 100500 модулей, а также все DFM-файлы в текстовом виде и все исходники компонентов, лежащих на формах! Чем больше кода, тем больше вероятность, что этот код кто-нибудь будет читать, ога!
Как всё просто: что-то не получается - вываливаешь в енторнет свою писанину, нехай добрые дяди отложат в сторону работу и сделают всё за тебя. Да шоб я так жил!
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Эхо Унитазного Бачка

Эхо Унитазного Бачка (статус: 1-ый класс), 10 мая 2011, 14:13 [#2]:

Выложи архив с исходником - помогу.
Андрей_trico

Андрей_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.
mobidik

mobidik (статус: Посетитель), 11 мая 2011, 04:13 [#4]:

Андрей_trico:
Спасибо за помощь. Заработало.

11 мая 2011, 04:14: Статус вопроса изменён на решённый (изменил автор вопроса — mobidik): Проблема решена.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 12:03
Выполнено за 0.03 сек.