AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Datenbank Tabellen aktualisierung
Thema durchsuchen
Ansicht
Themen-Optionen

Datenbank Tabellen aktualisierung

Ein Thema von manfred_h · begonnen am 28. Apr 2009 · letzter Beitrag vom 28. Apr 2009
Antwort Antwort
Seite 1 von 2  1 2      
manfred_h

Registriert seit: 4. Nov 2005
Ort: Basel
442 Beiträge
 
Delphi XE2 Enterprise
 
#1

Datenbank Tabellen aktualisierung

  Alt 28. Apr 2009, 10:07
Datenbank: Firebird • Version: 2.1 • Zugriff über: Fibplus 6.50
Hallo zusammen

seit einiger Zeit versuche ich in meiner Anwendung eine Funktion zu integrieren um die
Datenbank Tabellen zu aktualisieren. Auf dem Entwiklungssystem funktioniert das einwandfrei.
Auf einer Windows XP Testinstallation ( VMWare ) wird ein Script ( zur DB aktualisierung ) nicht ausgeführt. Das Problem ist bei der Stelle an der db_version_upgrade.sql aufgerufen wird.
( Die Message Boxen sind nur zu Testzwecken integriert )

hier der Delphi-Code:
Delphi-Quellcode:
procedure TDM_update.db_convert(Sender: TObject);
begin
  // Do Backup !!
  begin
    DM.DB_Gideons.Connected:= false;
    db_backupfile := db_dir +('\gideons_db_backup_bevor_db_upgrade.gbk');
    dm.db_backup(Sender);
  end;
  //
  // restore the DB
  begin
    DM.DB_Gideons.Connected:= false;
    db_backupfile := (db_dir+('\gideons_db_backup_bevor_db_upgrade.gbk'));
    DM.DB_Gideons.Connected:= true;
  end;
  //
  // Creating the procedures in the database
  DM.pFIBScript.Script.LoadFromFile (ScriptsDir+'metadata_charset_create.sql');
  DM.pFIBScript.ExecuteScript;
  //
  // Removing the upgrade procedures
  DM.pFIBScript.Script.LoadFromFile (ScriptsDir+'metadata_charset_drop.sql');
  DM.pFIBScript.ExecuteScript;
// //
  // Convert the Database
  MessageBox(0, 'Datenbank Konertierung', 'Datenbank Konertierung', MB_ICONINFORMATION or MB_OK);
  DM.pFIBScript.Script.LoadFromFile (ScriptsDir+'db_version_upgrade.sql');
  DM.pFIBScript.ValidateScript;
  MessageBox(0, 'ValidateScript', 'ValidateScript', MB_ICONINFORMATION or MB_OK);
  DM.pFIBScript.ExecuteScript;
  MessageBox(0, 'Datenbank Konertierung OK ', 'Datenbank Konertierung OK ', MB_ICONINFORMATION or MB_OK);
  //
  with DM.db_vers do
  begin
    DM.db_vers.open;
    DM.db_vers.Edit;
    FieldByName('ID').AsInteger:= 1;
    FieldByName('DB_DATE').AsDateTime := now;
    FieldByName('MAJOR').AsInteger:= 2;
    FieldByName('MINOR').AsInteger:= 1;
    FieldByName('REL').AsInteger:= 0;
    FieldByName('BUILD').AsInteger:= 41;
    FieldByName('SCRIPT').AsString:=('NULL');
    FieldByName('RUNNED').AsString:=('1');
    DM.db_vers.Post;
  end;
end;
und dies ist der SQL-Code von db_version_upgrade.sql:
( In IB Expert lässt sich dieser auch einwandfrei ausführen )

SQL-Code:
/* Create Domain... */
CREATE DOMAIN "D_DATE" AS DATE;
CREATE DOMAIN "D_INTEGER" AS INTEGER;
CREATE DOMAIN "D_SMALLINT" AS SMALLINT;
CREATE DOMAIN "D_TIME" AS DATE;

/*COMMIT WORK;*/

DROP TABLE DB_VERSION;
COMMIT WORK;

/* Create Table... */
CREATE TABLE DB_VERSION (
    ID D_INTEGER NOT NULL,
    DB_DATE D_DATE NOT NULL,
    MAJOR D_INTEGER NOT NULL,
    MINOR D_INTEGER NOT NULL,
    REL D_INTEGER NOT NULL,
    BUILD D_INTEGER NOT NULL,
    SCRIPT VARCHAR(32762) CHARACTER SET ASCII,
    RUNNED D_SMALLINT
);
COMMIT WORK;


/* Create Table... */
CREATE TABLE "BOOKKEEPING_BANK"("ID" "ID" NOT NULL,
"C_NO" "T10",
"U_NO" "T10",
"ACNO" "D_INTEGER",
"BANK_ACCOUNT" "T50",
"L_UPDATE" "TIME_S");

COMMIT WORK;

CREATE TABLE "BOOKKEEPING_BOOKING"("ID" "ID" NOT NULL,
"C_NO" "T10",
"U_NO" "T10",
"BDATE" "D_DATE",
"VOUCHER_NO" "D_INTEGER",
"BTEXT" "T130",
"AMOUNT" "AMOUNT",
"DEBIT_ACNO" "D_INTEGER",
"CREDIT_ACNO" "D_INTEGER",
"DEBIT_ACTYPE" "D_INTEGER",
"CREDIT_ACTYPE" "D_INTEGER",
"L_UPDATE" "TIME_S");

COMMIT WORK;

CREATE TABLE "BOOKKEEPING_BOOKING_PRINT"("C_NO" "T10",
"U_NO" "T10",
"ACNO" "D_INTEGER",
"ACTEXT" "T130",
"BDATE" "D_DATE",
"VOUCHER_NO" "D_INTEGER",
"BTEXT" "T130",
"DEBIT_AMOUNT" "AMOUNT",
"CREDIT_AMOUNT" "AMOUNT",
"ACNO_CROSS" "D_INTEGER",
"DEBIT_ACNO" "D_INTEGER",
"CREDIT_ACNO" "D_INTEGER",
"DEBIT_ACTYPE" "D_INTEGER",
"CREDIT_ACTYPE" "D_INTEGER",
"L_UPDATE" "TIME_S");

COMMIT WORK;

CREATE TABLE "BOOKKEEPING_CHART_ACCOUNTS"("ID" "ID" NOT NULL,
"C_NO" "T10",
"U_NO" "T10",
"ACNO" "D_INTEGER",
"ACTYPE" "D_INTEGER",
"ACTEXT" "T130",
"RW_STATUS" "I_O",
"LANG" "T10",
"L_UPDATE" "TIME_S");

COMMIT WORK;

CREATE TABLE "CAMPS_D_TODO"("ID" "ID",
"C_NO" "T10" NOT NULL,
"U_NO" "T10" NOT NULL,
"TODO_TYPE" "T20",
"TODO_DATE" "D_DATE",
"L_UPDATE" "STATUS",
"STAT_UPDATE" "D_INTEGER",
"STAT_DEL" "D_INTEGER");

COMMIT WORK;

CREATE TABLE "CAMPS_D_VISIT"("ID" "ID",
"C_NO" "T10" NOT NULL,
"U_NO" "T10" NOT NULL,
"VISIT_POS" "T20",
"VISIT_TYPE" "T20",
"VISIT_DATE" "D_DATE",
"L_UPDATE" "STATUS",
"STAT_UPDATE" "D_INTEGER",
"STAT_DEL" "D_INTEGER");

COMMIT WORK;



/* Alter Table (Field)... */
ALTER TABLE "CAMPS_D_PUB" ADD "P_MEETING" "T130";
ALTER TABLE "CAMPS_D_PUB" ADD "P_MEETING_TIME" "D_TIME";
ALTER TABLE "CAMPS_D_PUB" ADD "P_MEETING_LOC" "T130";
ALTER TABLE "CAMPS_D_PUB" ADD "ELECTIONS_DATE" "D_DATE";
ALTER TABLE "CAMPS_D_PUB" ADD "ELECTION_SUPERVISOR" "T20";
ALTER TABLE "CAMPS_D_PUB" ADD "M_MEETING_TIME" "D_TIME";
ALTER TABLE "CAMPS_D_PUB" ADD "BANK_DONATION" "T130";
ALTER TABLE "CAMPS_D_PUB" ADD "BANK_ACC_DONATION" "T130";
ALTER TABLE "TESTIMONY" ADD "VERIFIED" "I_O";
COMMIT WORK;



/* Alter Field (Null / Not Null)... */
UPDATE "RDB$RELATION_FIELDS" SET "RDB$NULL_FLAG"=NULL WHERE "RDB$FIELD_NAME"='RUNNEDAND "RDB$RELATION_NAME"='DB_VERSION';

COMMIT WORK;



/* Create Foreign Key... */
ALTER TABLE "DB_VERSION" ADD CONSTRAINT PK_DB_VERSION PRIMARY KEY ("ID");
COMMIT WORK;

ALTER TABLE "BOOKKEEPING_BANK" ADD CONSTRAINT FK_BOOKKEEPING_BANK_1 FOREIGN KEY ("C_NO") REFERENCES "CAMPS"("C_NO") ON UPDATE CASCADE;
COMMIT WORK;

ALTER TABLE "BOOKKEEPING_BOOKING" ADD CONSTRAINT FK_BOOKKEEPING_BOOKING_B2 FOREIGN KEY ("C_NO") REFERENCES "CAMPS"("C_NO") ON UPDATE CASCADE;
COMMIT WORK;

ALTER TABLE "BOOKKEEPING_CHART_ACCOUNTS" ADD CONSTRAINT FK_BOOKKEEPING_CHART_ACCOUNTS_1 FOREIGN KEY ("C_NO") REFERENCES "CAMPS"("C_NO") ON UPDATE CASCADE;
COMMIT WORK;

ALTER TABLE "CAMPS_D_TODO" ADD CONSTRAINT CAMPS_D_TODO1 FOREIGN KEY ("C_NO") REFERENCES "CAMPS"("C_NO") ON UPDATE CASCADE;
COMMIT WORK;

ALTER TABLE "CAMPS_D_VISIT" ADD CONSTRAINT CAMPS_D_VISIT1 FOREIGN KEY ("C_NO") REFERENCES "CAMPS"("C_NO") ON UPDATE CASCADE;
COMMIT WORK;



/* Drop Fields on Table... */
ALTER TABLE "CAMPS_AC" DROP "CABINET_LAST_V";
ALTER TABLE "CAMPS_AC" DROP "CABINET_NEXT_V";
ALTER TABLE "CAMPS_AC" DROP "M_LAST_V";
ALTER TABLE "CAMPS_AC" DROP "M_NEXT_V";
ALTER TABLE "CAMPS_D_PUB" DROP "PRAYER_M";
ALTER TABLE "CAMPS_D_PUB" DROP "PRAYER_M_LOC";
ALTER TABLE "CAMPS_D_PUB" DROP "ELECTIONS_LAST";
ALTER TABLE "CAMPS_D_PUB" DROP "ELECTIONS_NEXT";
ALTER TABLE "CAMPS_FO" DROP "CABINET_LAST_V";
ALTER TABLE "CAMPS_FO" DROP "CABINET_NEXT_V";
ALTER TABLE "CAMPS_FO" DROP "M_LAST_V";
ALTER TABLE "CAMPS_FO" DROP "M_NEXT_V";
ALTER TABLE "CAMPS_FO" DROP "ELECTIONS_HQ";
ALTER TABLE "CAMPS_FO" DROP "NMP";
ALTER TABLE "CAMPS_FO" DROP "NMM";
ALTER TABLE "CAMPS_FO" DROP "PB";
ALTER TABLE "CAMPS_FO" DROP "MEMBER_FEE";
ALTER TABLE "CAMPS_FO" DROP "TARGET_SET";
ALTER TABLE "CAMPS_FO" DROP "ANNUAL_REPORT";
ALTER TABLE "CAMPS_ZD" DROP "CABINET_LAST_V";
ALTER TABLE "CAMPS_ZD" DROP "CABINET_NEXT_V";
ALTER TABLE "CAMPS_ZD" DROP "M_LAST_V";
ALTER TABLE "CAMPS_ZD" DROP "M_NEXT_V";
COMMIT WORK;
Besten Dank für Eure Tipps
Manfred
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#2

Re: Datenbank Tabellen aktualisierung

  Alt 28. Apr 2009, 10:17
Selbst eine nichtssagende Fehlermeldung ist besser als gar keine. Oder kommt gar keine ?
Gruß
Hansa
  Mit Zitat antworten Zitat
hoika

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

Re: Datenbank Tabellen aktualisierung

  Alt 28. Apr 2009, 10:20
Hallo,

ich sehe kein Connect zur DB im Script.
IBExpert macht das u.U. selber (vor allem, wenn die DB im IBExpert schon geöffnet ist).


Heiko
Heiko
  Mit Zitat antworten Zitat
manfred_h

Registriert seit: 4. Nov 2005
Ort: Basel
442 Beiträge
 
Delphi XE2 Enterprise
 
#4

Re: Datenbank Tabellen aktualisierung

  Alt 28. Apr 2009, 10:40
Sorry

Bei der Ausfürung des Scriptes tritt keine Fehlermeldung auf.
Die erste Meldung kommt hier: ( Table unknown. DB_Version )
Delphi-Quellcode:
with DM.db_vers do
  begin
    DM.db_vers.open;
    DM.db_vers.Edit;
    FieldByName('ID').AsInteger:= 1;
    FieldByName('DB_DATE').AsDateTime := now;
    FieldByName('MAJOR').AsInteger:= 2;
    FieldByName('MINOR').AsInteger:= 1;
    FieldByName('REL').AsInteger:= 0;
    FieldByName('BUILD').AsInteger:= 41;
    FieldByName('SCRIPT').AsString:=('NULL');
    FieldByName('RUNNED').AsString:=('1');
    DM.db_vers.Post;
  end;
Die Tabelle sollte mit dem Script erstellt werden ( wird aber nicht ).
Beim Anschliesenden Programmaufruf kommen etliche Fehlermeldungen die aber alle darauf zurückzuführen sind
das das Script nicht ausgeführt wurde. ( db_version_upgrade.sq )

@ Heiko
Zitat:
Ich sehe kein Connect zur DB im Script.
IBExpert macht das u.U. selber (vor allem, wenn die DB im IBExpert schon geöffnet ist).
Werde ich anschauen. Das Script wird aber auf dem Entwcklungssystem aufgeführt.
Das heisst gleiche installation ( Dir Inhalt der Anwendung ) funktioniert hier..

Manfred
  Mit Zitat antworten Zitat
hoika

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

Re: Datenbank Tabellen aktualisierung

  Alt 28. Apr 2009, 10:46
Hallo,

Zitat:
Werde ich anschauen. Das Script wird aber auf dem Entwcklungssystem aufgeführt.
Das heisst gleiche installation ( Dir Inhalt der Anwendung ) funktioniert hier.
.

Hast du mal auf deinem Entwicklungsrechner
die VMWare-DB probiert.

Vielleicht wird das Script auch hier nicht ausgeführt,
du merkst es aber nicht, weil die Entwickler-DB per IBExpert
auf dem aktuellen Stand ist ?




Heiko
Heiko
  Mit Zitat antworten Zitat
manfred_h

Registriert seit: 4. Nov 2005
Ort: Basel
442 Beiträge
 
Delphi XE2 Enterprise
 
#6

Re: Datenbank Tabellen aktualisierung

  Alt 28. Apr 2009, 10:49
Zitat von hoika:
Hallo,
Hast du mal auf deinem Entwicklungsrechner
die VMWare-DB probiert.

Vielleicht wird das Script auch hier nicht ausgeführt,
du merkst es aber nicht, weil die Entwickler-DB per IBExpert
auf dem aktuellen Stand ist ?
Heiko
Hallo Heiko

ja dies habe ich schon versuch. Die DB wird einwandfrei aktualisiert.

Danke aber für Deinen Tipp.

Manfred
  Mit Zitat antworten Zitat
manfred_h

Registriert seit: 4. Nov 2005
Ort: Basel
442 Beiträge
 
Delphi XE2 Enterprise
 
#7

Re: Datenbank Tabellen aktualisierung

  Alt 28. Apr 2009, 10:51
Zitat von hoika:
Hallo,
ich sehe kein Connect zur DB im Script.
IBExpert macht das u.U. selber (vor allem, wenn die DB im IBExpert schon geöffnet ist).
Heiko
Der Connect zur DB wird nicht im Script sondern "bei der Konponente" erstellt.

DM.DB_Gideons.Connected:= true; Die Komponente DM.pFIBScript ist mit der DM.DB_Gideons verbunden ( im Daten Modul ).

Danke schon mal für Deinen Tipp
Manfred
  Mit Zitat antworten Zitat
hoika

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

Re: Datenbank Tabellen aktualisierung

  Alt 28. Apr 2009, 10:54
Hallo,

vielleicht ne blöde Idee, aber

viell. schlägt das Create Domain fehl, weil die Domain schon da ist ?
Und dann wird alles andere nicht ausgeführt ?

Ausserdem würde ich die Datei-Namen (incl. Pfad) mal per MessageBoxc ausgeben.


Heiko
Heiko
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#9

Re: Datenbank Tabellen aktualisierung

  Alt 28. Apr 2009, 10:55
Aha, es kommt keine Fehlermeldung, aber trotzdem eine Meldung, die auf einen Fehler hinweist ?

Zitat von manfred_h:
( Table unknown. DB_Version )
Für mich heißt das, dass die Tabelle "DB_Version" nicht vorhanden ist. Und das ist auch klar. Ist sie auch nicht. Laut Script heißt die nämlich DB_VERSION. Du hast die DB wegen der dämlichen Quotes "" nämlich Groß/kleinschreibungsempfindlich gemacht. Ist das überhasupt SQL-Dialekt 3 ? Die Glaskugel sagt mir weiter, dass der Name DB_VERSION gefährlich ist/werden könnte, weil das auch gut ein reservierter DB-Identifier werden könnte. Aber das nur am Rande. 8)
Gruß
Hansa
  Mit Zitat antworten Zitat
manfred_h

Registriert seit: 4. Nov 2005
Ort: Basel
442 Beiträge
 
Delphi XE2 Enterprise
 
#10

Re: Datenbank Tabellen aktualisierung

  Alt 28. Apr 2009, 11:09
Zitat von Hansa:
Für mich heißt das, dass die Tabelle "DB_Version" nicht vorhanden ist. Und das ist auch klar. Ist sie auch nicht. Laut Script heißt die nämlich DB_VERSION.
Sorry Die Fehlermeldung heisst natürlich Table unknown. DB_VERSION

Zitat von Hansa:
Du hast die DB wegen der dämlichen Quotes "" nämlich Groß/kleinschreibungsempfindlich gemacht.
Dies hat der IB Database Comparar für mich übernommen. Danke aber für den Hinweis. In meiner "Master DB"
ist dies nicht der Fall.

Zitat von Hansa:
Die Glaskugel sagt mir weiter, dass der Name DB_VERSION gefährlich ist/werden könnte, weil das auch gut ein reservierter DB-Identifier werden könnte. Aber das nur am Rande.
Danke für den Tipp / werde dies anpassen.

Zitat von Heiko:
vielleicht ne blöde Idee, aber viell. schlägt das Create Domain fehl, weil die Domain schon da ist ?
Und dann wird alles andere nicht ausgeführt ?
Die Idee ist sicherlich nicht Blöd aber die Domain's bestehen noch nicht.

Zitat von Heiko:
Ausserdem würde ich die Datei-Namen (incl. Pfad) mal per MessageBoxc ausgeben.
Bin gerade dabei. Danke.

Manfred
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 20:48 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