//function zur Reorganisation der Datenbank aus der Stammdatenbank
procedure TForm1.Reorganisation1Click(Sender: TObject);
var
i : integer;
ComPortConnect : Boolean;
begin
ComPortConnect := false;
if MessageDlg('
Achtung durch die Reorganisation werden vorhandene Daten gelöscht!'+
'
Wollen Sie die Reorganisation wirklich starten?'
,mtWarning,[mbYes, mbNo], 0) = mrYes
then begin
FPasswort.EDPasswort.Clear;
FPasswort.BTOK.Enabled := false;
case FPasswort.ShowModal
of mrOK:
begin
if ComPort1.Connected = true
then
begin
ComPort1.Close;
tbConnect.Enabled := true;
tbDisconnect.Enabled := false;
ComPortConnect := true;
end;
VST.Clear;
try
try
Qry_Reorganisation.SQL.Text :=
'
SELECT 1 FROM rdb$relations where rdb$relation_name = :TableName';
Qry_Reorganisation.ParamByName('
TableName').AsString:= '
MB100';
Qry_Reorganisation.Open;
if DropDataTableMB100
then //function Tabelle löschen inkl. Generator und Trigger
if CreateDataTableMB100
then //function Tabelle neu erstellen inkl. Generator und Trigger etc.
DM_PS.ConPSSecur.Commit;
//Wenn alles OK, dann Commit als Transaktion
except
DM_PS.ConPSSecur.Rollback;
//Wenn Exception das Rollback
ShowMessage('
Reorganisation fehlgeschlagen');
end;
finally
if InsertDataTableMB100
then
begin
ShowMessage('
Reorganisation erfolgreich abgeschlossen');
Servicefunktionen1.Visible := false;
Reorganisation1.Visible := false;
if ComPortConnect
then
tbConnect.Click;
end;
end;
end;
end;
end;
end;
//Tabelle löschen
function TForm1.DropDataTableMB100 : Boolean;
begin
DropDataTableMB100 := true;
try
if Qry_Reorganisation.Fields[0].AsString = '
1'
then
begin
Qry_Reorganisation.SQL.Text :=
'
DROP TRIGGER TRI_MB100';
Qry_Reorganisation.ExecSQL;
Qry_Reorganisation.SQL.Text :=
'
DROP SEQUENCE GEN_MB100_ID';
Qry_Reorganisation.ExecSQL;
Qry_Reorganisation.SQL.Text :=
'
DROP TABLE MB100';
Qry_Reorganisation.ExecSQL;
end;
except
DropDataTableMB100 := false;
end;
end;
//Tabelle Erstellen
function TForm1.CreateDataTableMB100 : Boolean;
begin
CreateDataTableMB100 := true;
try
Qry_Reorganisation.Close;
Qry_Reorganisation.SQL.Text :=
'
CREATE GENERATOR GEN_MB100_ID; ';
Qry_Reorganisation.ExecSQL;
Qry_Reorganisation.SQL.Text :=
'
CREATE TABLE MB100 (ID ID_DOM NOT NULL, LFDNR NUMMER_DOM NOT NULL, '+
'
DATUM DATUM_DOM NOT NULL, UHRZEIT ZEIT_DOM NOT NULL, EREIGNIS TEXT_DOM, '+
'
TEILNEHMER TEXT_DOM, BEREICH TEXT_DOM, SYSTEMZEIT ZEITEN_DOM DEFAULT ''
NOW''
NOT NULL)';
Qry_Reorganisation.ExecSQL;
Qry_Reorganisation.SQL.Text :=
'
ALTER TABLE MB100 ADD CONSTRAINT PK_MB100 PRIMARY KEY (ID) USING INDEX ID';
Qry_Reorganisation.ExecSQL;
Qry_Reorganisation.SQL.Text :=
'
CREATE OR ALTER TRIGGER TRI_MB100 FOR MB100 ACTIVE BEFORE INSERT POSITION 0 '+
'
AS BEGIN '+
'
IF (NEW.ID IS NULL) THEN '+
'
NEW.ID = GEN_ID(GEN_MB100_ID,1);END';
Qry_Reorganisation.ExecSQL;
except
CreateDataTableMB100 := false;
end;
end;
//Daten aus Stammdatenbank wieder in die neu erstellte Datenbank einfügen
function TForm1.InsertDataTableMB100 : Boolean;
var
i : integer;
begin
InsertDataTableMB100 := true;
try
Qry_Reorganisation.Close;
Qry_Reorganisation.SQL.Text := '
SELECT DATA_READ_COM FROM SERVICE_TABLE';
Qry_Reorganisation.Open;
PBFortschritt.Position := 0;
PBFortschritt.Max := Qry_Reorganisation.RecordCount;
Qry_Reorganisation.First;
for i := 0
to Qry_Reorganisation.RecordCount - 1
do
begin
DataMB100 := Qry_Reorganisation.FieldByName('
DATA_READ_COM').AsString;
DatenverarbeitungVSTMB100;
PBFortschritt.Position := Qry_Reorganisation.RecNo;
Qry_Reorganisation.Next;
Application.ProcessMessages;
end;
PBFortschritt.Position := 0;
except
InsertDataTableMB100 := false;
end;
end;