Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Änderung in einer Tabelle von 2 auf 4 Felder (https://www.delphipraxis.net/170267-aenderung-einer-tabelle-von-2-auf-4-felder.html)

RWarnecke 8. Sep 2012 08:55

Datenbank: MySQL • Version: 5.5 • Zugriff über: MyDAC

Änderung in einer Tabelle von 2 auf 4 Felder
 
Hallo zusammen,

ich habe folgendes Problem. Ich habe eine Tabelle die zwei Felder enthält. Im ersten Feld wird ein Boolean-Wert abgespeichert. Im zweiten Feld ein Integer-Wert zwischen 1 und 4. Der Integer-Wert ist der Indexwert einer Combobox. Jetzt ist die Anforderung das erste Feld zu behalten und die vier Werte, die aus der Combobox auszuwählen waren in Booleanfelder zu speichern.

Jetzt ist meine Frage, wie würdet Ihr die alten Werte auf die vier neuen Booleanfelder verteilen ? Es werden DB-Komponenten verwendet.

Meine Überlegungen sind folgende :
  • Eine Stored Procedure schreiben, welche alle vorhandenen Datensätze durchgeht und dann entsprechend die vier neuen Felder füllt.
  • Die Werte für die vier neuen Felder manuell setzen, wenn ein Datensatz mit einem entsprechenden Integer-Wert aufgerufen wird.

Bei der zweiten Überlegung, habe ich noch nicht so den richtigen Plan, wie ich in einer DBRadioGroup entsprechend den Wert manuell setze.

Ich hoffe Ihr könnt mir weiterhelfen, wenn euch noch Infos fehlen, dann bitte einfach nachfragen.

Bernhard Geyer 8. Sep 2012 09:20

AW: Änderung in einer Tabelle von 2 auf 4 Felder
 
1, Für die DB-Änderung schickst du ein alter-table-statement zur DB

2, Um die Datan in die neuen Felder zu bekommen schickst du ein Update-Statement los:

update <meinetabelle> set neuesfeld1 = true where altesfeld = 0;
update <meinetabelle> set neuesfeld2 = true where altesfeld = 1;
...

3, Lösche Altes Feld wenn du sicher bist es nicht mehr zu gebrauchen. Kannst hierzu ein ein alter table-Statement verwenden

p80286 8. Sep 2012 10:18

AW: Änderung in einer Tabelle von 2 auf 4 Felder
 
Warum nutzt Du DB-Komponenten?
Wickel den Datenverkehr über Queries ab, dann hast Du alles im Griff, auch die Umsetzung von boolschen Feldern auf Indices.

Gruß
K-H

RWarnecke 8. Sep 2012 10:29

AW: Änderung in einer Tabelle von 2 auf 4 Felder
 
Zitat:

Zitat von p80286 (Beitrag 1182078)
Warum nutzt Du DB-Komponenten?
Wickel den Datenverkehr über Queries ab, dann hast Du alles im Griff, auch die Umsetzung von boolschen Feldern auf Indices.

Gruß
K-H

Im normalfall mache ich das auch in meinen Programmen. Ich habe den Quelltext übernommen, das ganze Programm besteht nur aus DB-Komponenten. Daraus eine einfache Anwendung mit normalen Komponenten zu machen, kommt im Moment für mich einem ReWrite des Programms gleich.

Zitat:

Zitat von Bernhard Geyer (Beitrag 1182076)
1, Für die DB-Änderung schickst du ein alter-table-statement zur DB

2, Um die Datan in die neuen Felder zu bekommen schickst du ein Update-Statement los:

update <meinetabelle> set neuesfeld1 = true where altesfeld = 0;
update <meinetabelle> set neuesfeld2 = true where altesfeld = 1;
...

3, Lösche Altes Feld wenn du sicher bist es nicht mehr zu gebrauchen. Kannst hierzu ein ein alter table-Statement verwenden

Die Idee von Dir Bernhard ist super. Habe ich schon ausprobiert und funktioniert einwandfrei. Danke Dir.

Sir Rufo 8. Sep 2012 14:33

AW: Änderung in einer Tabelle von 2 auf 4 Felder
 
Irgendwie verstehe ich die Anforderung und deine Umsetzung nicht.

Da ist von ComboBox und RadioGroup die Rede und du möchtest statt einem Wert (integer) jetzt mehrere Werte haben (Boolean).

Allerdings können beide nur einen Wert annehmen. Von daher ist es kontraproduktiv in der DB mehrere Felder dafür zu verwenden.

Ausnahme: Du möchtest jetzt CheckBoxen einsetzen, dann würde ich das auch noch verstehen.

Wenn du (aus welchen Gründen auch immer) jetzt aber trotzdem eine Boolean-Sicht des Wertes wünscht, dann würde ich eine View empfehlen statt die Tabelle zu ändern.

RWarnecke 8. Sep 2012 15:04

AW: Änderung in einer Tabelle von 2 auf 4 Felder
 
Zitat:

Zitat von Sir Rufo (Beitrag 1182098)
Da ist von ComboBox und RadioGroup die Rede und du möchtest statt einem Wert (integer) jetzt mehrere Werte haben (Boolean).

Die Combobox verschwindet und für die vier Einträge der Combobox wird jetzt jeweils eine RadioGroup mit ja und nein benutzt.

sx2008 8. Sep 2012 15:18

AW: Änderung in einer Tabelle von 2 auf 4 Felder
 
Und was passiert, wenn zur RadioGroup ein weiteres Item dazukommen soll?
Brauchst du dann wieder in der Tabelle ein weiteres Feld?
Hat deine Tabelle genau einen Datensatz?

RWarnecke 8. Sep 2012 15:25

AW: Änderung in einer Tabelle von 2 auf 4 Felder
 
Zitat:

Zitat von sx2008 (Beitrag 1182105)
Und was passiert, wenn zur RadioGroup ein weiteres Item dazukommen soll?

In dem Bereich wo die RadioGroups eingesetzt werden, gibt es nur die Antwort ja oder nein.
Zitat:

Zitat von sx2008 (Beitrag 1182105)
Brauchst du dann wieder in der Tabelle ein weiteres Feld?

Wenn ein neues Item hinzukommt, dann brauche ich hier natürlich ein weiteres Feld in der Tabelle. Bei neuen Feldern ist die Antwort immer Nein.
Zitat:

Zitat von sx2008 (Beitrag 1182105)
Hat deine Tabelle genau einen Datensatz?

Nein, die Tabelle hat mehrere Datensätze.

Edit:
Der Kunde braucht diese Boolean-Werte für Auswertungen und um auch eine mehrfach Auswahl der vier Punkte zuzulassen.

sx2008 8. Sep 2012 16:03

AW: Änderung in einer Tabelle von 2 auf 4 Felder
 
Ok, hier liegt dann aber eine sehr starke Bindung der Tabellenstruktur an die Benutzeroberfläche vor.
Wenn das Programm nur bei einem Kunden läuft ist das kein Problem.
Bei vielen Kunden gibt es Drausen aber verschiedene Versionen der Software, wobei die Datenbankstruktur immer zur Anwendung passen muss.
Manchmal macht ein Programmupdate nicht das was es soll und der Kunde muss wieder die Vorgängerversion benützen.
Das Problem ist nur, dass die Struktur der DB geändert wurde und es keinen Weg zurück gibt.

Lange Rede, kurzer Sinn - die Datenbankstruktur sollte so gebaut werden, dass sie sich nicht ändern muss, nur weil die Anwendung neue Optionen zur Konfiguration bekommen hat.
Dazu kann man z.B. eine Key/Value Tabelle verwenden.
Code:
Key                                | Value
==============================================================
UI.Reporting.DefaultPrinter        | Epson 4200
UI.Reporting.AllowCangePrinter     | True
UI.Reporting.DefaultCopies         | 1
Logger.File                        | C:\Users\xxx\Logs\info.log
Logger.LogLevel                    | 2
Die Keys werden durch die Punkt-Notation strukturiert, damit man leicht erkennen kann was zusammengehört.

Da mehrere Rechner mit einer Datenbank verbunden sein können, sollte man die Tabelle noch um den Rechner- oder Terminalname aufbohren:
Code:
Instance varchar(50)
Key varchar(50)
Value varchar(250)


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