AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi oldValue ändert sich nicht
Thema durchsuchen
Ansicht
Themen-Optionen

oldValue ändert sich nicht

Ein Thema von HolgerCW · begonnen am 10. Dez 2009 · letzter Beitrag vom 11. Dez 2009
Antwort Antwort
Seite 1 von 2  1 2      
HolgerCW

Registriert seit: 28. Nov 2006
Ort: Marl
1.207 Beiträge
 
Delphi XE7 Enterprise
 
#1

oldValue ändert sich nicht

  Alt 10. Dez 2009, 16:40
Datenbank: ORACLE • Version: 10 • Zugriff über: BDE
Hallo zusammen,

ich editiere eine Tabelle direkt in einem TDBGrid welches mit einer TTable verbunden ist.

Folgendes tue ich:

1. TTable.Open; -> Im Programm
2. Zellenwert in Spalte A ist 'Test'. -> Im Programm
3. Nun ändere ich den Zellenwert auf 'Test2'. -> Als Anwender

Wenn ich in dem Ereignis BeforePost das OldValue der Spalte A abfrage bleibt der Wert immer 'Test'.

Wie bekomme ich es hin, das der OldValue-Wert nach dem ändern des Zellenwertes automatisch diesen annimmt ?

Gruss

Holger
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#2

Re: oldValue ändert sich nicht

  Alt 10. Dez 2009, 16:44
BeforePost ist imho auch nicht "nach dem Ändern" - Evneutell OnAfterPost (oder so ähnlich)?
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#3

Re: oldValue ändert sich nicht

  Alt 10. Dez 2009, 16:45
Ich kenn die TTable nicht, aber hat BeforePost vielleicht einen Boolean-Wert, den man entsprechend ändern muss, damit das Post ausgeführt wird? Manchmal muss auch ein bestimmter Wert (true bspw.) zurückgegeben werden.

Ist jetzt einfach mal so ins Blaue geschossen...
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
HolgerCW

Registriert seit: 28. Nov 2006
Ort: Marl
1.207 Beiträge
 
Delphi XE7 Enterprise
 
#4

Re: oldValue ändert sich nicht

  Alt 10. Dez 2009, 16:53
Habe vergessen zu sagen:

Wenn ich nun den Wert 'Test2' wieder in 'Test' ändere ist OldValue immer noch 'Test'. Somit kann ich nicht OldValue <> NewValue abfragen.

Es muss irgendeine Möglichkeit geben das der Wert nach dem ändern als oldValue übernommen wird.

Gruss

Holger
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#5

Re: oldValue ändert sich nicht

  Alt 11. Dez 2009, 08:12
Hallo,

im BeforePost ist oldValue immer das, was vor dem Speichern in der Tabelle stand. Liegt bei dem Namen auch irgendwie nahe.
Wenn Du nun im BeforePost einen Wert änderst, ist er erst nach dem Post in der Datenbank. Du kannst die Änderungen daher erst nach dem Verlassen von BeforePost kontrollieren, also z. B. in AfterPost.

Willst Du die Änderungen aber bereits im BeforePost in die Datenbank schreiben, musst Du im BeforePost ein Post aufrufen. Dies könnte die unangenehme Nebenwirkung haben, dass dann zuerst wieder BeforePost aufgerufen wird, dass dann das Post aufruft, dass dann das BeforePost aufruft, dass dann...

Ausgehend von Deiner bisherigen Beschreibung, geht das, was Du da vorhast, nicht. Beschreibe Deine Wünsche bitte mal etwas genauer, eventuell läßt sich ja dann eine passende Lösung finden.
  Mit Zitat antworten Zitat
HolgerCW

Registriert seit: 28. Nov 2006
Ort: Marl
1.207 Beiträge
 
Delphi XE7 Enterprise
 
#6

Re: oldValue ändert sich nicht

  Alt 11. Dez 2009, 08:36
Danke schon mal für den Hinweis.

Ich möchte aber nicht IM BeforePost einen Wert ändern, sondern durch das Editieren des TDBGrid. Dadurch wird das BeforePost aufgerufen. In dem BeforePost möchte ich nur überprüfen ob sich ein Wert geändert hat.

Nur kann ich das nicht, da der OldValue-Wert immer gleich bleibt.

Ich muss wohl irgendwie im BeforePost oder AfterPost ncoh was machen, das der neue Wert auch endgültig übernommen wird.

Mache ich nämlich während des Editierens einen Refresh auf die TTable erscheinen wieder die Ursprungswerte (OldValues)

Gruss

Holger
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#7

Re: oldValue ändert sich nicht

  Alt 11. Dez 2009, 09:03
Hallo,

da liegt glaub' ich ein Verständnisproblem vor:

oldValue bleibt bis zum Abschluss des Speichervorganges der alte Wert, also der, der vor dem Ändern im TDBGrid, in der Datenbank stand.
BeforePost wird aufgerufen, wenn die Speichervorgang angefordert wurde. Das kann z. B. im TDBGrid beim Wechseln der Zeile passieren oder, wenn man den DBNavigator benutzt, dort der Button für's Speichern betätigt wird...
Änderungen kannst Du nur dadurch erfahren, dass Du oldValue und newValue vergleichst. newValue müsste der im TDBGrid eingegebene Wert sein.

In BeforPost muss Du nur dann was machen, wenn Du die Eingabe z. B. kontrollieren willst oder Berechnungen durchführst, die in andere Spalten oder Tabellen übernommen werden, oder bei fehlerhafter Eingabe den Speichervorgang abbrechen willst...

Können Werte so, wie im TDBGrid eingegeben, gespeichert werden, sind BeforePost und AfterPost nicht erforderlich.
  Mit Zitat antworten Zitat
HolgerCW

Registriert seit: 28. Nov 2006
Ort: Marl
1.207 Beiträge
 
Delphi XE7 Enterprise
 
#8

Re: oldValue ändert sich nicht

  Alt 11. Dez 2009, 09:17
... und hier liegt der Fehler:

Zitat:
oldValue bleibt bis zum Abschluss des Speichervorganges der alte Wert
Wie löse ich den Speichervorgang aus ?

Zitat:
BeforePost wird aufgerufen, wenn die Speichervorgang angefordert wurde. Das kann z. B. im TDBGrid beim Wechseln der Zeile passieren.
Genau deshalb vergleiche ich dort OldValue mit NewValue, nach dem Wechseln der Zeile.

Es wird halt beim wechseln der Zeile der Wert nciht gespeichert, somit bleibt OldValue immer gleich. Wie löse ich somit beim Wechseln der Zeile auch den Speichervorgang aus ?

Wird nicht eigentlich durch das Wechseln der Zeile ein Post durchgeführt ? Nur finde ich halt komisch, das wenn ich danach die TTable schliesse und wieder öffne, die ursprünglichen Werte wieder erscheinen.

Kann das an dem CachedUpdates-Modus der TTable liegen ?

Gruss

Holger
  Mit Zitat antworten Zitat
Benutzerbild von mikhal
mikhal

Registriert seit: 11. Sep 2003
Ort: Linz am Rhein
796 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: oldValue ändert sich nicht

  Alt 11. Dez 2009, 09:43
Ich weiß jetzt nicht, wie das Zusammenspiel BDE->Oracle funktioniert, aber normalerweise musst du bei der Oracle-Datenbank ein Commit übergeben, damit die Werte auch tatsächlich in die Tabelle geschrieben werden.

Schau mal in den Eigenschaften der Connection und der TTable/TQuery, ob es dort eine Eigenschaft AutoCommit gibt und ob die gesetzt ist. Darüberhinaus könnte auch die Standard-Reaktion beim Scrollen im Grid auf RollBack gesetzt sein, dann wird grundsätzlich keine Änderung gespeichert. Ggf. musst du vor dem Scrollen testen, ob der Status des DataSets dsEdit oder dsInsert ist und dann vor dem Scrollen ein Post an die Datenbank senden, damit die Änderungen in der Tabelle auch eingetragen werden (Post sollte bei der BDE ein Commit an die Datenbank senden).

Grüße
Mikhal
[edit]...dicke Finger... [/edit]
Michael Kraemer
Computer erleichtern die Arbeit...
...und die Erde ist eine Scheibe!
  Mit Zitat antworten Zitat
HolgerCW

Registriert seit: 28. Nov 2006
Ort: Marl
1.207 Beiträge
 
Delphi XE7 Enterprise
 
#10

Re: oldValue ändert sich nicht

  Alt 11. Dez 2009, 09:57
Das war der Hinweis den ich brauchte.

Ich mache nun im Ereignis AfterPost auf die Tabelle folgendes und es klappt:

Table1.CommitUpdates; Ich hatte vorher mit Table1.ApplyUpdates es ausprobiert. Das klappte aber nicht.

Vielen dank.

Gruss

Holger
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 17:34 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