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
Antwort Antwort
Seite 4 von 4   « Erste     234   
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.387 Beiträge
 
Delphi 12 Athens
 
#31

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

  Alt 4. Feb 2010, 07:32
Guten Morgen...
Zitat:
kann mir vieleicht mal jemand was zu der Metadaten Komponente sagen.
...siehe #20. Einfach auf die Form klatschen, einstellen welche Metadaten du sehen willst --> Open und du hast eine Ergebnismenge mit den Informationen. Ich habe das bisher nur lesend genutzt, ob man auch Informationen schreiben kann oder ob die Ergebnismenge nur Lesen ist kann ich nicht sagen.

  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#32

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

  Alt 4. Feb 2010, 07:34
Hallo,

ich habe mein "Update-Tool" in eine DLL ausgelagert.
Damit kann ich es in mehreren Programm-Modulen benutzen.

Ausserdem ist eine DLL schnell aktualisiert und weggeschickt,
falls mal was internes an der DB geändert/verbessert wird,
was das eigentliche Programm nicht interessieren muss.

Mit RecordCount meinte ich, dass verschiedene DB-Komponenten
das unterschiedlich "implementieren".


Metadaten sollte mn nie direkt schreiben,
es sei denn:
- es geht nicht anders
- man weiss, was man macht

Ich teste solche Sachen zuerst per IBExpert,
dort wird der "Metadaten-Code" ja angezeigt.


Heiko
Heiko
  Mit Zitat antworten Zitat
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
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#34

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

  Alt 11. Feb 2010, 08:20
Hallo,

ein paar Anmerkungen

1.
Ich mache das immer so

Delphi-Quellcode:
function CreateDataTableMB100: Boolean;
begin
  Result:= False;

  try
    // create code

    Result:= True;

  except
    // Ausnahme-Behandlung
  end;
end;
2.
Create Or Alter Trigger

Warum Alter, der Trigger ist doch gelöscht.
Aber OK, neue Syntax darf man auch nutzen.

3.
Den Primary Key würde ich gleich an das Create Table packen.

Create Table XXX (Id Integer, Name Char(20), primary key(id)) Dabei wird allerdings ein RDBXXX Index angelegt, was nicht so schön aussieht,
per Using könnte man eine anderen (unique) Index festlegen.


4. Domains
Warum schreibst du das Not Null noch dahinter ?
Ich bin mir jetzt nicht ganz scher,
aber kann man das bei der Domain selber nicht schon hinschreiben ?


Das wars


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

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

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

  Alt 11. Feb 2010, 09:26
Hallo,

danke schon mal für die Anregungen.
Delphi-Quellcode:
function CreateDataTableMB100: Boolean;
begin
  Result:= False;

  try
    // create code

    Result:= True;

  except
    // Ausnahme-Behandlung
  end;
end;
Ja, scheint mir logisch zu sein.
Zitat von hoika:
Warum schreibst du das Not Null noch dahinter ?
Ja, da hast Du recht. Habe ich nicht dran gedacht.

Gruß Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 4   « Erste     234   


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 04:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz