AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

SQL Update Script

Ein Thema von b01 · begonnen am 17. Jul 2006 · letzter Beitrag vom 19. Jul 2006
Antwort Antwort
b01

Registriert seit: 3. Jul 2006
26 Beiträge
 
#1

SQL Update Script

  Alt 17. Jul 2006, 18:17
Datenbank: Firebird, Interbase • Version: 1.5 • Zugriff über: SQL, Query, Zeos
Hallo
ich will eine Datenbank (Firebird 1.5)aus meinem Programm heraus updaten. Hierfür benutze ich SQL Scripts in denen ich die Tabellendefinitionen verändere oder neue Tabellen erstelle. Wenn ich das Updatescript in IBExpert teste funtkioniert alles wie es soll, nur wenn ich es aus Delphi heraus versuche funktionierts nicht. Wenn ich die TJvUIBScript Komponente benutze kommt folgende Fehlermeldung
Zitat:
... Exception der Klasse EUIBError aufgetreten. Meldung:'unsuccsessful metadata update STORE RDB$RELATION_FIELDS failed attempt to store dublicate value (visible to active transactions) in unique index "RDB$INDEX_15" This operation is not defined for system tables. Error Code 31', Prozess wurde angehalten ...
Danach habe ich es mit TZSQLProcessor versucht. Das Ergebnis war folgende Meldung:
Zitat:
... Exception der Klasse EZSQLException aufgetretem. Meldung:'unsuccsessful metadata update STORE RDB$RELATION_FIELDS failed attempt to store dublicate value (visible to active transactions) in unique index "RDB$INDEX_15" This operation is not defined for system tables. ...
Zusätzlich wurde die Scriptzeile alter table ARTMODE add def_LOESCHEN BOOLEAN; zitiert, welche die erste Zeile in dem Script ist. Das Updatescript ist ca 1000 Zeilen lang und enthält verschiedene Kommentare. Da das Script in IBExpert fehlerlos durchläuft gehe ich davon aus das ich die verwendeten Komponenten falsch anspreche, allerdings kann ich in meinen Testprogs keine Fehler finden, zB mit Zeos Komponenten ist der einzige selbsterstelle code
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  ZSQLProcessor1.LoadFromFile('D:\Daten\Delphi\Test\update.txt');
  ZSQLProcessor1.Execute;
end;
Bei den Jedi Komponenten sieht es ähnlich aus. Sollte ich das Script in kleinere Packete aufteilen? Wo könnte sonst der Fehler liegen? Gibts es Beispielcode zum verwenden dieser Komponenten?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: SQL Update Script

  Alt 17. Jul 2006, 18:31
Schau mal auf was der genannte Index weist.
Markus Kinzler
  Mit Zitat antworten Zitat
b01

Registriert seit: 3. Jul 2006
26 Beiträge
 
#3

Re: SQL Update Script

  Alt 17. Jul 2006, 19:27
Zitat:
Schau mal auf was der genannte Index weist.
Wie genau mach ich das? Ich hab ein paar indices gefunden die mit RDB$ anfangen aber das wars schon. Da ich bisher nicht mit Fehlermeldungen dieser Art konfrontiert worden bin kenn ich mich mit den Firebird innereien noch nicht aus.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: SQL Update Script

  Alt 17. Jul 2006, 19:36
Alle DB-Objekte die mir RDB$ beginnen sibd Systemobjekte. Blende mal im IBExpert die Systemobjekte ein und schau mal was hinter diesem Index steckt.
Wieviel Benutzer waren/sind zur Ausführungszeit angemeldet?
Vielliecht hilft es schon die datenbank herunterzufahren und neu zu Starten.
Markus Kinzler
  Mit Zitat antworten Zitat
b01

Registriert seit: 3. Jul 2006
26 Beiträge
 
#5

Re: SQL Update Script

  Alt 18. Jul 2006, 19:30
Danke für den Tipp. Ich denke ich habe den Fehler jetzt eingekreist (für Zeos).
SQL-Code:
create table TB1 (
  A_ID integer not null,
  A_Wert1 float,
  ...
  primary key (A_ID)
);

insert into TB1 (A_ID, A_Wert1) values (1, 0.25);
Das erzeugen der Tabelle wird noch gemacht, beim einfügen der Werte krachts dann. Es ist dabei egal ob die TZConnection Komponente auf autocommit steht oder ich selbst committe (in diesem Fall habe ich das commit erst nach beiden befehlen abgesetzt). Wie lässt sich also obiger Code mit einer TZSQLProcessor Komponente ausführen?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: SQL Update Script

  Alt 18. Jul 2006, 19:37
Zitat:
der ich selbst committe (in diesem Fall habe ich das commit erst nach beiden befehlen abgesetzt).
In diesem Fall sollte der Commit vor dem INSERT geschehen.
Versuch mal die DDL- und DML-Statements zu trennen und gesonder auszuführen.
Markus Kinzler
  Mit Zitat antworten Zitat
b01

Registriert seit: 3. Jul 2006
26 Beiträge
 
#7

Re: SQL Update Script

  Alt 18. Jul 2006, 19:58
Wenn ich nach jedem SQL-Befehl committe funktioniert es. Allerdings möchte ich die Änderungen so einteilen das von einer Befehlsgruppe entweder alle oder kein Befehl ausgefürt wird (daher das commit nach mehreren Befehlen). Gibt es trotzdem eine Möglichkeit so etwas zu erreichen?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: SQL Update Script

  Alt 18. Jul 2006, 20:05
Bevor der Insert funktioniert, muß ein Commit erfolgen. Ich würde die Create-Statement ( DDL) strikt von den INSERT-Statements ( DML) trennen.
Markus Kinzler
  Mit Zitat antworten Zitat
Hansa

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

Re: SQL Update Script

  Alt 19. Jul 2006, 02:26
Es gibt einen Befehl COMMIT WORK Allerdings noch die obligatorische Frage : wozu das Ganze ? Warum immer die DB verändern während das Programm schon läuft ? Was wäre, wenn die Benutzer die DB updaten, das Programm allerdings nicht oder umgekehrt ? Warum wird so etwas nicht von vorneherein synchronisiert ? Für Eventualitäten schreibe ich doch kein Programm, das ich in die Tonne trete. 8)
Gruß
Hansa
  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 07:29 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