AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Feldtyp ändern

Ein Thema von Walter Landwehr · begonnen am 17. Jan 2020 · letzter Beitrag vom 23. Jan 2020
Antwort Antwort
Walter Landwehr

Registriert seit: 28. Mär 2006
Ort: 32816 Schieder-Schwalenberg
324 Beiträge
 
Delphi 10.1 Berlin Professional
 
#1

Feldtyp ändern

  Alt 17. Jan 2020, 17:50
Datenbank: Firebird • Version: 2.5 • Zugriff über: IBO
Hallo,

ich möchte in einer Tabelle ein Feldtyp ändern. Feld Faktor ist DOUBLE PRECISION (Dom_Betrag) soll geändert werden in Numeric (DOM_Faktor)

Das Feld enthält bereits Werte und dürfen nicht verlorengehen. Gibt es hier eine einfache Lösung?
Vielen Dank für jeden Tipp.
Walter Landwehr
Mfg

Walter
  Mit Zitat antworten Zitat
stifflersmom

Registriert seit: 8. Dez 2005
Ort: 24994 Holt
225 Beiträge
 
Delphi 2006 Professional
 
#2

AW: Feldtyp ändern

  Alt 17. Jan 2020, 18:11
Vielleicht erst mal eine zusätzliche Spalte anfügen und die Werte dann übertragen.
Wenn die gut aussehen, kannst Du das ursprüngliche Feld auf den gewünschten neuen Datentyp umwandeln und die Werte dann zurückkopieren.

Pseudo-Code:
Code:
// Neues Feld
alter table blabla add field tempfield decimal (10,2);
// Alte Werte kopieren
update table blabla set tempfield = sourcefield;
// Auf Unterschiede abfragen
select * from blabla where temfield <> sourcefield;
Wenn hier dann keine Werte rausgekommen sind, dann beherzt weitermachen...
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
7.353 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Feldtyp ändern

  Alt 17. Jan 2020, 18:15
  • altes Feld umbenennen
  • neues Feld anlegen
  • neues Feld aus altem Feld füllen
  • altes Feld löschen
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
7.563 Beiträge
 
Delphi XE4 Professional
 
#4

AW: Feldtyp ändern

  Alt 18. Jan 2020, 16:39
Hallo,

alter table alter column

Und dann den Inhalt überprüfen.
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
16.569 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: Feldtyp ändern

  Alt 18. Jan 2020, 19:06
Hallo,

alter table alter column

Und dann den Inhalt überprüfen.
Direktes ändern einer Spalte wird in wenigen Fällen vom Datenbanksystem unterstützt.
Nur wenn es praktisch 1:1 ohne Anpassung in die neue Definition geht funktioniert das.
Als z.B. beim vergrößern von varchar-Spalten.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
7.563 Beiträge
 
Delphi XE4 Professional
 
#6

AW: Feldtyp ändern

  Alt 23. Jan 2020, 00:44
Hallo,
Zitat:
Direktes ändern einer Spalte wird in wenigen Fällen vom Datenbanksystem unterstützt.
Klar geht das. (unter Firebird)

Char(20) -> VarChar(20)
Smallint -> Integer

Im gegebenen Fall spielt aber die Frage der unterschiedlichen Interpretation
der Datentypen eine Rolle.

->
Da darf sich der TE aber selber drum kümmern.
Deshalb meine Info zu "Prüfen"
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
35.261 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Feldtyp ändern

  Alt 23. Jan 2020, 01:26
Jo, neu erstellen, umkopieren+casten und das Alte löschen geht immer.
Man kann auch das Alte erstmal nicht löschen. So hat man die originalen Werte immernoch, falls etwas schief ging und man es später erst bemerkt.

In der 2.0er-Hilfe steht nichts davon (die 2.5er sah ich grade nicht), aber scheinbar soll es das wirlich geben: (jedenfalls schrieben mehrere das als Lösung, wenn jemand irgendwo nach deinem Problem fragte, und andere DBMS nutzen die selbe Syntax)
ALTER TABLE Tabelle ALTER COLUMN Faktor TYPE NUMERIC; -- oder SET DATA TYPE statt TYPE
Sollte es wirklich gehen (Syntax wird nicht abgelehnt), aber es mit dem Inhalt Probleme geben, dann auch gleich mal das versuchen:
ALTER TABLE Tabelle ALTER COLUMN Faktor TYPE NUMERIC USING Cast(Faktor AS NUMERIC); -- im USING den "neuen" Inhalt berechnen
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu (23. Jan 2020 um 01:38 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf