# Felddatentypen per SQL ändern



## fhr (6. Februar 2004)

Morgen,  

ich habe folgendes Problem:

Ich kopiere von einer Zieldatenbank in eine Quelldatenbank mit:
INSERT INTO ... IN ... SELECT ... FROM ... WHERE ....

Das ganze wird mit C++ und ODBC realisiert. DB ist  Access.

Das kopieren funktioniert auch  . Das Problem ist das in der Quelldatenbank alle Felddatentypen Text sind. Ich brauch aber in meiner Zieldatenbank Number... (Double oder Integer ist erstmal egal)

Meine Frage ist jetzt ob ich per SQL beim kopieren oder später in der Zieldatenbank die Datentypen ändern kann ?

Vielen Dank im Vorraus!


----------



## aquasonic (6. Februar 2004)

Mit folgendem Befehl kannst du die Datentypen ändern:


```
ALTER TABLE DeineTabelle ALTER COLUMN Wert1 TEXT(10);
```


----------



## fhr (6. Februar 2004)

hoi!

Danke für deine schnelle antwort...

ich muss aber jetzt mal ganz blöd fragen....
"Wert1" steht für den Name der  Zeile oder?

um es zu konkretisieren:

Tabellenname: Daten
Zeilenname      : Zeit

ALTER TABLE Daten ALTER COLUMN Zeit Text(10)     ?

und am Ende müsste doch dann double oder so stehen, ich möchte ja Number haben...

thx


----------



## aquasonic (6. Februar 2004)

Ja stehet für Zeile (was im Fachausdruck ein Attribut oder eine Spalte ist).

Also du hast es richtig gemacht...

Der Datentyp ist hier jetzt TEXT(10) (Text mit der max. Länge 10)...

Was du jetzt machen kannst ist anstatt TEXT(10) einfach DOUBLE einzusetzen.


----------



## fhr (6. Februar 2004)

cool das ich das richtig gemacht habe ... 
 

habs mal ausprobiert... 

ich bekomme die Fehlermeldung "Tabelle 'Daten' ist bereits vorhanden" zurück   

komisch!


----------



## aquasonic (6. Februar 2004)

ALTER ist zum verändern und nicht num erstellen, also kann es meiner Meinung nach diese Fehlermeldung gar nicht geben. Bist du ganz sicher? 

Poste nochmal dein genaues SQL-Statement bitte


----------



## fhr (6. Februar 2004)

ja. ich find das auch komisch.    
aber es ist 100% diese SQL Statement. Wenn ich es auskommentiere ist die Meldung weg.

Die MEldung kam ja auch erst als ich es verwendet habe.

"ALTER TABLE Daten ALTER COLUMN Zeit DOUBLE";

das ist der genaue SQL Befehl. (sogar rauskopiert   )


----------



## aquasonic (6. Februar 2004)

Puhh, keine Ahnung...

Am Besten fragst du im C++ Forum, das SQL-Statement ist auf jedenfall richtig!


----------



## fhr (6. Februar 2004)

das mit  dem Statement beruhigt mich! 
 

Ich werd mal ins c++ forum posten...

thx für dein Mühe


----------



## Patrick Kamin (6. Februar 2004)

*-*

Du kannst den Datentypen nur ändern, wenn die Tabelle völlig leer ist. Also mal überprüfen, ob sich da was befindet.


----------



## fhr (6. Februar 2004)

ahhhh  

meine Tabellen sind voll....

aber danke, vielleicht kann ich mir dann  eine andere Lösung einfallen lassen....
;-)


----------



## aquasonic (6. Februar 2004)

*an Kopf hau*

häte mir eigentlich auch in den Sinn kommen können...Mach einfach ein Script, lies alle Daten aus und schreib Sie in eine neue Tabelle...


----------



## fhr (6. Februar 2004)

ich hab jetzt  2. möglichkeiten...

entweder ich lese alle Daten aus (recordset) und wandle sie in ein zahl um und schreib Sie dann in die DB...

und das ist seeeehr Zeitaufwendig.  (sehr ungern!)

2. Möglcihkeit:

Ich hab  Befehl entdeckt. "Convert"  Hab mich aber noch nicht näher mit beschäftigt! Ich lass es euch wissen wenn ich mehr weiß!

wie genau  meinst du das mit dem Script?

Ich muss die Daten ja aus DB1 von Feld1 (Text) in DB2 in Feld2 (Number) bekommen.....


----------



## aquasonic (6. Februar 2004)

SELECT * FROM ..............

INSERT INTO DB2..................

so mein ich das 

15 Minuten vielleicht dann hast du das


----------



## fhr (6. Februar 2004)

ja.. so hatte ich mir das auch gedacht.. . 

aber wenn man SELECT ... FROM ...
INSERT INTO DB2

dann  hol ich mir doch die Daten mit dem Format Text aus der DB1 und versuch sie dann in DB2 in ein Number Feld zu schreiben...

meckert er dann nicht...?

Ich muss ja dann vorher für die Ziel Datenbank ein create table machen und da geb ich ja dann  numner an....


----------



## aquasonic (6. Februar 2004)

Ja du musst dann natürlich die entsprechenden Daten umwandeln in eine Nummer...Sonst funktioniert das schon nicht


----------



## fhr (6. Februar 2004)

SUPER!  

wenn du mir jetzt noch sagen würdest wie ich die Daten in Nummern umwandle klappt das alles so wie ich mir das vorgestellt habe....  

thx  

wenns nicht zu viel Arbeit ist kannst du ja vielleicht grad den ganzen Befehl posten...

tausend dank!


----------



## aquasonic (9. Februar 2004)

Sorry, ich war leider am Wochenende nicht da und konnte deshalb nicht antworten :-(

Da ich leider kein C++ kann kann ich dir dabei nicht helfen. Das ist ein Problem dass du mit der Programmiersprache lösen musst... Es gibt dafür aber sicher eine Funktion, frag mal


----------



## fhr (9. Februar 2004)

axo meinst du das ....

dann muss ich mit recordsets arbeiten..... *die hasse ich*
und das dauert.....

egal... 

danke


----------

