Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi den Feldtyp ändern? (https://www.delphipraxis.net/53102-den-feldtyp-aendern.html)

smart 10. Sep 2005 09:43

Datenbank: ABS • Version: 488 • Zugriff über: Datascore

den Feldtyp ändern?
 
Wie kann man bei einer Datenbank, im Nachhinein, den Feldtyp ändern?

Sharky 10. Sep 2005 10:00

Re: den Feldtyp ändern?
 
Zitat:

Zitat von smart
Wie kann man bei einer Datenbank, im Nachhinein, den Feldtyp ändern?

Hai Heike,

schaue mal in der Hilfe nach Delphi-Referenz durchsuchenALTER TABLE und dort dann unter Delphi-Referenz durchsuchenMODIFY.

smart 10. Sep 2005 10:23

Re: den Feldtyp ändern?
 
Zitat:

Zitat von Sharky
schaue mal in der Hilfe nach Delphi-Referenz durchsuchenALTER TABLE und dort dann unter Delphi-Referenz durchsuchenMODIFY.

Hallo Staphan!

Habe ich versucht, geht nicht, bzw. ist dann das Dbfile kaputt wenn ich mit Modify ändere. Auch ein Feldname hinzufügen, klappt auch nicht.

MarkusB 10. Sep 2005 10:35

Re: den Feldtyp ändern?
 
Moin smart!

Benutze AbsDB Manager.
Menue: Table->Restructure Table.

Viele Grüße
Markus
:gruebel:

Sharky 10. Sep 2005 10:41

Re: den Feldtyp ändern?
 
Zitat:

Zitat von smart
...Habe ich versucht, geht nicht, ...

Wie sieht denn dein SQL-Kommando aus?

smart 11. Sep 2005 09:09

Re: den Feldtyp ändern?
 
Vielen Dank an Euch Allen, hat hingehauen.

Sharky 11. Sep 2005 09:14

Re: den Feldtyp ändern?
 
Zitat:

Zitat von smart
Vielen Dank an Euch Allen, hat hingehauen.

Wie hast Du es denn jetzt gemacht?

smart 11. Sep 2005 15:51

Re: den Feldtyp ändern?
 
Zitat:

Zitat von Sharky
[Wie hast Du es denn jetzt gemacht?

Ganz einfach, Ich benötigte ein Feld von Type Integer (hatte ich nicht hinbekommen :-() aber die Sache ging auch mit 'String'. Da habe einfach ich 'String' genommen.;-)

Sharky 11. Sep 2005 15:54

Re: den Feldtyp ändern?
 
Zitat:

Zitat von smart
... hatte ich nicht hinbekommen

Gab es eine Fehlermeldung?
Oder waren schon Daten in der Tabelle gespeichert? Ich weiss nicht wie die ABS reagiert wenn ich einen Feldtyp ändern möchte und dies aber zu einem Konflikt mit Daten in diesem Feld führt.

smart 11. Sep 2005 16:02

Re: den Feldtyp ändern?
 
Zitat:

Zitat von Sharky
Gab es eine Fehlermeldung?
Oder waren schon Daten in der Tabelle gespeichert? Ich weiss nicht wie die ABS reagiert wenn ich einen Feldtyp ändern möchte und dies aber zu einem Konflikt mit Daten in diesem Feld führt.

Ich habe alle möglichen Kombinationen getestet, entweder gab es eine Fehlermeldung oder das DB-File war kaputt und zwar ohne Fehlermeldung. Nach einigen Stunden hatte ich dann keine Lust mehr.

smart 11. Sep 2005 16:07

Re: den Feldtyp ändern?
 
Zitat:

Zitat von Sharky
Gab es eine Fehlermeldung?
Oder waren schon Daten in der Tabelle gespeichert? Ich weiss nicht wie die ABS reagiert wenn ich einen Feldtyp ändern möchte und dies aber zu einem Konflikt mit Daten in diesem Feld führt.

Damit hatte ich es u.a. versucht:
Delphi-Quellcode:
ALTER TABLE Tabelle MODIFY (feld1 string Date);

Sharky 11. Sep 2005 16:07

Re: den Feldtyp ändern?
 
Hmm... bei mir ging es ohne Probleme.

smart 11. Sep 2005 16:18

Re: den Feldtyp ändern?
 
Zitat:

Zitat von Sharky
Hmm... bei mir ging es ohne Probleme.

Mit
Delphi-Quellcode:
ALTER TABLE Tabelle MODIFY (Feld1 Date Memo);
kam zwar keine Fehlermeldung, aber es hatte sich auch nichts geändert.

smart 11. Sep 2005 16:26

Re: den Feldtyp ändern?
 
Zitat:

Zitat von Sharky
Hmm... bei mir ging es ohne Probleme.

So eine Unsinn, jetzt habe ich den Fehler raus gefunden! Ich habe die ganze Zeit immer Alter_Feldtype mit Neuer_Feldtype vertauscht. Da fällt mir nichts mehr ein!!

Sharky 11. Sep 2005 16:32

Re: den Feldtyp ändern?
 
:gruebel:
Den alten Feldtyp musst Du überhaupt nicht angeben.
SQL-Code:
ALTER TABLE Tabelle MODIFY (Feld1 Memo);
Setzt den Typ von Feld1 auf Memo.

smart 11. Sep 2005 17:30

Re: den Feldtyp ändern?
 
Zitat:

Zitat von Sharky
:gruebel:
Den alten Feldtyp musst Du überhaupt nicht angeben.

Haste Recht, geht auch ohne! Danke!;-)

Robert_G 11. Sep 2005 17:39

Re: den Feldtyp ändern?
 
Mal ein kleine Frage von jemanden, der keine Ahnung von ABS hat...

Was passiert, wenn du Daten in der Tabelle hast und plötzlich einen numerischen Wert (Date) in ein referenziertes Textfeld (was Memo wohl sein wird) änderst?
Sind die Daten danach nicht komplett hinüber? :gruebel:

Sharky 11. Sep 2005 17:47

Re: den Feldtyp ändern?
 
Zitat:

Zitat von Robert_G
... Sind die Daten danach nicht komplett hinüber? :gruebel:

Hai Robert,

ich habe das mal schnell getestet:
SQL-Code:
CREATE TABLE test (
  id AUTOINC,
  datum DATE
);
Dann habe ich im Feld Datum gültige Daten eingefügt (2005-05-09 , 2005-09-09).
Jetzt habe ich :
SQL-Code:
ALTER TABLE test MODIFY (datum memo);
gemacht. Die von mir eingefügten Daten standen dann im Memofeld. Auch das zurückwandelnd mit
SQL-Code:
ALTER TABLE test MODIFY (datum date);
funktionierte.
Sobald ich aber etwas in dem Memo verändert habe (ein 'blubb' hinten drann geschrieben) kamm eine Fehlermeldung:
Zitat:

Error altering table: 'Invalid value for field 'datum'' - Native error: 30265

Robert_G 11. Sep 2005 18:20

Re: den Feldtyp ändern?
 
Zitat:

Zitat von Sharky
Sobald ich aber etwas in dem Memo verändert habe (ein 'blubb' hinten drann geschrieben) kamm eine Fehlermeldung:
Zitat:

Error altering table: 'Invalid value for field 'datum'' - Native error: 30265

Das habe ich mir schon die ganze Zeit bei heikes Antworten gedacht. ;)
Das ist übrigens die gleiche Macke, die IB/FB auszeichet...
Statements, die bestehende Daten verändern ohne, dass sofort der Tablespace aktualisiert wird kann ja auch nix werden. Aber eigentlich sollte eine DB sowas niemals zulassen, solange Daten in der Tabelle sind. ;)

Sharky 11. Sep 2005 18:24

Re: den Feldtyp ändern?
 
Ups.
Nicht das Du mich falsch verstehst. Ich kann den Inhalt des Memos ändern!
Aber wenn in dem Memo (oder auch string) kein Datum im gültigen Format steht kann ich das Feld nicht mehr in ein Date-Feld ändern. Ist ja auch logisch ;-)

Aber ich kann z.B. einen Integer/Datum in einen String/Memo wandeln und diesen dann ganz normal weiter verwenden.

Robert_G 11. Sep 2005 18:29

Re: den Feldtyp ändern?
 
Zitat:

Zitat von Sharky
Aber ich kann z.B. einen Integer/Datum in einen String/Memo wandeln und diesen dann ganz normal weiter verwenden.

Ich weiß es ist OT, aber damit ich ruhigen Gewissens den Thread hier verlassen kann...
Hst du mal geprüft, ob sich die Datendatei passend zu deinen Änderungen vergrößert? Also ob die Mini engine diese Änderungen sofort durchführt?
Wenn ja macht das ABS _wesentlich_ beser als zum Beispiel Firebird. FB lässt dich eine Spalte von varchar auf integer ändern, aber wehe man traut ich die alten (VarChar) Werte anzufassen. :shock:

Sharky 11. Sep 2005 18:39

Re: den Feldtyp ändern?
 
Ich habe eben eine Datenbank mit einer Tabelle erzeugt. Diese hatte ein Feld vom Typ Integer und es waren 4 Datensätze vorhanden (1,2,3,4).

Dann habe ich den Feldtyp auf Memo geändert. Sofort nach dem ausführen des ALTER TABLE hat sich die größe der Datenbankdatei erhöht. Und ich kann auch alles in das Memoschreiben was ich möchte.

Einen Feldtyp VarChar kennt die ABS-DB leider nicht wenn ich das richtig sehe. (Und Trigger und SPs schon garnicht ;-) ).


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:22 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