AGB  ·  Datenschutz  ·  Impressum  







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

Datenbank-Update zur Laufzeit

Ein Thema von HPB · begonnen am 20. Nov 2015 · letzter Beitrag vom 20. Nov 2015
Antwort Antwort
HPB

Registriert seit: 2. Jun 2008
365 Beiträge
 
Delphi XE7 Professional
 
#1

Datenbank-Update zur Laufzeit

  Alt 20. Nov 2015, 11:51
Datenbank: Interbase • Version: XE2 • Zugriff über: IB
Guten Tag Delphianer,
ich habe die verschiedenen Themen zu einem Datenbankupdate die hier im Forum stehen
gelesen. Es ist aber alles nicht das was ich suche.
Folgende Situation:
Ich möchte einige Tabellen in einer Interbase-Datenbank zur Laufzeit updaten,
oder auch Felder zu Tabellen hinzufügen.
Vorher prüfe ich ob eine Update nötig ist. Das ist alles klar.

Um was es mir geht ist folgendes:
Wenn ich ein Update ausführen möchte, muss ich ja die Datenbank öffnen.
Wenn die DB geschlossen ist, kann ich nicht auf die Transaction zugreifen usw.
Beim User sind aber die Änderungen in der DB noch nicht bekannt.
Ein öffnen führt also zu einer Fehlermeldung (siehe Anhang, das Feld soll
erst hinzugefügt werden).

Das Update wird von einem SQL-Scipt Ausgeführt.
Um die Änderung in die Datenbank zu übernehmen wird eine Transaction geöffnet
und hinterher mit Commit geschlossen.

Hier ein klein wenig Code:
Delphi-Quellcode:
procedure TOLogenUpdate2420.NeueTabelleMatrikelNr;
begin
  try
    dtmdMain.DoStartTransaction;
    FMSQL.Close;
    FMSQL.SQL.Clear;
    FMSQL.SQL.Add('create table matrikelnummern (');
    FMSQL.SQL.Add('matrikelnr integer not null ) ');
    FMSQL.Prepare;
    FMSQL.ExecQuery;

    FMSQL.Close;
    FMSQL.SQL.Clear;
    FMSQL.SQL.Add('alter table matrikelnummern add primary key (matrikelnr)');
    FMSQL.Prepare;
    FMSQL.ExecQuery;
  finally
    dtmdMain.ibtrnsctnLoge.Commit;
  end;
end;
Dazu die Transaction aus der Datenbank:
Delphi-Quellcode:
procedure TdtmdMain.DoStartTransaction;
begin
  if not ibtrnsctnLoge.InTransaction then ibtrnsctnLoge.StartTransaction;
end;
Wie kann die Fehlermeldung umgangen werden????
Ich möchte nicht jedesmal die gesamte DB-Struktur und die enthaltenen Daten exportieren.
Das ist keine Option, in manchen Tabellen stehen tausende von Datensätze.
Welchen Weg gibt es noch um ein Update durchzuführen?

Die Fehlermeldung ist im Anhang beigefügt.

Wenn Vorschläge, dann bitte mit Beispiel.

Mit Gruß HPB
Miniaturansicht angehängter Grafiken
fehler-db-oeffnen.png  
  Mit Zitat antworten Zitat
arnof

Registriert seit: 25. Apr 2013
1.254 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#2

AW: Datenbank-Update zur Laufzeit

  Alt 20. Nov 2015, 11:56
Fehlermeldung ist doch eindeutig: das Feld gibts nicht ....
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: Datenbank-Update zur Laufzeit

  Alt 20. Nov 2015, 11:57
Naja einmal sollten keine (anderen) User zur Datenbank verbunden sein wenn du das Update ausführst.
Zum anderen musst du je nachdem was du an den Strukturen änderst natürlich auch den Code des Clients ändern.
Da kommst du ja ohne weiteres nicht drum rum. Woher soll das Programm auch wissen dass es neue Felder gibt und vor allem ob und wie es diese benutzen soll.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
HPB

Registriert seit: 2. Jun 2008
365 Beiträge
 
Delphi XE7 Professional
 
#4

AW: Datenbank-Update zur Laufzeit

  Alt 20. Nov 2015, 12:02
Naja einmal sollten keine (anderen) User zur Datenbank verbunden sein wenn du das Update ausführst.
Zum anderen musst du je nachdem was du an den Strukturen änderst natürlich auch den Code des Clients ändern.
Da kommst du ja ohne weiteres nicht drum rum. Woher soll das Programm auch wissen dass es neue Felder gibt und vor allem ob und wie es diese benutzen soll.
Danke für Deine Antwort,
ich habe den Fehler gefunden. Es stand noch etwas von einem ur, uralten Quellcode in der Unit.
Die Datenbank kann selbstverständlich geöffnet werden. Die Tabellen dürfen erst geöffnet werden,
wenn das Update gelaufen ist. Da hast Du ganz recht.
Nun da der Quellcode berichtigt ist, läuft auch alles wie gewünscht.
Mit Gruß HPB
  Mit Zitat antworten Zitat
Antwort Antwort


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