Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi FB Double Precision zu Decimal(9,2) ohne Datenverlust ? (https://www.delphipraxis.net/107162-fb-double-precision-zu-decimal-9-2-ohne-datenverlust.html)

DataCool 23. Jan 2008 14:32

Datenbank: Firebird • Version: 1.0.0.794 • Zugriff über: BDE

FB Double Precision zu Decimal(9,2) ohne Datenverlust ?
 
Hi Leute,

möchte meine Datenbankstruktur wie im Titel schon beschrieben anpassen:

Dabei möchte ich mehere Felder vom Typ Double Precision zum Typ DECIMAL(9,2) umwandeln.
OHNE dabei die DAten zu verlieren.

Hatte gehofft das :

SQL-Code:
ALTER TABLE XYZ

  ALTER COLUMN BANK_EINZAHLUNG TYPE DECIMAL(9,2);
Leider wird dieses Statement nicht angenommen.

Jemand eine Idee ?

Danke und Gruß

Data

mkinzler 23. Jan 2008 14:33

Re: FB Double Precision zu Decimal(9,2) ohne Datenverlust ?
 
Füge temporär eine weitere Spalte hinzu.

Dax 23. Jan 2008 14:35

Re: FB Double Precision zu Decimal(9,2) ohne Datenverlust ?
 
Zitat:

Zitat von DataCool
Jemand eine Idee ?

Keine elegante, aber ja:

1) neue spalte anlegen
2) daten aus der alten spalte mit nem cast einfügen (sollte ja funktionieren, '9,2' liegt im double-bereich)
3) alte spalte löschen, neue umbenennen und gegebenenfalls not null setzen

schritt 3 würde ich erst nach einem check ausführen (sum(abs(alt-neu)) = 0 oder sowas)

DataCool 23. Jan 2008 14:40

Re: FB Double Precision zu Decimal(9,2) ohne Datenverlust ?
 
Hi,

ok zwar nicht schön aber das funktioniert bestimmt.
Muss mir jetzt nur nen kleines Tool bauen,
was das ganze über mehere Tabellen und Felder automatisch macht.

Falls aber jemand noch auf eine "elegantere" Lösung kommt,
immer raus damit ;-)

Vielen Dank,

Data

dataspider 23. Jan 2008 15:16

Re: FB Double Precision zu Decimal(9,2) ohne Datenverlust ?
 
Hi Data,

ab Version 1.5 geht es auf jeden Fall auch so:

1. Neue Domain anlegen
2. Update auf Systemtabellen:
SQL-Code:
CREATE DOMAIN D_NUMERIC_9_2 AS NUMERIC(9,2);

update RDB$RELATION_FIELDS set RDB$FIELD_SOURCE = 'D_NUMERIC_9_2' where
      (RDB$FIELD_NAME = 'BANK_EINZAHLUNG') and (RDB$RELATION_NAME = 'XYZ');
Ob es unter 1.0x funktioniert, musst du mal testen.

Frank

DataCool 23. Jan 2008 15:58

Re: FB Double Precision zu Decimal(9,2) ohne Datenverlust ?
 
Hi,

werde ich morgen testen,
jetzt muss ich mich erstmal um andere Belange kümmern.

Danke an alle,

Greetz Data

hoika 23. Jan 2008 18:50

Re: FB Double Precision zu Decimal(9,2) ohne Datenverlust ?
 
Hallo,

ibexpert (personal) runterladen.
Die Spalte ändern -> die benötigte Query wird angezeigt.

Zum Numeric(9,2), probier das erst mal aus.

Kleinere Numeric, z.B. numeric(8,2) werden von Firebird intern als Integer gespeichert.

siehe auch

http://www.ibexpert.info/documentati...CIMAL/458.html


Warum willst du das double precision denn ändern ?


Heiko

Hansa 23. Jan 2008 22:15

Re: FB Double Precision zu Decimal(9,2) ohne Datenverlust ?
 
1. Geh in IBExpert hin und extrahiere die Metadaten inkl. Datatables.
2. ändere den Datentyp im SQL-Script.
3. Tabelle neu erzeugen, alte vorher löschen
4. Daten neu einfügen und fertig.

DataCool 24. Jan 2008 11:20

Re: FB Double Precision zu Decimal(9,2) ohne Datenverlust ?
 
Hi Hansa,

von Prinzip auf jeden Fall machbar;
Leider in der Praxis nicht so umsetzbar,
betrifft ca. 100 Standorte mit jeweils lokaler DB.
Wollte die Umwandlung eigentlich automatisch innerhalb eines Programm-Updates durchführen.

Gruß Data


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