|
Вопрос # 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;
- begin
- result:=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;
- begin
- DM.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 then
- begin
- DM.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 do
- begin
- inc(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 do
- mems.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 begin
- mems.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);
- begin
- mems.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);
- begin
- DoQuery('f');
- end;
-
- procedure TForm4.Button2Click(Sender: TObject);
- begin
- DoQuery('g');
- Combobox4.Enabled:=true;
- end;
-
- procedure TForm4.Button1Click(Sender: TObject);
- begin
- form2.CheckBox3.Checked:=true;
- close;
- end;
-
- procedure TForm4.RadioButton1Click(Sender: TObject);
- begin
- DoQuery('g');
- end;
-
- procedure TForm4.RadioButton2Click(Sender: TObject);
- begin
- DoQuery('g');
- end;
-
- procedure TForm4.BitBtn1Click(Sender: TObject);
- var
- Excel, 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)
-
- else
- exit;
- 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
-
- begin
- for j:= 0 to mems.ColCount - 1 do
- Sheet.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 then
- Gauge1.Progress:=Round(((i+1)*100)/mems.RowCount);
- end;
- Workbook.Save;
- Workbook.Close;
- finally
- Excel.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): Проблема решена.
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|