AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Änderung in einer Tabelle von 2 auf 4 Felder
Thema durchsuchen
Ansicht
Themen-Optionen

Änderung in einer Tabelle von 2 auf 4 Felder

Ein Thema von RWarnecke · begonnen am 8. Sep 2012 · letzter Beitrag vom 8. Sep 2012
Antwort Antwort
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#1

Änderung in einer Tabelle von 2 auf 4 Felder

  Alt 8. Sep 2012, 09:55
Datenbank: MySQL • Version: 5.5 • Zugriff über: MyDAC
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.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#2

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

  Alt 8. Sep 2012, 10:20
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
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#3

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

  Alt 8. Sep 2012, 11:18
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#4

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

  Alt 8. Sep 2012, 11:29
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.

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.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

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

  Alt 8. Sep 2012, 15:33
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.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#6

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

  Alt 8. Sep 2012, 16:04
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.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#7

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

  Alt 8. Sep 2012, 16:18
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?
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#8

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

  Alt 8. Sep 2012, 16:25
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.
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.
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.
Rolf Warnecke
App4Mission

Geändert von RWarnecke ( 8. Sep 2012 um 16:29 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#9

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

  Alt 8. Sep 2012, 17:03
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)
  Mit Zitat antworten Zitat
Antwort Antwort


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 18:55 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