Einzelnen Beitrag anzeigen

Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#33

Re: Create Table mit Firebird und ZEOS, wie richtig machen

  Alt 10. Feb 2010, 21:58
Hallo zusammen,

so ich habe jetzt so eine function mal bearbeitet und auch versucht das mit der Transaktion und so umzusetzten. Was mit noch fehlt ist die Auswertung der Exception. Also dadurch bitte nicht verwirren lassen. Ich will nur mal hören, ob das sonst so schon besser aussieht.

Delphi-Quellcode:
//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 = '1then
    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;
Über Eure Anregungen bin ich dankbar.

Gruß Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat