AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Update mit Berechnung
Thema durchsuchen
Ansicht
Themen-Optionen

Update mit Berechnung

Ein Thema von hsbc · begonnen am 21. Mär 2006 · letzter Beitrag vom 21. Mär 2006
Antwort Antwort
hsbc

Registriert seit: 28. Jan 2004
Ort: Krems/Donau
404 Beiträge
 
Delphi 7 Professional
 
#1

Update mit Berechnung

  Alt 21. Mär 2006, 15:22
Datenbank: Firebird • Version: 1.5.3 • Zugriff über: ZEOS
Hallo allerseits,

Ich muss in meiner Datenbank den Inhalt des Feldes 'SALDO' von allen Sätzen auf einen neuen Wert ändern, aber nur dann, wenn der bestehende Wert z.B. '100,55' beträgt.

Gibt es hier die Möglichkeit, dass man diese Aufgabe der Datenbank selbst machen lässt oder muss man jeden Datensatz auslesen, prüfen, gegebenenfalls ändern und wieder zurückspeichern?

Irgendwie dachte ich an einen Befehl wie:

UPDATE <Datenbank> SET SALDO = <neuer Wert> WHERE SALDO = <alter Wert>

Gibt es so etwas ähnliches oder muss man hier ev. Stored Procedures verwenden. Da das ganze nur ein einziges Mal gebraucht wird, wäre es mir natürlich lieber, wenn dies mit einer einfachen SQL-Anweisung möglich wäre.

mfg
Herbert
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#2

Re: Update mit Berechnung

  Alt 21. Mär 2006, 15:27
Zitat von hsbc:
Ich muss in meiner Datenbank den Inhalt des Feldes 'SALDO' von allen
UPDATE <Datenbank> SET SALDO = <neuer Wert> WHERE SALDO = <alter Wert>
Du bist schon ziemlich nah dran. Nur stören mich die beiden Bezugnahmen auf die Datenbank. Ersetz dies einfach mal durch den Begriff "Tabelle". Auf SQL ausgedrückt:
UPDATE <Tabelle> SET Saldo=<neuer Wert> WHERE Saldo=<alter Wert>
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
hsbc

Registriert seit: 28. Jan 2004
Ort: Krems/Donau
404 Beiträge
 
Delphi 7 Professional
 
#3

Re: Update mit Berechnung

  Alt 21. Mär 2006, 15:57
Hallo chaosben,

danke vorerst mal für deine rasche Antwort.

Ich habe das jetzt geändert. Meine Tabelle heisst KUNDEN. Die SQL-Anweisung lautet jetzt:

UPDATE KUNDEN SET SALDO = <neuer Wert> WHERE SALDO = <alter Wert>

im Klartext:

'UPDATE KUNDEN SET SALDO = ' + QuotedStr('123') + ' WHERE SALDO = ' + QuotedStr('222');

Wenn ich anschliessend mit ZQuery.ExecSQL öffne, kommt zwar keine Fehlermeldung, aber geändert wurde auch nichts.
Wenn ich mit ZQuery.Open öffne, kommt die Fehlermeldung: Can not retrieve ResultSet data.

Ich gehe davon aus, dass ich mit ZQuery.ExecSQL öffnen muss, nur verstehe ich nicht, dass keine Änderung durchgeführt wurde.

Kann mir jemand vielleicht noch Tipps geben, was ich noch versuchen könnte, bzw. was ich hier falsch mache.

mfg
Herbert
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Update mit Berechnung

  Alt 21. Mär 2006, 16:00
Wie sind die Transaktionseinstellungen? autoCommit ? Sonst mußt du die Transaktion mit .Commit abschließen.
BTW wenn Saldo ein Float ist kannst du dir das Quoten sparen. Im Allgemeinen würde ich auf parametrisierte Abfragen umstellen.
Markus Kinzler
  Mit Zitat antworten Zitat
hsbc

Registriert seit: 28. Jan 2004
Ort: Krems/Donau
404 Beiträge
 
Delphi 7 Professional
 
#5

Re: Update mit Berechnung

  Alt 21. Mär 2006, 16:38
Hallo,

Transaction ist auf autocommit.

Ich glaube, ich habe die Ursache gefunden:

Das Feld "SALDO" ist ein Textfeld, wobei die Anzeige rechtsbündig eingestellt ist. Ich vermute, dass in der Tabelle daher vor dem eigentlichen Wert ein oder mehrere Blanks vorhanden sind und daher mein Vergleich des gesamten Feldes dann nicht mehr stimmen kann. Gibt es in diesem Zusammenhang in SQL eine Anweisung, wo man die Blanks abschneiden kann, wie z.B. in Delphi TRIM.

In etwa so:

UPDATE <TABELLE> SET SALDO = <neuer Wert> WHERE TRIM(SALDO) = <alter Wert>

mfg
Herbert
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Update mit Berechnung

  Alt 21. Mär 2006, 17:08
genau so gehts.

BTW. Ich wüde das Feld Salso aber auf NUMERIC umstellen.
Markus Kinzler
  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 19:13 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