AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Den Typ einer Spalte nachträglich ändern. Daten sollen bestehen bleiben
Thema durchsuchen
Ansicht
Themen-Optionen

Den Typ einer Spalte nachträglich ändern. Daten sollen bestehen bleiben

Offene Frage von "mkinzler"
Ein Thema von Der schöne Günther · begonnen am 16. Feb 2016 · letzter Beitrag vom 16. Feb 2016
Antwort Antwort
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.395 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: Den Typ einer Spalte nachträglich ändern. Daten sollen bestehen bleiben

  Alt 16. Feb 2016, 11:37
was ist daran gruselig? Aber wenn Du niemandem traust (keine schlechte Eigenschaft beim programmieren), dann mach es doch selbst:

1. neue Spalte anlegen im Wunschtyp als tmpIrgendwas
2. alte Spalte in neue Spalte konvertieren (z.B. führende 0 anfügen,...)
3. alte Spalte löschen
4. neue Spalte anlegen
5. Daten aus der temporären Spalte in die endgültige Spalte verschieben
6. temp-Stalte löschen
7. ggf. witere Aktionen (Index,...)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Den Typ einer Spalte nachträglich ändern. Daten sollen bestehen bleiben

  Alt 16. Feb 2016, 11:51
Ich würde es etwas einfacher machen
1) neue Spalte anlegen
2) alte Spalte in neue Spalte konvertieren (Führende Nullen/Tausendertrennzeichen etc.)
3) Indizes anpassen falls notwendig/Trigger/Constraints oder 1a)
...
Irgendwann einmal alte Spalte löschen.
Den alten Namen für die neue Spalte weiter benutzen würde ich nicht, da es dann mal unbeabsichtigt knallen könnte wenn Du eine Typänderung vergessen hast.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.375 Beiträge
 
Delphi 12 Athens
 
#3

AW: Den Typ einer Spalte nachträglich ändern. Daten sollen bestehen bleiben

  Alt 16. Feb 2016, 11:55
Den alten Namen für die neue Spalte weiter benutzen würde ich nicht, da es dann mal unbeabsichtigt knallen könnte wenn Du eine Typänderung vergessen hast.
Aber so bekommt man nicht mit, wenn man irgendwo im Code noch auf die alte Spalte geht.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#4

AW: Den Typ einer Spalte nachträglich ändern. Daten sollen bestehen bleiben

  Alt 16. Feb 2016, 12:04
Aber so bekommt man nicht mit, wenn man irgendwo im Code noch auf die alte Spalte geht.
Auch'n Argument, also nicht irgendwann, sondern sofort die alte Spalte löschen.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.199 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Den Typ einer Spalte nachträglich ändern. Daten sollen bestehen bleiben

  Alt 16. Feb 2016, 12:05
Den alten Namen für die neue Spalte weiter benutzen würde ich nicht, da es dann mal unbeabsichtigt knallen könnte wenn Du eine Typänderung vergessen hast.
Das verstehe ich nicht. Meinst du wenn ich, mittels Delphis wunderbarem Variant -Typ an X Stellen auf dieses Feld zugreife und jetzt vergesse, alle zu erwischen? Das würde mir doch zur Laufzeit genauso um die Ohren fliegen wie wenn ich mit FieldByName(..) auf ein nicht mehr vorhandenes Feld zugreife.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Den Typ einer Spalte nachträglich ändern. Daten sollen bestehen bleiben

  Alt 16. Feb 2016, 12:30
Na irgendwann mußt Du ja Farbe bekennen und dich für Integer oder String entscheiden und spätestens dann macht es Plopp.
Da ich Variant wann immer es geht vermeide, habe ich das Vergnügen halt früher.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#7

AW: Den Typ einer Spalte nachträglich ändern. Daten sollen bestehen bleiben

  Alt 16. Feb 2016, 14:07
Ich schließe mich himitsu an.
Update auf Zielinhalt, dann den Typ der Spalte ändern.
Es kann aber sein, dass es tatsächlich Systeme gibt, die das nicht mögen. Dann bleibt nichts als der Umweg über eine zusätzliche Spalte.

Wenn man keine Altlasten haben möchte, lieber alles sofort durchgehend umstellen.
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.375 Beiträge
 
Delphi 12 Athens
 
#8

AW: Den Typ einer Spalte nachträglich ändern. Daten sollen bestehen bleiben

  Alt 16. Feb 2016, 14:48
Wenn beim Umstellen "Datenverlust" entsteht, also z.B. aus "a1" eine 1 wird, dann eventuell eine Kopie der Daten behalten.
* Spalte umbenennen (hier bleiben aber eventuelle Referenzen bestehen)
* neue Backup-Spalte und alte Spalte löschen/ändern
* oder einfach als DB-Backup

Aber die Spalte unter dem bekannten Namen besser weg, damit man Fehler findet.
Muß etwas weiter auf die alte Spalte gehen, dann explizit auf das Backup umstellen und vielleicht noch einen Synchro-Trigger, der die Spalten abgleicht.

Ob man nun die neue Spalte neu erstellt und die Alte löscht, oder die Alte nur Konvertiert, ist dann geschmackssache, bzw. hängt vom DBMS ab.

IMHO
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (16. Feb 2016 um 14:51 Uhr)
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Den Typ einer Spalte nachträglich ändern. Daten sollen bestehen bleiben

  Alt 16. Feb 2016, 17:10
Hallo,
man könnte ja die alte Spalte in 2 neue kopieren (für Backup zum Gucken mit dem gleichen Datentyp und Produktivbetrieb mit dem neuen Datentyp).

Zur Frage nach einem Standard:
eigentlich sollte Alter Column von jedem DB unterstützt werden,
aber ist halt nur eigentlich, also nicht wirklich.

Bei alten Firebirds musste man über die Systemtabellen gehen,
bei der BDE gab es das DbiDoRestructure, was das schön gekapselt hat ... hach, die gute alte Zeit ...


Heiko
Heiko
  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 15:58 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