![]() |
Datenbank: Firebird, Interbase • Version: 1.5 • Zugriff über: SQL, Query, Zeos
SQL Update Script
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:
Zitat:
SQL-Code:
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
alter table ARTMODE add def_LOESCHEN BOOLEAN;
Delphi-Quellcode:
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?
procedure TForm1.Button1Click(Sender: TObject);
begin ZSQLProcessor1.LoadFromFile('D:\Daten\Delphi\Test\update.txt'); ZSQLProcessor1.Execute; end; |
Re: SQL Update Script
Schau mal auf was der genannte Index weist.
|
Re: SQL Update Script
Zitat:
|
Re: SQL Update Script
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. |
Re: SQL Update Script
Danke für den Tipp. Ich denke ich habe den Fehler jetzt eingekreist (für Zeos).
SQL-Code:
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?
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); |
Re: SQL Update Script
Zitat:
Versuch mal die DDL- und DML-Statements zu trennen und gesonder auszuführen. |
Re: SQL Update Script
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?
|
Re: SQL Update Script
Bevor der Insert funktioniert, muß ein Commit erfolgen. Ich würde die Create-Statement ( DDL) strikt von den INSERT-Statements ( DML) trennen.
|
Re: SQL Update Script
Es gibt einen Befehl
SQL-Code:
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)
COMMIT WORK
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:45 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-2025 by Thomas Breitkreuz