Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Aendern von SQL-Tabellen ohne Datenverlust???

113 views
Skip to first unread message

Christian Hempe

unread,
Dec 7, 1998, 3:00:00 AM12/7/98
to
Hallo!

Ich arbeite mit D3 und Interbase an einer SQL-Datenbank und habe da
folgendes Problem:
Jedesmal, wenn ich die Struktur einer Tabelle (oder nur den Namen eines
Feldes) aendern will, wird die Tabelle komplett neu angelegt und alle
Daten gehen verloren. Da die Datenbank aber schon z.T. benutzt wird, die
Tabellen also reale Daten enthalten, ist dieser Datenverlust natuerlich
nicht akzeptabel. Ich habe mir bisher geholfen, die Daten von Hand in
eine temporaere Tabelle zu verschieben, dies ist langsam aber ziemlich
aufwendig.
Kennt jemand von Euch vielleicht ein kleines Prograemmchen, mit dem ich
die Tabellen umstrukturieren kann, ohne das die Daten verloren gehen?
Ich koennte dies zwar selbst programmieren, aber warum das Rad neu
erfinden...

Gruss, Christian

Marian Maier

unread,
Dec 7, 1998, 3:00:00 AM12/7/98
to
Hi,

>Jedesmal, wenn ich die Struktur einer Tabelle (oder nur den Namen eines
>Feldes) aendern will, wird die Tabelle komplett neu angelegt und alle
>Daten gehen verloren.

Welche Datenbank? Wie änderst Du die Struktur?

In SQL gibt es ALTER TABLE, sogar Local SQL unterstützt das
einigermaßen.

Ciao, MM

--
Marian Maier, Gamma Soft, Hainstraße 8, 53121 Bonn, Germany
Tel: +49 228 624013 Fax: +49 228 624031
http://www.gammasoft.de/maier
"Was schiefgehen kann geht schief"

Oliver Stoer

unread,
Dec 7, 1998, 3:00:00 AM12/7/98
to
On Mon, 07 Dec 1998 18:13:47 +0100, Christian Hempe
<c...@planetarium.fh-kiel.de> wrote:

>Jedesmal, wenn ich die Struktur einer Tabelle (oder nur den Namen eines
>Feldes) aendern will, wird die Tabelle komplett neu angelegt und alle

>Daten gehen verloren. Da die Datenbank aber schon z.T. benutzt wird, die
>Tabellen also reale Daten enthalten, ist dieser Datenverlust natuerlich
>nicht akzeptabel.

Am besten über ein SQL-Statement. In einem Delphi-Programm z.B. so:

AddField := TQuery.Create(nil);
try
AddField.SQL.Add("alter table foo add NeuesFeld integer;");
AddField.ExecSQL;
finally
AddField.Free;
end;

oder über den WiSQL. Das entscheidende ist das "alter" Statement.

Wenn Du NOT NULL - Felder hinzufügst, denk daran dieses Feld für alle
vorhandenen Datensätze auch zu füllen.

Oliver
--
50°00'00" N
08°36'32" E

Georg Ledermann

unread,
Dec 8, 1998, 3:00:00 AM12/8/98
to
>Ich arbeite mit D3 und Interbase an einer SQL-Datenbank und habe da
>folgendes Problem:

Da ich gedenke, bald ebenfalls auf InterBase umzusteigen, interessiert mich
diese Sache sehr. Habe daher eben ausprobiert, in einer Test-Datenbank die
Struktur zu ändern...


>Jedesmal, wenn ich die Struktur einer Tabelle (oder nur den Namen eines
>Feldes) aendern will, wird die Tabelle komplett neu angelegt und alle
>Daten gehen verloren.

Das kann ich hier jedoch nicht nachvollziehen.
Mittels ISQL habe ich ein "ALTER TABLE tablename ADD spaltenname CHAR(10)"
abgesetzt. Wie erwartet berührt das jedoch NICHT die bisher enthaltenen
Daten.
Wie hast Du denn genau die Struktur geändert?


>Da die Datenbank aber schon z.T. benutzt wird, die
>Tabellen also reale Daten enthalten, ist dieser Datenverlust natuerlich

>nicht akzeptabel. Ich habe mir bisher geholfen, die Daten von Hand in
>eine temporaere Tabelle zu verschieben, dies ist langsam aber ziemlich
>aufwendig.


Wenn das wirklich so wäre, käme das einem K.O.-Kriterium für InterBase
gleich...

Ciao
Georg

Volker Fraenkle

unread,
Dec 8, 1998, 3:00:00 AM12/8/98
to
Hallo Christian,

wie änderst Du denn die Struktur?

Hast Du es schon mal via SQL versucht (ALTER TABLE ....)

Wenn ja, dann ist dieses Verhalten etwas komisch für eine SQL-Datenbank.
Volker


Christian Hempe schrieb:
>
> Hallo!


>
> Ich arbeite mit D3 und Interbase an einer SQL-Datenbank und habe da
> folgendes Problem:

> Jedesmal, wenn ich die Struktur einer Tabelle (oder nur den Namen eines
> Feldes) aendern will, wird die Tabelle komplett neu angelegt und alle

> Daten gehen verloren. Da die Datenbank aber schon z.T. benutzt wird, die


> Tabellen also reale Daten enthalten, ist dieser Datenverlust natuerlich
> nicht akzeptabel. Ich habe mir bisher geholfen, die Daten von Hand in
> eine temporaere Tabelle zu verschieben, dies ist langsam aber ziemlich
> aufwendig.

> Kennt jemand von Euch vielleicht ein kleines Prograemmchen, mit dem ich
> die Tabellen umstrukturieren kann, ohne das die Daten verloren gehen?
> Ich koennte dies zwar selbst programmieren, aber warum das Rad neu
> erfinden...
>
> Gruss, Christian

--
Volker Fraenkle CS Controlling
Technical Consultant Software Systeme GmbH

E-Mail: VFra...@cs-controlling.de
Phone: +49 7144 8144-0 Riedbachstrasse 5
Fax: +49 7144 8144-10 D-74385 Pleidelsheim

Christian Hempe

unread,
Dec 8, 1998, 3:00:00 AM12/8/98
to
Ok, ich hab' nach Olivers Posting das ganze noch einmal genauer ausge-
testet. Der Fehler liegt bei den bei Delphi mitgelieferten Programmen
SQL-Explorer und Database Desktop. Diese zeigen mir beim Umstrukturieren
wirklich den Hinweis "Table XYZ must be re-created to save your edits.
Data contained within will be lost.". Unter WISQL kann ich immerhin Fel-
der hinzufuegen und entfernen, ohne dass mir Daten abhanden kommen.
Danke fuer den Hinweis.
Fuer den Rest (Umbenennen von Feldern etc.) werde ich mir aber wohl doch
ein kleines Tool schreiben.

Gruss, Christian

Martin Mittelmann

unread,
Dec 8, 1998, 3:00:00 AM12/8/98
to

>Kennt jemand von Euch vielleicht ein kleines Prograemmchen, mit dem ich
>die Tabellen umstrukturieren kann, ohne das die Daten verloren gehen?
>Ich koennte dies zwar selbst programmieren, aber warum das Rad neu
>erfinden...
>

Hallo Christian:

Umbenennen eines Feldes geht nicht. Lege ein neuse Feld mit
dem gewünschten namen an und belege es mit den werten aus dem alten feld.
Danach das alte feld wegwerfen:

alter table xxx add neuername altertyp;
update table xxx set neuername=altername;
alter table xxx drop altername;

hth
Martin


Dirk Haenelt

unread,
Dec 9, 1998, 3:00:00 AM12/9/98
to
Hallo,

ich kenne die Interbase zwar nicht, arbeite aber
selbst mit SQL Datenbanken, allerdings unter Linux.

Wenn die Interbase kein ALTER TABLE unterstuetzt wuerde
ich sagen, klopp das ding in die Muelltonne.

Wie aenderst du denn die Struktur ?

Christian Hempe wrote:
>
> Hallo!
>
> Ich arbeite mit D3 und Interbase an einer SQL-Datenbank und habe da
> folgendes Problem:
> Jedesmal, wenn ich die Struktur einer Tabelle (oder nur den Namen eines
> Feldes) aendern will, wird die Tabelle komplett neu angelegt und alle
> Daten gehen verloren. Da die Datenbank aber schon z.T. benutzt wird, die
> Tabellen also reale Daten enthalten, ist dieser Datenverlust natuerlich
> nicht akzeptabel. Ich habe mir bisher geholfen, die Daten von Hand in
> eine temporaere Tabelle zu verschieben, dies ist langsam aber ziemlich
> aufwendig.

> Kennt jemand von Euch vielleicht ein kleines Prograemmchen, mit dem ich
> die Tabellen umstrukturieren kann, ohne das die Daten verloren gehen?
> Ich koennte dies zwar selbst programmieren, aber warum das Rad neu
> erfinden...
>

> Gruss, Christian

--
Dirk Haenelt DG1HTK@DB0TUD.#SAX.DEU.EU
ETI, Grundlagen, TU-DRESDEN Tel./Fax: +49 351 4635354
dh...@eeisz1.et.tu-dresden.de http://eeipe1.et.tu-dresden.de

Ruediger Tams

unread,
Dec 9, 1998, 3:00:00 AM12/9/98
to
Hallo!
An Dirk Haenelt:
Aehm - soweit ich weiss, kann man in
einer Oracle-DB mit ALTER TABLE
auch kein einzelnes (leeres) Feld aus
einer Tabelle loeschen, oder?
Zumindest nicht in 7.3.4 - in 8.0 soll das
ja mittlerweile auch funken.

An Christian Hempe:
Ich kenne Interbase auch nicht und nachdem,
was Du geschrieben hast, will ich Interbase auch gar nicht kennenlernen.

Selbst bei einem Hinzufuegen von Feldern in eine
existierende Tabelle werden die Daten geloescht? Uff...
Gibt es da nicht vielleicht ein Parameter, mit dem man das
einstellen kann?
Oder gibt es eine Replizierungsfunktion, mit der online
Daten in 2 getrennten DBs gehalten werden und bei
Aenderung einer Seite wird der letzte Stand zurueckgespielt...

Wenn nicht, dann klopp das Teil wirklich in die Tonne!

--
Gruss Ruediger Tams

Dirk Haenelt schrieb:

0 new messages