Лабораторная работа № 8. Подготовка итогового проекта
Используя материалы лабораторных работ выполнить индивидаульное задание (раздается преподавателем) – разработать приложение, автоматизируещее дятельность диспетчера при работе с одним журналом статистики. Добавить следующие возможности:
загрузку и выгрузку данных в БД MSAccess; проработать экспорт данных в MSWord и MSExcel.
Ниже приведены примеры интерфейса проекта и ключевые фрагменты кода. Пример интерфейса
Пример ключевых фрагментов кода // выгрузка данных из базы в ячейки таблицы
procedure TForm1.SpeedButton2Click(Sender: TObject);
var i,j :Integer;
begin
ChrtX1:=True;
BDForm1:=TBDForm1.Create(Self);
BDForm1.Caption:='Число инцидентов по категориям объектов';
BDForm1.StringGrid1.RowCount:=8;
BDForm1.StringGrid1.ColWidths[0]:=150;
BDForm1.StringGrid1.Cells[0,0]:='Категорияобъекта';
BDForm1.StringGrid1.Cells[0,1]:='Горныеработы';
BDForm1.StringGrid1.Cells[0,2]:='Обогатительныйкомплекс';
BDForm1.StringGrid1.Cells[0,3]:='Ж/Дтранспорт';
BDForm1.StringGrid1.Cells[0,4]:='Подъемныесооружения';
BDForm1.StringGrid1.Cells[0,5]:='Объектыкотлонадзора';
BDForm1.StringGrid1.Cells[0,6]:='Прочиеобъекты';
BDForm1.StringGrid1.Cells[0,7]:='Всего';
BDForm1.ADOTable1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=inzid.mdb;Persist Security Info=False';
BDForm1.ADOTable1.TableName:='Categor';
BDForm1.ADOTable1.Active:=True;
BDForm1.StringGrid1.ColCount:=BDForm1.ADOTable1.RecordCount+1;
for i:=1 to BDForm1.StringGrid1.ColCount-1 do
begin
BDForm1.StringGrid1.Cells[i,0]:=BDForm1.ADOTable1.FieldByName('year').AsString;
BDForm1.ADOTable1.Next;
end;
BDForm1.ADOTable1.First;
for j:=1 to BDForm1.ADOTable1.RecordCount do
begin
for i:=1 to BDForm1.ADOTable1.FieldCount-1 do
begin
BDForm1.StringGrid1.Cells[j,i]:=BDForm1.ADOTable1.Fields[i].AsString;
end;
BDForm1.ADOTable1.Next;
end;
for j:=1 to BDForm1.StringGrid1.ColCount do
BDForm1.StringGrid1.Cells[j,BDForm1.StringGrid1.RowCount-1]:='0'; for j:=1 to BDForm1.StringGrid1.ColCount-1 do
for i:=1 to BDForm1.StringGrid1.RowCount-2 do
BDForm1.StringGrid1.Cells[j,BDForm1.StringGrid1.RowCount-1]:=IntToStr(StrToInt(BDForm1.StringGrid1.Cells[j,i])+StrToInt(BDForm1.StringGrid1.Cells[j,BDForm1.StringGrid1.RowCount-1])); BDForm1.StringGrid1.ColCount:=BDForm1.StringGrid1.ColCount+1;
BDForm1.StringGrid1.Cells[BDForm1.StringGrid1.ColCount-1,0]:='Всего'; for i:=1 to BDForm1.StringGrid1.RowCount-2 do
BDForm1.StringGrid1.Cells[BDForm1.StringGrid1.ColCount-1,i]:='0'; for i:=1 to BDForm1.StringGrid1.RowCount-1 do
for j:=1 to BDForm1.StringGrid1.ColCount-2 do
BDForm1.StringGrid1.Cells[BDForm1.StringGrid1.ColCount-1,i]:=IntToStr(StrToInt(BDForm1.StringGrid1.Cells[j,i])+StrToInt(BDForm1.StringGrid1.Cells[BDForm1.StringGrid1.ColCount-1,i])); BDForm1.SpeedButton7.Click;
BDForm1.Show;
end; // выгрузка данных в MS Excel
procedure TForm1.SpeedButton11Click(Sender: TObject);
var
xEx,yEx: integer;
i,j,k,k1,l,l1: integer;
b: Boolean;
s: String;
p: Integer;
begin
dt:=''; dt:=DateToStr(Date);
dt1:='Safety'+' ('+dt[1]+dt[2]+'-'+dt[4]+dt[5]+'-'+dt[7]+dt[8]+dt[9]+dt[10]+')'+'.xls';
if not CopyFile(pchar('Statistics.xls'),pchar(dt1),true) then ShowMessage('Файлнесоздан!'+#13+'Такойфайлужесуществует,'+#13+'попробуйтеизменитьназвание!') else
begin
Panel1.Align:=AlClient; Panel1.Visible:=True; Panel1.SetFocus; Panel1.Refresh; Panel1.Update; Panel1.Repaint;
Panel1.Refresh; Panel1.Update; Panel1.Repaint;
VarEx:=CreateOleObject('Excel.Application');
VarEx.WorkBooks.Open(extractfilepath(application.ExeName)+dt1,,false,,);
//Числоинцидентов
ADOTable1.Active:=False;
ADOTable1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=inzid.mdb;Persist Security Info=False';
ADOTable1.TableName:='ChisloInzid';
ADOTable1.Active:=True; l:=0;
for j:=1 to ADOTable1.RecordCount do
begin
VarEx.WorkSheets['Лист №1'].Select;
VarEx.Cells.Find(' ').Activate;
VarEx.Cells.FindNext.Activate;
yEx:=VarEx.ActiveCell.Column;
xEx:=VarEx.ActiveCell.Row;
for i:=0 to ADOTable1.FieldCount-1 do VarEx.Cells[xEx,yEx+i].Value:=ADOTable1.Fields[i].AsString;
k:=0; for i:=1 to ADOTable1.FieldCount-1 do k:=k+StrToInt(ADOTable1.Fields[i].AsString);
VarEx.Cells[xEx,yEx+i].Value:=k; l:=l+k;
VarEx.Cells[xEx+1,yEx].Value:=' ';
ADOTable1.Next;
end;
VarEx.Cells[xEx+1,yEx+i].Value:=l;
VarEx.Cells.Find(' ').Activate;
VarEx.Cells.FindNext.Activate;
yEx:=VarEx.ActiveCell.Column;
xEx:=VarEx.ActiveCell.Row;
VarEx.Cells[xEx,yEx]:='Всего';
for i:=1 to ADOTable1.FieldCount-1 do
begin
ADOTable1.First; k:=0; j:=1;
repeat k:=k+StrToInt(ADOTable1.Fields[i].AsString); j:=j+1; ADOTable1.Next; until j>ADOTable1.RecordCount;
VarEx.Cells[xEx,yEx+i]:=IntToStr(k);
end;
VarEx.Cells[xEx+1,yEx].Value:=' '; //Число инцидентов по категориям объектов
ADOTable1.Active:=False;
ADOTable1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=inzid.mdb;Persist Security Info=False';
ADOTable1.TableName:='Categor';
ADOTable1.Active:=True; l:=0;
for j:=1 to ADOTable1.RecordCount do
begin
VarEx.WorkSheets['Лист №2'].Select;
VarEx.Cells.Find(' ').Activate;
VarEx.Cells.FindNext.Activate;
yEx:=VarEx.ActiveCell.Column;
xEx:=VarEx.ActiveCell.Row;
for i:=0 to ADOTable1.FieldCount-1 do VarEx.Cells[xEx,yEx+i].Value:=ADOTable1.Fields[i].AsString;
k:=0; for i:=1 to ADOTable1.FieldCount-1 do k:=k+StrToInt(ADOTable1.Fields[i].AsString);
VarEx.Cells[xEx,yEx+i].Value:=k; l:=l+k;
VarEx.Cells[xEx+1,yEx].Value:=' ';
ADOTable1.Next;
end;
VarEx.Cells[xEx+1,yEx+i].Value:=l;
VarEx.Cells.Find(' ').Activate;
VarEx.Cells.FindNext.Activate;
yEx:=VarEx.ActiveCell.Column;
xEx:=VarEx.ActiveCell.Row;
VarEx.Cells[xEx,yEx]:='Всего';
for i:=1 to ADOTable1.FieldCount-1 do
begin
ADOTable1.First; k:=0; j:=1;
repeat k:=k+StrToInt(ADOTable1.Fields[i].AsString); j:=j+1; ADOTable1.Next; until j>ADOTable1.RecordCount;
VarEx.Cells[xEx,yEx+i]:=IntToStr(k);
end;
VarEx.Cells[xEx+1,yEx].Value:=' '; … SaveDialog1.Title := 'Файлыотчетов Excel';
SaveDialog1.Filter := 'MSExcel files (*.xls)|*.xls';
if SaveDialog1.Execute then
begin
s:=SaveDialog1.FileName;
repeat
p:=Pos('\', s);
Delete(s,1,p);
until p=0;
s:=s+'.xls';
ChDir(extractfilepath(SaveDialog1.FileName));
CopyFile(pchar(extractfilepath(application.ExeName)+dt1),pchar(s),true);
end;
DeleteFile(extractfilepath(application.ExeName)+dt1);
Panel1.Visible:=False;
ChDir(extractfilepath(Application.ExeName));
ShowMessage('Данные удачно перенесены в Excel файл');
end;
end; // выгрузка из памяти при закрытии
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
try
// Если Word уже запущен
MsWord := GetActiveOleObject('Word.Application');
// Взять ссылку на запущенный OLE объект
except
try
// Word незапущен, запустить
MsWord := CreateOleObject('Word.Application');
// Создать ссылку на зарегистрированный OLE объект
MsWord.Visible := True;
except
ShowMessage('Немогузапустить Microsoft Word');
Exit;
end;
end;
end; // открыть книгу MS Excel
procedure TForm1.SpeedButton14Click(Sender: TObject);
begin
OpenDialog1.Title := 'Файлыотчетов Excel';
OpenDialog1.Filter := 'MSExcel files (*.xls)|*.xls';
if OpenDialog1.Execute then
begin
VarEx_1:=CreateOleObject('Excel.Application');
VarEx_1.WorkBooks.Open(OpenDialog1.FileName,,false,,);
VarEx_1.Visible:=True;
end;
{VarEx_1:=CreateOleObject('excel.application');
if dt='' then VarEx_1.WorkBooks.Open(extractfilepath(application.ExeName)+'Statistics.xls',,false,,)
else
VarEx_1.WorkBooks.Open(extractfilepath(application.ExeName)+dt1,,false,,);
VarEx_1.Visible:=True;} end; // выгрузить данные в MS Word
procedure TForm1.SpeedButton12Click(Sender: TObject);
var
i,j,k,k1,l,l1: integer;
b: Boolean;
s: String;
p: Integer;
begin
Wrd:=True;
VarWrd:=CreateOleObject('Word.Application');
VarWrd.Documents.Add(extractfilepath(application.ExeName)+'Statistics.doc',EmptyParam);
VarWrd.Visible:=False;
Panel1.Align:=AlClient; Panel1.Visible:=True; Panel1.SetFocus; Panel1.Refresh; Panel1.Update; Panel1.Repaint;
//Число инцидентов
ADOTable1.Active:=False;
ADOTable1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=inzid.mdb;Persist Security Info=False';
ADOTable1.TableName:='ChisloInzid';
ADOTable1.Active:=True; l:=0;
VarWrd.Selection.GoTo(-1,unAssigned,unAssigned,'Lbl1');
for j:=1 to ADOTable1.RecordCount do
begin
for i:=0 to ADOTable1.FieldCount-1 do
begin
VarWrd.Selection.TypeText(ADOTable1.Fields[i].AsString);
VarWrd.Run('NextCell');
end;
k:=0;
for i:=1 to ADOTable1.FieldCount-1 do k:=k+StrToInt(ADOTable1.Fields[i].AsString);
VarWrd.Selection.TypeText(IntToStr(k)); l:=l+k;
VarWrd.Run('NextCell');
ADOTable1.Next;
end;
VarWrd.Selection.TypeText('Всего');
VarWrd.Run('NextCell');
for i:=1 to ADOTable1.FieldCount-1 do
begin
ADOTable1.First; k:=0; j:=1;
repeat k:=k+StrToInt(ADOTable1.Fields[i].AsString); j:=j+1; ADOTable1.Next; until j>ADOTable1.RecordCount;
VarWrd.Selection.TypeText(IntToStr(k));
VarWrd.Run('NextCell');
end;
VarWrd.Selection.TypeText(IntToStr(l)); … SaveDialog1.Title := 'Файлыотчетов Word';
SaveDialog1.Filter := 'MSWord files (*.doc)|*.doc';
if SaveDialog1.Execute then
begin
s:=SaveDialog1.FileName;
repeat
p:=Pos('\', s);
Delete(s,1,p);
until p=0;
s:=s+'.doc';
ChDir(extractfilepath(SaveDialog1.FileName));
VarWrd.ActiveDocument.SaveAs(SaveDialog1.FileName);
end;
VarWrd.ActiveDocument.SaveAs(extractfilepath(application.ExeName)+'Temp.doc');
VarWrd.Quit;
DeleteFile(extractfilepath(application.ExeName)+'Temp.doc');
Panel1.Visible:=False;
ChDir(extractfilepath(Application.ExeName));
ShowMessage('Данныеудачноперенесеныв Word файл');
end;
// открыть книгу MS Word
procedure TForm1.SpeedButton15Click(Sender: TObject);
begin
OpenDialog1.Title := 'Файлыотчетов Word';
OpenDialog1.Filter := 'MSWord files (*.doc)|*.doc';
if OpenDialog1.Execute then
begin
VarWrd_1:=CreateOleObject('Word.Application');
VarWrd_1.Documents.Open(OpenDialog1.FileName,,false,,);
VarWrd_1.Visible:=True;
end;
VarWrd_1:=CreateOleObject('Word.Application');
if Wrd then VarWrd_1.Documents.Open(extractfilepath(application.ExeName)+'Stat.doc',,false,,)
else VarWrd_1.Documents.Open(extractfilepath(application.ExeName)+'Statistics.doc',,false,,);
VarWrd_1.Visible:=True;
end;
1 http://devdelphi.ru/
2 http://www.delphikingdom.com/asp/viewitem.asp?catalogID=407
|