AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Werte in einem Datenbankfeld prüfen?
Thema durchsuchen
Ansicht
Themen-Optionen

Werte in einem Datenbankfeld prüfen?

Ein Thema von romber · begonnen am 5. Okt 2010 · letzter Beitrag vom 18. Okt 2010
Antwort Antwort
Seite 2 von 2     12   
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.164 Beiträge
 
Delphi 10 Seattle Professional
 
#11

AW: Werte in einem Datenbankfeld prüfen?

  Alt 5. Okt 2010, 13:41
Nein, erstelle eine Zusätzliche Tabelle mit einer Parent Spalte und der Wert Spalte
Parent ist dan der Datensatz, zu dem der Wert gehört? Verstehe ich das richtig?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#12

AW: Werte in einem Datenbankfeld prüfen?

  Alt 5. Okt 2010, 13:42
Ja, Parent ist ein Fremdschlüssel auf den Primärschlüssel der Mastertabelle.

[edit] Hab mal ein Bild angehangen [/edit]
Miniaturansicht angehängter Grafiken
masterdetail.png  
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen

Geändert von DeddyH ( 5. Okt 2010 um 15:20 Uhr)
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.164 Beiträge
 
Delphi 10 Seattle Professional
 
#13

AW: Werte in einem Datenbankfeld prüfen?

  Alt 5. Okt 2010, 17:23
Vielen Dank für dieses Bild!
Noch eine Frage dazu: ab und zu werden die Datensätze aktuallisiert. Die Zahlenwerte werden in der Regel auch geändert, einige neue Werte kommen dazu und einige fallen weg. Bisher musste ich einfach den neuen Inhalt mit kommagertrennten Zahlenwerten eintragen und das war's auch. Wie mache ich das am besten, wenn ich die Werte in einer separaten Tabelle ablege? Soll ich beim Aktuallisieren alle zugehörige Werte aus Detailstabelle entfernen und dann die neue eintragen, oder gibt es eine elegantere Methode?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#14

AW: Werte in einem Datenbankfeld prüfen?

  Alt 6. Okt 2010, 09:56
Bei den zu löschenden ist es ja klar. Für neue oder zu aktualisierende Datensätze bietet sich die UPDATE OR INSERT INTO-Syntax an (das ist allerdings eine Firebird-Spezialität, ob MSSQL etwas ähnliches auch bietet, entzieht sich meiner Kenntnis). Dazu ist es aber wahrscheinlich etwas einfacher, der Detailtabelle einen künstlichen Primärschlüssel zu spendieren und die Kombination der anderen beiden Felder als UNIQUE zu definieren.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.164 Beiträge
 
Delphi 10 Seattle Professional
 
#15

AW: Werte in einem Datenbankfeld prüfen?

  Alt 17. Okt 2010, 22:46
Bei den zu löschenden ist es ja klar.
Verstehe ich das richtig, ich muss zuerst prüfen, welche Zahlenwerte der zu aktualisierende Datensätz nicht mehr hat, diese in der Details-Tabelle ermitteln und löschen? Wird es nicht einfacher und auch schneller, alle Werte des Datensasatzes aus der Tabelle zu löschen und die neue zu inserieren?
  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
 
#16

AW: Werte in einem Datenbankfeld prüfen?

  Alt 17. Okt 2010, 23:11
Bei den zu löschenden ist es ja klar.
Verstehe ich das richtig, ich muss zuerst prüfen, welche Zahlenwerte der zu aktualisierende Datensätz nicht mehr hat, diese in der Details-Tabelle ermitteln und löschen? Wird es nicht einfacher und auch schneller, alle Werte des Datensasatzes aus der Tabelle zu löschen und die neue zu inserieren?
Jein in diesem Fall ist es aber wahrscheinlich egal
Wichtig hierbei ist aber auf jeden Fall das Übertragen innerhalb einer Transaktion durchzuführen.
Delphi-Quellcode:
ADOConnection1.BeginTrans; // Transaktion starten
{... Daten zur Datenbank übertragen ...}
ADOConnection1.Commit; // Transaktion abschließen
Alternativ zum Löschen und wieder komplett schreiben kann man auch mit einer temporären Tabelle arbeiten.
In diese trägt man alle Daten ein und macht dann den Abgleich mit SQL.
Dieses ist wesentlich ressourcenschonender, da hierbei nur die Veränderungen in der Tabelle gespeichert/gelöscht werden.

Die Transaktion bleibt aber auch hierbei Pflicht.
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
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.164 Beiträge
 
Delphi 10 Seattle Professional
 
#17

AW: Werte in einem Datenbankfeld prüfen?

  Alt 18. Okt 2010, 08:23
Alternativ zum Löschen und wieder komplett schreiben kann man auch mit einer temporären Tabelle arbeiten.
In diese trägt man alle Daten ein und macht dann den Abgleich mit SQL.
Dieses ist wesentlich ressourcenschonender, da hierbei nur die Veränderungen in der Tabelle gespeichert/gelöscht werden.
Wie macht man das am besten? Tempräre Tabelle erstellen kann ich. Wie funktoniert der Abgleicht mittels SQL?

Geändert von romber (18. Okt 2010 um 11:38 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 10:50 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