Extra Systems Database
unit main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, database, table, common;
type
TMainForm = class(TForm)
Label1: TLabel;
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Label2: TLabel;
Edit2: TEdit;
Label3: TLabel;
Edit3: TEdit;
Button4: TButton;
Button5: TButton;
Memo1: TMemo;
Button6: TButton;
Memo2: TMemo;
Button7: TButton;
Button8: TButton;
Button9: TButton;
Button10: TButton;
Button11: TButton;
Button12: TButton;
Button13: TButton;
Button14: TButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure Button8Click(Sender: TObject);
procedure Button9Click(Sender: TObject);
procedure Button10Click(Sender: TObject);
procedure Button11Click(Sender: TObject);
procedure Button12Click(Sender: TObject);
procedure Button13Click(Sender: TObject);
procedure Button14Click(Sender: TObject);
private
FDatabase : TESDBDatabase;
{ Private declarations }
public
{ Public declarations }
end;
var
MainForm: TMainForm;
implementation
{$R *.DFM}
procedure TMainForm.FormCreate(Sender: TObject);
begin
FDatabase:=TESDBDatabase.Create;
end;
procedure TMainForm.FormDestroy(Sender: TObject);
begin
FDatabase.Free;
end;
procedure TMainForm.Button1Click(Sender: TObject);
begin
if FDatabase.CreateDatabase(Edit1.Text, Edit2.Text, StrToInt(Edit3.Text)) then begin
ShowMessage('База данных успешно создана.');
end else begin
ShowMessage('Не удалось создать базу данных.');
end;
end;
procedure TMainForm.Button2Click(Sender: TObject);
begin
if FDatabase.Open(Edit1.Text, Edit2.Text, StrToInt(Edit3.Text)) then begin
Button1.Enabled:=False;
Button2.Enabled:=False;
Button3.Enabled:=True;
end else begin
ShowMessage('Не удалось подключиться к базе данных.');
end;
end;
procedure TMainForm.Button3Click(Sender: TObject);
begin
FDatabase.Close;
Button1.Enabled:=True;
Button2.Enabled:=True;
Button3.Enabled:=False;
end;
procedure TMainForm.Button4Click(Sender: TObject);
var
i:Integer;
Field:TESDBField;
FieldsList:TESDBFieldsList;
Table:TESDBTable;
begin
Button4.Enabled:=False;
FieldsList:=TESDBFieldsList.Create;
Field.FieldName:='CharField';
Field.FieldType:=FIELD_TYPE_CHAR;
Field.FieldLength:=32;
FieldsList.AddItem(Field);
Field.FieldName:='IntegerField';
Field.FieldType:=FIELD_TYPE_INTEGER;
Field.FieldLength:=4;
FieldsList.AddItem(Field);
Field.FieldName:='DateTimeField';
Field.FieldType:=FIELD_TYPE_DATE;
Field.FieldLength:=Sizeof(_SYSTEMTIME);
FieldsList.AddItem(Field);
if FDatabase.CreateTable('TestTable', FieldsList) then begin
ShowMessage('Таблица успешно создана.');
end else begin
ShowMessage('Таблицу создать не удалось.');
end;
Table:=TESDBTable.Create(FDatabase);
if Table.Open('TestTable') then begin
ShowMessage('Открыли таблицу.');
for i:=1 to 100 do begin
Table.Append;
Table.SetIntegerField('IntegerField', i);
Table.SetStringField('CharField', 'Row ' + IntToStr(i));
Table.SetDateTimeField('DateTimeField', Now);
Table.Post;
end;
Table.Close;
ShowMessage('Записали таблицу.');
end else begin
ShowMessage('Открыть таблицу не удалось.');
end;
Table.Free;
FieldsList.Free;
Button4.Enabled:=True;
end;
procedure TMainForm.Button5Click(Sender: TObject);
var
ServerInfo:TESDBServerInfo;
CurStr:String;
begin
if FDatabase.GetServerInfo(ServerInfo) then begin
CurStr:='';
CurStr:=CurStr + 'Общее количество рабочих потоков: ' + IntToStr(ServerInfo.TotalThreadsCount) + #13#10;
CurStr:=CurStr + 'Активное количество рабочих потоков: ' + IntToStr(ServerInfo.ActiveThreadsCount) + #13#10;
CurStr:=CurStr + 'Общее количество БД: ' + IntToStr(ServerInfo.TotalDatabasesCount) + #13#10;
CurStr:=CurStr + 'Активное количество БД: ' + IntToStr(ServerInfo.ActiveDatabasesCount) + #13#10;
CurStr:=CurStr + 'Общее количество таблиц: ' + IntToStr(ServerInfo.TotalTablesCount) + #13#10;
CurStr:=CurStr + 'Активное количество таблиц: ' + IntToStr(ServerInfo.ActiveTablesCount) + #13#10;
CurStr:=CurStr + 'Общее количество элементов связи: ' + IntToStr(ServerInfo.TotalDatasetsCount) + #13#10;
CurStr:=CurStr + 'Активное количество элементов связи: ' + IntToStr(ServerInfo.ActiveDatasetsCount) + #13#10;
ShowMessage(CurStr);
end else begin
ShowMessage('Не удалось получить информацию.');
end;
end;
procedure TMainForm.Button6Click(Sender: TObject);
var
Table:TESDBTable;
begin
Button6.Enabled:=False;
Table:=TESDBTable.Create(FDatabase);
if Table.Open('TestTable') then begin
Table.First;
while not Table.EOF do begin
Memo1.Lines.Add(IntToStr(Table.GetIntegerField('IntegerField')) + '. ' + Table.GetStringField('CharField') + ' - ' + FormatDateTime('dd.mm.yyyy hh:nn:ss', Table.GetDateTimeField('DateTimeField')));
Table.Next;
end;
Table.Last;
while not Table.BOF do begin
Memo2.Lines.Add(IntToStr(Table.GetIntegerField('IntegerField')) + '. ' + Table.GetStringField('CharField'));
Table.Prior;
end;
Table.Close;
end else begin
ShowMessage('Открыть таблицу не удалось.');
end;
Table.Free;
Button6.Enabled:=True;
end;
procedure TMainForm.Button7Click(Sender: TObject);
var
Table:TESDBTable;
i:Integer;
begin
Button7.Enabled:=False;
Table:=TESDBTable.Create(FDatabase);
if Table.Open('TestTable') then begin
Table.First;
while not Table.EOF do begin
i:=Table.GetIntegerField('IntegerField');
i:=i and 15;
if (i = 0) then begin
Table.Edit;
Table.SetIntegerField('IntegerField', Table.GetIntegerField('IntegerField') + 1000);
Table.Post;
end;
Table.Next;
end;
Table.Close;
end else begin
ShowMessage('Открыть таблицу не удалось.');
end;
Table.Free;
Button7.Enabled:=True;
end;
procedure TMainForm.Button8Click(Sender: TObject);
var
Table:TESDBTable;
begin
Button8.Enabled:=False;
Table:=TESDBTable.Create(FDatabase);
if Table.Open('TestTable') then begin
Table.First;
while not Table.EOF do begin
Table.Delete;
end;
Table.Close;
end else begin
ShowMessage('Открыть таблицу не удалось.');
end;
Table.Free;
Button8.Enabled:=True;
end;
procedure TMainForm.Button9Click(Sender: TObject);
var
CurStr:String;
TablesList:TESDBTablesList;
TableItem:TESDBTableItem;
i:Integer;
begin
TablesList:=TESDBTablesList.Create;
if not FDatabase.GetStructure(TablesList) then begin
ShowMessage('Список таблиц получить не удалось.');
end else begin
CurStr:='Список таблиц:'#13#10#13#10;
i:=0;
while (i < TablesList.Count) do begin
TablesList.GetItem(i, TableItem);
CurStr:=CurStr + 'Имя таблицы: ' + StrPas(@TableItem.TableName[1]) + #13#10;
CurStr:=CurStr + 'Количество полей: ' + IntToStr(TableItem.FieldsCount) + #13#10;
CurStr:=CurStr + 'Общее количество записей: ' + IntToStr(TableItem.TotalRecordsCount) + #13#10;
CurStr:=CurStr + 'Количество активных записей: ' + IntToStr(TableItem.RealRecordsCount) + #13#10;
CurStr:=CurStr + 'Количество индексов: ' + IntToStr(TableItem.IndexesCount) + #13#10#13#10;
i:=i + 1;
end;
ShowMessage(CurStr);
end;
TablesList.Free;
end;
procedure TMainForm.Button10Click(Sender: TObject);
begin
if FDatabase.DropTable('TestTable') then begin
ShowMessage('Таблица успешно уничтожена.');
end else begin
ShowMessage('Таблицу уничтожить не удалось.');
end;
end;
procedure TMainForm.Button11Click(Sender: TObject);
begin
if FDatabase.DropDatabase(Edit1.Text, Edit2.Text, StrToInt(Edit3.Text)) then begin
ShowMessage('База данных успешно уничтожена.');
end else begin
ShowMessage('Не удалось уничтожить базу данных.');
end;
end;
procedure TMainForm.Button12Click(Sender: TObject);
begin
if FDatabase.LocalBackup('c:\DBbackup.dat') then begin
ShowMessage('База данных успешно сохранена.');
end else begin
ShowMessage('Не удалось сохранить базу данных.');
end;
end;
procedure TMainForm.Button13Click(Sender: TObject);
begin
if FDatabase.RemoteBackup('c:\DBbackup.dat') then begin
ShowMessage('База данных успешно сохранена.');
end else begin
ShowMessage('Не удалось сохранить базу данных.');
end;
end;
procedure TMainForm.Button14Click(Sender: TObject);
var
Table:TESDBTable;
begin
Button14.Enabled:=False;
Table:=TESDBTable.Create(FDatabase);
if Table.Open('TestTable') then begin
if Table.Pack then begin
ShowMessage('Таблица успешно упакована.');
end else begin
ShowMessage('Упаковать таблицу не удалось.');
end;
Table.Close;
end else begin
ShowMessage('Открыть таблицу не удалось.');
end;
Table.Free;
Button14.Enabled:=True;
end;
end.