AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Create Table mit Firebird und ZEOS, wie richtig machen
Thema durchsuchen
Ansicht
Themen-Optionen

Create Table mit Firebird und ZEOS, wie richtig machen

Ein Thema von Jens Hartmann · begonnen am 26. Jan 2010 · letzter Beitrag vom 11. Feb 2010
 
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, 20: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
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:47 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz