Информационная система компьютерного клуба
OleServer, ExcelXP;
type
TForm1 = class(TForm)
Report_Word: TButton;
Report_Excel: TButton;
CreatePivotTable: TButton;
ADOConnection1: TADOConnection;
ADODataSet1: TADODataSet;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
TabSheet3: TTabSheet;
ADOTable1: TADOTable;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
RadioButton1: TRadioButton;
ComboBox1: TComboBox;
RadioButton2: TRadioButton;
ComboBox2: TComboBox;
DBGrid2: TDBGrid;
ADOQuery1: TADOQuery;
DataSource2: TDataSource;
Select: TMemo;
Button1: TButton;
DBGrid3: TDBGrid;
DataSource3: TDataSource;
TabSheet4: TTabSheet;
ADOQuery2: TADOQuery;
DataSource4: TDataSource;
DBGrid4: TDBGrid;
Button4: TButton;
ADODataSet3: TADODataSet;
Button5: TButton;
TabSheet5: TTabSheet;
DBGrid5: TDBGrid;
DataSource5: TDataSource;
Button6: TButton;
procedure Report_WordClick(Sender: TObject);
procedure Report_ExcelClick(Sender: TObject);
procedure CreatePivotTableClick(Sender: TObject);
procedure RadioButton1Click(Sender: TObject);
procedure ComboBox1Click(Sender: TObject);
procedure RadioButton2Click(Sender: TObject);
procedure ComboBox2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Wd, Doc, Rng, Tbl, Xl, Wb, Ws, Ch, Z : Variant;
implementation
{$R *.dfm}
procedure TForm1.Report_WordClick(Sender: TObject);
var I, Rcnt:integer;
begin
// Открываем базу данных и подсчитываем количество записей
ADODataSet1.Open;
Rcnt:=ADODataSet1.RecordCount;
// Запускаем MS Word
wd:= CreateOleObject('Word.Application');
// Отображаем на экране окно MS Word
wd.Visible :=True;
// Создаем новый документ
wd.Documents.Add;
Doc:= wd.Documents.Item(1);
// Добавляем новый абзац
Doc.Paragraphs.Add;
// Меняем его стиль
Doc.Paragraphs.Item(1).Style:='Заголовок 1';
// Создаем заголовок отчета
Rng := Doc.Range(0);
Rng.InsertBefore('Центр данных');
// Создаем заголовки колонок
Doc.Paragraphs.Add;
Rng.InsertAfter('Комп: Игрок: Дата: Продолжительность: Код услуги: Админ');
// Перемещаемся на первую запись набора данных
ADODataSet1.First;
for I := 1 to Rcnt do begin
// Добавляем новый абзац
Doc.Paragraphs.Add;
// Добавляем поля из текущей записи в новый абзац
Rng.InsertAfter(ADODataSet1.Fields[0].AsString+':'+
ADODataSet1.Fields[1].ASString+':'+
ADODataSet1.Fields[2].AsString+':'+
ADODataSet1.Fields[3].ASString+':'+
ADODataSet1.Fields[4].ASString+':'+
ADODataSet1.Fields[5].ASString);
ADODataSet1.Next;
end;
// Превращаем текст в таблицу
Rng:=Doc.Range(Doc.Paragraphs.Item(3).Range.Start, Doc.Paragraphs.Item(Rcnt+3).Range.End);
Tbl:=Rng.ConvertToTable(':',Rcnt,6);
// Изменяем размеры колонок таблицы
Tbl.Columns.Item(1).Width:=Tbl.Columns.Item(1).Width-30;
Tbl.Columns.Item(2).Width:=Tbl.Columns.Item(2).Width+20;
Tbl.Columns.Item(3).Width:=Tbl.Columns.Item(3).Width-3;
Tbl.Columns.Item(4).Width:=Tbl.Columns.Item(4).Width+20;
Tbl.Columns.Item(5).Width:=Tbl.Columns.Item(5).Width-5;
Tbl.Columns.Item(6).Width:=Tbl.Columns.Item(6).Width+5;
// Подавляем вывод диагностических сообщений
Wd.DisplayAlerts:=False;
// Сохраняем документ
Doc.SaveAs('D:SOTCustrep.doc');
// Закрываем Word и освобождаем ресурсы
//Wd.Quit;
Wd:=Unassigned;
end;
procedure TForm1.Report_ExcelClick(Sender: TObject);
var I, Rcnt:integer;
begin
// Открываем базу данных и подсчитываем количество записей
ADODataSet1.Open;
Rcnt := ADODataSet1.RecordCount;
// Запускаем Microsoft Excel
Xl := CreateOleObject('Excel.Application');
// Отображаем окно Microsoft Excel
Xl.Visible := True;
// Создаем рабочую книгу
Xl.WorkBooks.Add;
Wb := XL.WorkBooks[1];
Ws := Wb.WorkSheets[1];
Ws.Name := 'Центр данных';
// Создаем заголовок отчета
Ws.Cells[1,1] := 'Центр данных';
Ws.Cells[1,1].Font.Bold := True;
Ws.Cells[1,1].Font.Size := 16;
Ws.Cells[2,1] := 'Комп';
Ws.Cells[2,2] := 'Игрок';
Ws.Cells[2,3] := 'Дата';
Ws.Cells[2,4] := 'Продолжительность';
Ws.Cells[2,5] := 'Код услуги';
Ws.Cells[2,6] := 'Админ';
for I:=1 to 6 do
Ws.Cells[2,i].Font.Bold := True;
// Перемещаемся на первую запись набора данных
ADODataSet1.First;
for I:=1 to Rcnt do
begin
// Добавляем значения полей текущей записи в новую строку
Ws.Cells[i+2,1] := ADODataSet1.Fields[0].AsString;
Ws.Cells[i+2,2] := ADODataSet1.Fields[1].AsString;
Ws.Cells[i+2,3] := ADODataSet1.Fields[2].AsString;
Ws.Cells[i+2,4] := ADODataSet1.Fields[3].AsString;
Ws.Cells[i+2,5] := ADODataSet1.Fields[4].AsString;
Ws.Cells[i+2,6] := ADODataSet1.Fields[5].AsString;
ADODataSet1.Next;
end;
// Изменяем ширину колонок
Xl.Columns[1].ColumnWidth:=Xl.Columns[1].ColumnWidth+5;
Xl.Columns[2].ColumnWidth:=Xl.Columns[2].ColumnWidth+5;
Xl.Columns[3].ColumnWidth:=Xl.Columns[3].ColumnWidth+5;
Xl.Columns[4].ColumnWidth:=Xl.Columns[4].ColumnWidth+5;
Xl.Columns[5].ColumnWidth:=Xl.Columns[5].ColumnWidth+5;
Xl.Columns[6].ColumnWidth:=Xl.Columns[6].ColumnWidth+5;
// Подавляем вывод диагностических сообщений
Xl.DisplayAlerts:=false;
// Сохраняем документ
Wb.SaveAs('D:SOTCustrer.xls');
// Закрываем Excel и освобождаем ресурсы
//Xl.Quit;
Xl:=Unassigned;
end;
procedure TForm1.CreatePivotTableClick(Sender: TObject);
var
WB,PC,PT:Variant;
const
// Константы Excel
xlExternal = $00000002;
xlCmdSql = $00000002;
xlColumnField = $00000002;
xlDataField = $00000004;
xlPageField = $00000003;
xlRowField = $00000001;
begin
// ADODataSet2.Open;
// Запускаем Microsoft Excel
Xl := CreateOleObject('Excel.Application');
// Делаем окно Excel видимым
Xl.Visible:=true;
// Создаем одну рабочую книгу с одним листом
Xl.WorkBooks.Add(1);
Wb := Xl.WorkBooks[1];
Ws := Wb.WorkSheets[1];
// Создаем кэш для хранения данных
PC := WB.PivotCaches.Add(xlExternal);
// Выбираем источник данных и текст запроса
PC.Connection := 'OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;'+
'Data Source=D:SOTclub.mdb';
PC.CommandType := xlCmdSql;
PC.CommandText := 'SELECT Игрок, Номер_компа,'+' Админ, Код_услуги, Цена FROM 01Cost_more_5';
// Создаем сводную таблицу
PC.CreatePivotTable(WB.Worksheets[1].Cells[1,1],'PivotTable1');
PT := WB.Worksheets[1].PivotTables('PivotTable1');
// Указываем расположение осей и суммируем данные
PT.PivotFields('Игрок').Orientation := xlRowField;
PT.PivotFields('Игрок').Position := 1;
PT.PivotFields('Номер_компа').Orientation := xlRowField;
PT.PivotFields('Номер_компа').Position := 2;
PT.PivotFields('Админ').Orientation := xlPageField;
PT.PivotFields('Код_услуги').Orientation := xlColumnField;
PT.PivotFields('Цена').Orientation := xlDataField;
WB.Worksheets[1].Columns[2].ColumnWidth := 15;
WB.Worksheets[1].Columns[1].ColumnWidth := 20;
end;
procedure TForm1.RadioButton1Click(Sender: TObject);
var i:integer;
begin
ADOConnection1.GetTableNames(ComboBox1.Items);
for i:=Combobox1.Items.Count-1 downto 0 do
if Pos ('0', Combobox1.Items[i])>0 then Combobox1.Items.Delete(i) ;
for i:=Combobox1.Items.Count-1 downto 0 do
if Pos ('1', Combobox1.Items[i])>0 then Combobox1.Items.Delete(i) ;
for i:=Combobox1.Items.Count-1 downto 0 do
if Pos ('2', Combobox1.Items[i])>0 then Combobox1.Items.Delete(i) ;
end;
procedure TForm1.ComboBox1Click(Sender: TObject);
begin
if ADOTable1.Active then ADOTable1.Active:=False;
ADOTable1.TableName:=ComboBox1.Text;ADOTable1.Active:=True;
TabSheet1.Caption:= ComboBox1.Text;
end;
procedure TForm1.RadioButton2Click(Sender: TObject);
var i:integer;
begin
ADOConnection1.GetTableNames(ComboBox2.Items);
for i:=Combobox2.Items.Count-1 downto 0 do
if Pos ('Админ', Combobox2.Items[i])>0 then Combobox2.Items.Delete(i) ;
for i:=Combobox2.Items.Count-1 downto 0 do
if Pos ('Данные', Combobox2.Items[i])>0 then Combobox2.Items.Delete(i) ;
for i:=Combobox2.Items.Count-1 downto 0 do
if Pos ('Инфо игрока', Combobox2.Items[i])>0 then Combobox2.Items.Delete(i) ;
for i:=Combobox2.Items.Count-1 downto 0 do
if Pos ('Комп', Combobox2.Items[i])>0 then Combobox2.Items.Delete(i) ;
for i:=Combobox2.Items.Count-1 downto 0 do
if Pos ('Услуги', Combobox2.Items[i])>0 then Combobox2.Items.Delete(i) ;
for i:=Combobox2.Items.Count-1 downto 0 do
if Pos ('~', Combobox2.Items[i])>0 then Combobox2.Items.Delete(i) ;
end;
procedure TForm1.ComboBox2Click(Sender: TObject);
begin
if ADOTable1.Active then ADOTable1.Active:=False;
ADOTable1.TableName:=ComboBox2.Text;ADOTable1.Active:=True;
TabSheet1.Caption:= ComboBox2.Text;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if ADOQuery2.Active then ADOQuery2.Active:=False;
ADOQuery2.SQL:=Select.Lines;ADOQuery2.Active:=True;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if ADOTable1.Active then ADOTable1.Active:=False;
ADOTable1.TableName:=ComboBox1.Text;ADOTable1.Active:=True;
TabSheet1.Caption:= ComboBox1.Text;
end;
procedure TForm1.Button4Click(Sender: TObject);
{var
fam: string[30];
begin
fam:=InputBox('Выборка информации из БД',
'Укажите фамилию и щелкните на OK.', '');
if fam <> '' // пользователь ввел фамилию
then }
begin
with form1.ADOQuery2 do begin
Close; // закрыть файл-результат выполнения предыдущего запроса
SQL.Clear; // удалить текст предыдущего запроса
// записываем новый запрос в свойство SQL
SQL.Add('SELECT Админ, ФИО, Ставка');
SQL.Add('FROM Админ');
Open; // активизируем выполнение запроса
end;
{if ADOQuery2.RecordCount <> 0 then
DataSource1.DataSet:=ADOQuery2 // отобразить рез-т выполнения запроса
else begin
ShowMessage('В БД нет записей, удовлетворяющих критерию запроса.');
DataSource1.DataSet:=ADOTable1;
end; }
end;
procedure TForm1.Button5Click(Sender: TObject);
var I, Rcnt:integer;
begin
// Открываем базу данных и подсчитываем количество записей
ADODataSet3.Open;
Rcnt := ADODataSet3.RecordCount;
// Запускаем Microsoft Excel
Xl := CreateOleObject('Excel.Application');
// Отображаем окно Microsoft Excel
Xl.Visible := True;
// Создаем рабочую книгу
Xl.WorkBooks.Add;
Wb := XL.WorkBooks[1];
Ws := Wb.WorkSheets[1];
Ws.Name := 'Админ';
// Создаем заголовок отчета
Ws.Cells[1,1] := 'Админ';
Ws.Cells[1,1].Font.Bold := True;
Ws.Cells[1,1].Font.Size := 16;
Ws.Cells[2,1] := 'Админ';
Ws.Cells[2,2] := 'ФИО';
Ws.Cells[2,3] := 'Адрес';
Ws.Cells[2,4] := 'Ставка';
for I:=1 to 4 do
Ws.Cells[2,i].Font.Bold := True;
// Перемещаемся на первую запись набора данных
ADODataSet3.First;
for I:=1 to Rcnt do
begin
// Добавляем значения полей текущей записи в новую строку
Ws.Cells[i+2,1] := ADODataSet3.Fields[0].AsString;
Ws.Cells[i+2,2] := ADODataSet3.Fields[1].AsString;
Ws.Cells[i+2,3] := ADODataSet3.Fields[2].AsString;
Ws.Cells[i+2,4] := ADODataSet3.Fields[3].AsString;
ADODataSet3.Next;
end;
// Изменяем ширину колонок
Xl.Columns[1].ColumnWidth:=Xl.Columns[1].ColumnWidth+5;
Xl.Columns[2].ColumnWidth:=Xl.Columns[2].ColumnWidth+5;
Xl.Columns[3].ColumnWidth:=Xl.Columns[3].ColumnWidth+5;
Xl.Columns[4].ColumnWidth:=Xl.Columns[4].ColumnWidth+5;
// Подавляем вывод диагностических сообщений
Xl.DisplayAlerts:=false;
// Сохраняем документ
Wb.SaveAs('D:SOTCustrer2.xls');
// Закрываем Excel и освобождаем ресурсы
//Xl.Quit;
Xl:=Unassigned;
end;
procedure TForm1.Button6Click(Sender: TObject);
begin
with form1.ADOQuery2 do begin
//Close; // закрыть файл-результат выполнения предыдущего запроса
SQL.Clear; // удалить текст предыдущего запроса
// записываем новый запрос в свойство SQL
SQL.Add('INSERT INTO Админ (Админ, ФИО, Адрес, Ставка) VALUES ("Annie", "Бойко А.К.", "Засекречено:)", 1000);');
ExecSQL;
// активизируем выполнение запроса
end;
end;
end.