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
 
#28

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

  Alt 28. Jan 2010, 18:36
Hallo zusammen,

ich habe jetzt mal versucht das ganze umzusetzen. Es funktioniert auch so wie ich mir das Vorgestellt habe. Allerdings frage ich nach dem Abfragen ob die DB "DBINFO" existiert mit
Delphi-Quellcode:
  if Qry_DataVersion.RecordCount = 0 then
    begin
ab, ob die DB existiert. Und ich vermute das es nicht der Richtige weg ist. Hier mal meine Funtkion mit der DB-Version, wie "hoika" vorgeschlagen hat.
Delphi-Quellcode:
//Anweisung in Form.Create von Form1
  if DM_Update.DatenbankVersion(Vers) = true then
    begin
    ...
//Neues Unit DataManagement. Soll die komplette Verwaltung der Datenbank in Zukunft übernehmen
unit DataManagement;

interface

uses
  SysUtils, Classes, ZConnection, DB, ZAbstractRODataset, ZAbstractDataset,
  ZDataset, Dialogs;

type
  TDM_Update = class(TDataModule)
    Con_UpdateConfig: TZConnection;
    Con_UpdateSecurdat: TZConnection;
    Con_UpdateUser: TZConnection;
    Qry_DataVersion: TZQuery;
    Qry_UpdateVersion: TZQuery;
  private
    { Private-Deklarationen }
  public
    function DatenbankVersion(var Version : Integer) : Boolean;
    function UpdateVersion(var Version : Integer) : Boolean;
    function UpdateDataDB(var Version : Integer) : Boolean;
    function UpdateUserDB(var Version : Integer) : Boolean;
    { Public-Deklarationen }
  end;
var
  DM_Update: TDM_Update;

implementation
uses
Alarm;

{$R *.dfm}
function TDM_Update.DatenbankVersion(var Version : Integer) : Boolean;
var
  CurrentVersion : integer;
begin
DatenbankVersion := true;
  try
    Qry_DataVersion.SQL.Text :=
      'SELECT 1 FROM rdb$relations where rdb$relation_name = :TableName';
    Qry_DataVersion.ParamByName('TableName').AsString:= 'DBINFO';
    Qry_DataVersion.Open;

    if Qry_DataVersion.RecordCount = 0 then
      begin
        Qry_DataVersion.Close;
        Qry_DataVersion.SQL.Text :=
          'CREATE GENERATOR GEN_DBINFO_ID; ';
        Qry_DataVersion.ExecSQL;
        DM_Update.Con_UpdateConfig.Commit;
        Qry_DataVersion.SQL.Text :=
          'CREATE TABLE DBINFO (ID_INFO ID_DOM, VERSION NUMMER_DOM)';
        Qry_DataVersion.ExecSQL;
        DM_Update.Con_UpdateConfig.Commit;
        Qry_DataVersion.SQL.Text :=
          'ALTER TABLE DBINFO ADD CONSTRAINT PK_DBINFO PRIMARY KEY (ID_INFO) USING INDEX ID_INFO';
        Qry_DataVersion.ExecSQL;
        DM_Update.Con_UpdateConfig.Commit;
        Qry_DataVersion.SQL.Text :=
          'CREATE OR ALTER TRIGGER TRI_DBINFO FOR DBINFO ACTIVE BEFORE INSERT POSITION 0 '+
          'AS BEGIN '+
          'IF (NEW.ID_INFO IS NULL) THEN '+
          'NEW.ID_INFO = GEN_ID(GEN_DBINFO_ID,1);END';
        Qry_DataVersion.ExecSQL;
        DM_Update.Con_UpdateConfig.Commit;

        Qry_DataVersion.Close;
        Qry_DataVersion.SQL.Text :=
          'INSERT INTO DBINFO (VERSION)VALUES(:Bereich)';
        Qry_DataVersion.ParamByName('Bereich').Value := 1;
        Qry_DataVersion.ExecSQL;
        DM_Update.Con_UpdateConfig.Commit;
      end
    else
      begin
        CurrentVersion := 2;//Wert kann je nach Softwareversion der DB angepasst werden
        Qry_DataVersion.SQL.Text :=
          'SELECT * FROM DBINFO';
        Qry_DataVersion.Open;
        if Qry_DataVersion.FieldByName('Version').AsInteger <> CurrentVersion then
          begin
            if UpdateVersion(CurrentVersion) = true then
              begin
                Form1.ServiceMemo.Lines.Add('Datenbankupdate auf Version '+IntToStr(CurrentVersion)+
                                            ' erfolgreich durchgeführt!');
                Version := CurrentVersion;
              end
          end
        else
          Version := CurrentVersion;
      end;
  except
    DatenbankVersion := false;
  end;
end;

function TDM_Update.UpdateVersion(var Version : Integer) : Boolean;
begin
UpdateVersion := true;
  try
    Qry_UpdateVersion.SQL.Text :=
      'UPDATE DBINFO SET VERSION = :Version WHERE ID_INFO =:Id';
    Qry_UpdateVersion.ParamByName('Version').Value := Version;
    Qry_UpdateVersion.ParamByName('Id').Value := 1;
    Qry_UpdateVersion.ExecSQL;
    Con_UpdateConfig.Commit;
    case Version of
    1: begin
         UpdateDataDB(Version);//in die Case Anweisungen je nach Notwendigkeit
         UpdateUserDB(Version);
       end;
    2: begin
         UpdateDataDB(Version);//in die Case Anweisungen je nach Notwendigkeit
       end;
    end;
  except
    UpdateVersion := false;
  end;
end;

function TDM_Update.UpdateDataDB(var Version : Integer) : Boolean;
begin
  //Update der Datenbank Data
end;

function TDM_Update.UpdateUserDB(var Version : Integer) : Boolean;
begin
  //Update der Datenbank User
end;

end.
Ich hoffe das meine Gedanke ansonsten in Ordnung sind. Kommentare erwünscht.

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 12:35 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 by Thomas Breitkreuz