AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Änderungen im DBGrid nicht in die Datenbank übernehmen
Thema durchsuchen
Ansicht
Themen-Optionen

Änderungen im DBGrid nicht in die Datenbank übernehmen

Ein Thema von Maa83 · begonnen am 4. Apr 2003 · letzter Beitrag vom 4. Apr 2003
Antwort Antwort
Maa83

Registriert seit: 7. Nov 2002
220 Beiträge
 
Delphi 10.3 Rio
 
#1

Änderungen im DBGrid nicht in die Datenbank übernehmen

  Alt 4. Apr 2003, 08:01
Guten Tach

wenn ich in einem DBGrid, das über eine DataSource und eine AdoQuery gefüllt wird, etwas ändere dann soll diese Änderung nicht in die Datenbank übernommen werden...
Quasi nur als Anzeige...
(Datenbank wird mit einer eigenen Methode gefüllt in der die Daten noch bearbeitet werden)

Hat jemand nen Plan ?
Martin
  Mit Zitat antworten Zitat
woki

Registriert seit: 29. Mär 2003
563 Beiträge
 
Delphi 2006 Architect
 
#2
  Alt 4. Apr 2003, 09:58
Hallo Maa83,

die DBGrids sind natürlich dafür da, eine direkte Anbindung der Daten an die Datenbank vorzunehmen, genauer an die datenhaltenden Komponenten (Tables, Queries), die dann wiederum die Verbindung zur Datenbank übernehmen, das kann man auch nicht einfach abschalten. Die naheliegendste und allgemeinste Lösung besteht natürlich darin, einfach keine datensensitiven Controls zu verwenden, sondern stattdessen einfach TEdit, TStringgrid usw zu verwenden, und die Daten aus dem Dataset (TAdoQuery) hier reinzukopieren.

Will man auf jeden Fall bei den datensensitiven Steuerelementen bleiben, so kann man die Daten selbst und die Anzeige der Daten mithilfe der Ereignisse der Feldkomponenten (Doppelclick auf die TADoQuery - komponente) beeinflussen.

Weiterhin bietet sich die Möglichkeit an, Daten über InMemoryDatasets zu behandeln, also von der AdoQuery dorthin kopieren und zurück, oder über entsprechende Providerkomponenten ein Clientdataset zu befüllen, das dann auch die Möglichkeit bietet, zu einem selbst gewählten Zeitpunkt das zurückschreiben der Daten und ein eventuelles manipulieren der Daten vorzunehmen.

Gruß
Wolfgang
  Mit Zitat antworten Zitat
Maa83

Registriert seit: 7. Nov 2002
220 Beiträge
 
Delphi 10.3 Rio
 
#3
  Alt 4. Apr 2003, 10:16
ok danke erstmal
ich habs jetzt soweit das ich das posten abfange

aber wie bekomme ich den Wert den ich in das dbGrid eingebe (während der Eingabe vor dem Post)

Wenn man die Zelle abfragt bekommt man den alten Wert und nicht den gerade geschriebenen
Martin
  Mit Zitat antworten Zitat
Gast
(Gast)

n/a Beiträge
 
#4
  Alt 4. Apr 2003, 10:37
Hallo Maa83 8)

Dies ist ganz einfach... (Leider liegst Woki etwas daneben )

Du bedienst das Ganze in dem BeforePost – Ereignis Deiner DataSet (z.B. TQuery, TTable etc...).

Angenommen Deine „Extra“ Prozedur für die Aktualisierung (z.B. mit einem INSERT INTO Konstrukt) der Tabelle heißt:

PROCEDURE MeinBoforePost;


Dann in dem Ereignis BoforePost Deiner DataSet (also dieser die per DataSource mit dem Grid verbunden ist) soll z.B. stehen:

BEGIN
MeinBeforePost;
Abort;
END;

Und das war’s...

Gruß

Paul Jr.
  Mit Zitat antworten Zitat
Maa83

Registriert seit: 7. Nov 2002
220 Beiträge
 
Delphi 10.3 Rio
 
#5
  Alt 4. Apr 2003, 10:47
ich reagiere ja auch im BoforePost Ereignis
aber wie bekomme ich den Wert den ich gerade eingebe?
Martin
  Mit Zitat antworten Zitat
Gast
(Gast)

n/a Beiträge
 
#6
  Alt 4. Apr 2003, 10:47
Ach so... jetzt sehe ich die zweite Frage von Dir...

(...)

aber wie bekomme ich den Wert den ich in das dbGrid eingebe (während der Eingabe vor dem Post)

Wenn man die Zelle abfragt bekommt man den alten Wert und nicht den gerade geschriebenen

(...)

benutze hier z.B. Query- Live oder vielleicht den OnChange-Ereignis Deines Feldes (Tfield)..dieser Ereignis siehst Du wenn du in dem Felder-Editor deiner TDataSet (also z.B. mit einem Doppelklick auf Deine TdataSet- Komponente und dann das Feld auswählen) das Feld auswählst...

Gruß

Paul Jr.
  Mit Zitat antworten Zitat
Gast
(Gast)

n/a Beiträge
 
#7
  Alt 4. Apr 2003, 11:10
Sind meine Vorschläge nicht OK... dann musst Du die Hinweise von Woki beachten..., da so gesehen liegt ER doch NICHT daneben ... sorry Woki...

...Es seitdem du möchtest mit Transaktionen arbeiten..

Gruß

Paul Jr.
  Mit Zitat antworten Zitat
woki

Registriert seit: 29. Mär 2003
563 Beiträge
 
Delphi 2006 Architect
 
#8
  Alt 4. Apr 2003, 11:31
Hallo,

ich denke nicht, daß ich danebenliege.
Natürlich kann man in Beforepost Daten verändern, bevor sie in die Datenbank geschrieben werden, aber das gilt immer nur für einen Datensatz einer Datasetkomponente, und so war die Frage nicht formuliert.

Weiterhin, das manipulieren des Records in Beforepost mit anschließendem abort hinterläßt das Dataset im Editmode, und verhindert das Editieren irgendeines anderen Datensatzes.

Abort kann also die Lösung nicht sein, wen nman jemals weiterarbeiten will.

Versuche jetzt hier wieder rauszukommen. z.B. mit

Dataset.cancel;
Dataset.refresh (um die hintenrum geänderten Daten zu bekommen)

oder

Dataset.cancel;
Dataset.close (um die hintenrum geänderten Daten zu bekommen)
Dataset.open

Viel Spaß.

Also für diesen Anwendungsfall, wenn es reicht Daten in Beforepost zu manipulieren, und dann zu posten fein, dazu ist es da, um ein Post für EINEN Datensatz zu verzögern auch, aber darüber hninaus...


Für die verschiedenen Werte, Wert in Datenbank, Neuer Wert etc
gibt es die Fieldeigenschaften

TField.Value
TField.NewValue
TField.OldValue
Beschreibung in Delphi Hilfe recht ausfühlich

Gruß
Wolfgang

P.S.
Für die Adokomponenten gilt:

Besser auf TAdoQuery und TAdoTable verzichten, und TAdodataset mit den entsprechenden Einstellungen verwenden, und noch besser gleich auf TBetterAdodataset ausweichen, das spart viel Ärger.
  Mit Zitat antworten Zitat
Gast
(Gast)

n/a Beiträge
 
#9
  Alt 4. Apr 2003, 11:47
Klar Woki, ... hast Du Recht... habe das Cancel vergessen... so oder so... ist dieser vorgeschlagene Konstrukt von Maa83 sehr ungewöhnlich... und so gesehen... auch nicht empfehlenswert...

Also bleibt Cool Woki 8) ... weiter so...


Gruß

Paul Jr.
  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 23:48 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