Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Datenstruktur von zwei Tabellen ändern (https://www.delphipraxis.net/65145-datenstruktur-von-zwei-tabellen-aendern.html)

CG2003 12. Mär 2006 23:17

Datenbank: MySQL • Version: 4.1 • Zugriff über: Zeos-Komponenten

Datenstruktur von zwei Tabellen ändern
 
Hallo liebe DP,

ich habe ein Problem und zwar bezüglich dieses Threads: SELECT BETWEEN funktioniert nur in einem geringen Zeitraum?.

Auf Grund der letzten Antworten, habe ich mich entschlossen, meine Datumswerte nun doch als DATE und Warenbestände nur noch als INTEHER zu speichern anstatt als VARCHAR.

Ich habe also zwei Tabellen, "Buchungen" und "Wareineingang".

Felder in der Tabelle "Buchungen":
PartDatum - alter Feldtyp: VARCHAR - neuer Feldtyp: DATE
AlterBestand - alter Feldtyp: VARCHAR - neuer Feldtyp: INTEGER
NeuerBestand - alter Feldtyp: VARCHAR - neuer Feldtyp: INTEGER

Felder in der Tabelle "Wareneingang":
Eingangsdatum - alter Feldtyp: VARCHAR - neuer Feldtyp: DATE
Buchungsdatum - alter Feldtyp: VARCHAR - neuer Feldtyp: DATE

Meine Frage wäre nun, wie ich diese Feldtypenänderung mit den Zeos-Komponenten relaisieren kann, da ich die als VARCHAR gespeicherten Datumswerte ja vorher noch mittels FormatDateTime('yyyy-mm-dd') konvertieren muss.

Wenn ich den Feldtypen jedoch direkt ändere, gehen meine gespeicherten Daten verloren, bzw. werden auf null gesetzt.

Wie ändere ich nun also den Feldtypen, ohne die Tabelle zu zerstören, bzw. meine gespeicherten Daten zu verlieren?

Bin für jede Hilfe sehr dankbar!

marabu 13. Mär 2006 00:23

Re: Datenstruktur von zwei Tabellen ändern
 
Hallo Sebastian,

Zitat:

Wenn ich den Feldtypen jedoch direkt ändere, gehen meine gespeicherten Daten verloren, bzw. werden auf null gesetzt.
wer behauptet denn sowas? Mache eine Sicherung von der Datenbank und probiere das hier:

SQL-Code:
alter table buchungen
  change partdatum partdatum date,
  change alterbestand alterbestand integer,
  change neuerbestand neuerbestand integer
Grüße vom marabu

CG2003 13. Mär 2006 04:44

Re: Datenstruktur von zwei Tabellen ändern
 
Zitat:

Zitat von marabu
wer behauptet denn sowas? Mache eine Sicherung von der Datenbank und probiere das hier:

SQL-Code:
alter table buchungen
  change partdatum partdatum date,
  change alterbestand alterbestand integer,
  change neuerbestand neuerbestand integer
Grüße vom marabu

Nun ja, für die VARCHAR-Werte, die in Integer konvertiert werden, funktioniert es einwandfrei. Vielen Dank schon mal dafür.

Für die VARCHAR-Werte, die in DATE konvertiert werden, jedoch leider nicht. Ich bekomme für jeden Record
einen Datumswert in der Form "0000-00-00" wieder. Gibt es eine Möglichkeit, die alten Datumswerte von
VARCHAR in das DATE-Format zu konvertieren, ohne das es auf null gesetzt wird?

marabu 13. Mär 2006 06:14

Re: Datenstruktur von zwei Tabellen ändern
 
Guten Morgen.

Zitat:

Nun ja
Ist das Skepsis oder Depression? Kopf hoch - noch ist Polen nicht verloren.

MySQL erwartet Datumsangaben im Format '2006-03-13' - wie hast du sie gespeichert? Eventuell musst du den String vor dem Wechsel des Datentyps neu arrangieren, was mit einem UPDATE Statement möglich sein sollte - ungetestet:

SQL-Code:
/* 13.03.2006 --> 2006-03-13 */
update buchungen set
  partdatum = concat( right(partdatum, 2), "-", mid(partdatum, 4, 2), "-", left(partdatum, 4) )
marabu

mkinzler 13. Mär 2006 07:07

Re: Datenstruktur von zwei Tabellen ändern
 
Eine weitere Möglichkeit wäre es im ersten Schritt ein weiteres Feld des neuen Type einzufügen, dieses mit den Werten des alten Felds zu füllen.Bei Erfolg kann dann das alte Feld gelöscht werden.

CG2003 13. Mär 2006 14:19

Re: Datenstruktur von zwei Tabellen ändern
 
Zitat:

Zitat von mkinzler
Eine weitere Möglichkeit wäre es im ersten Schritt ein weiteres Feld des neuen Type einzufügen, dieses mit den Werten des alten Felds zu füllen.Bei Erfolg kann dann das alte Feld gelöscht werden.

Genauso habe ich es nun gemacht. Ich habe erst entsprechend Felder mit Ihren neuen Datentypen hinzugefügt, dann die alten Feldinhalte konvertiert und in die neuen Felder eingefügt, und dann die alten Felder gelöscht.

Manchmal ist die Lösung so nah...

Vielen Dank, Euch allen.


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