![]() |
Datenbank: Firebird • Version: 1.5 • Zugriff über: InterBase
Aktuallisieren der ans cxdbGrid gekoppelten Query
Guten Morgen zusammen,
ich nochmals zum Thema Query: Folgendes, ich habe eine Eingabemaske in der cxdbEdit - und cxdbextlookupComboboxen zum einsatz kommen. Die Eingabedaten aus den cxdbEdit - Feldern sowie die Daten aus den cxdbextlookupComboboxen Schreibe ich in die im hintergrund angebundene TTable (z.B. ibtableZeiterfassung). Das cxdbGrid erzeugt die dort dargestellten Datensätze mithilfe einer im hintergrund angebundenen IBQuery, die ich mit den passenden SQL-Befehlen gefüttert habe damit die Ansicht im Grid meinen Vorstellungen entspricht. So, wenn ich jetzt einen neuen Datensatz eingebe und diesen Speichere wird er in die TTable geschrieben, aber ich sehe in dann immer noch nicht im Grid, erst wenn ich die Anwendung komplett schliesse und dann wieder öffne wird dieser dargestellt. Möchte aber das er direkt nach der Speicherung angezeigt wird (ist ja schon mist wenn ich nach jedem Datensatz die Anwendung schliessen und öffnen muss nur damit ich den Datensatz zu Gesicht bekomme). Jetzt habe ich Gestern rausbekommen das ich die Query natürlich aktuallisieren muss (soweit alles klar bei mir) habe mir dann einen passenden Event ausgesucht auf den ich REagiere und folgende Zeilen in Code Geschrieben:
Delphi-Quellcode:
Habe gedacht das sollte klappen, tut es aber natürlich nicht, es wird mir dann die Meldung rausgegeben "Datenmenge die nur zum Lesen geöffnet werden kann, kann mit diesem Paramter nicht Aktuallisiert werden".
cxdbGrid.BeginUpdate;
DataModuleMain.ibqueryzeiterfassung.updateRecord; cxdbGrid.EndUpdate; Meine Frage jetzt : Was muss ich denn zwischen BeginUpdate und EndUpdate Schreiben damit er mir die Ansicht meines Grids über die Query nach eingabe eines neuen Datensatzes sofort Aktuallisiert ? Habe auch schon andere Befehle ausprobiert, wie das schliessen und öffnen der Tabellen, klappt aber auch nicht und ist auch nicht gerade elegant, geschweige denn Effektiv. Hat da jemand vieleicht einen Hinweis oder Tip oder Quellcode-Beispiel für mich, damit ich an dieser Stelle endlich weiter komme ? Für hilfe wäre ich sehr Dankbar. Gruss Darkchild |
Re: Aktuallisieren der ans cxdbGrid gekoppelten Query
Moin :-)
Ich würde es mal mit folgendem versuchen:
Delphi-Quellcode:
Hilft eigentlich immer ;)
DataModuleMain.ibqueryzeiterfassung.CLOSE;
DataModuleMain.ibqueryzeiterfassung.OPEN; |
Re: Aktuallisieren der ans cxdbGrid gekoppelten Query
Das habe ich auch schon gemacht, hatte ich zum Testen auf Form.Show und Form.Create gelegt, damit vieleicht nur das eine Fenster geschlossen werden muss und nicht die ganze Anwendung, aber das Funktioniert leider nicht.
Wäre auch zu einfache gewesen, aber dennoch Danke. Gruss Darkchild |
Re: Aktuallisieren der ans cxdbGrid gekoppelten Query
Hi Darkchild,
Dein Problem hat aber auch weniger mit einem TcxGrid zu tun, als mit dem allgemeinen Problem, Daten aus einem Server im Client Synchron zu halten. |
Re: Aktuallisieren der ans cxdbGrid gekoppelten Query
Hi Darkchild,
die Query muss die Daten vom Server anfordern. Dies macht sie über ein Refresh. Ich würde auch die Table und die Query mit der selben Transaction verbinden. Die Transaction sollte auf Read Commited stehen. Cu, Frank |
Re: Aktuallisieren der ans cxdbGrid gekoppelten Query
@dataspider
Auf die Geschichte mit dem Refresh bin ich auch gekommen, nur habe ich den Refresh auf dem SpeicherButton liegen und wenn ich dann Speicher soll er direkt refreshen, macht der aber nicht. Ich bekomme dann immer die Meldung : "Zeile kann nicht aktuallisiert werden.(Keine Aktuallisierungs-Abfrage)". So sieht im Augenblick mein SpeicherButton aus:
Delphi-Quellcode:
Mit der Fehlermeldung kann ich im moment leider nicht viel Anfangen, habe keinen Plan was der da noch braucht um den Refresh tatsächlich auszuführen.
procedure Tfrmzeiterfassung.cxbtnzeiterfassungspeichernClick(Sender: TObject);
begin StarteTransaction(); DataModuleMain.ibtablezeiterfassung.post; If DataModuleMain.ibtrzeiterfassung.Active then DataModuleMain.ibtrzeiterfassung.Commit; DataModuleMain.ibqueryzeiterfassung.Refresh; DataModuleMain.ibtablezeiterfassung.Open; end; Gruss Darkchild |
Re: Aktuallisieren der ans cxdbGrid gekoppelten Query
Hi,
ich arbeite zwar mit den IBO' s, versuche es aber dennoch:
Delphi-Quellcode:
Wie gesagt, ich arbeite nicht mit den Komponenten, aber du kannst ja mal testen.
procedure Tfrmzeiterfassung.cxbtnzeiterfassungspeichernClick(Sender: TObject);
begin // was macht das StartTransaction??? // StarteTransaction(); with DataModuleMain do begin ibtablezeiterfassung.post; ibtablezeiterfassung.Transaction.Commit; if not ibqueryzeiterfassung.Active then begin ibqueryzeiterfassung.Transaction.Commit; ibtablezeiterfassung.Open; end else begin if ibqueryzeiterfassung.Transaction = ibtablezeiterfassung.Transaction then // bei bleicher Transaktion sollte ein Refresh reichen ibqueryzeiterfassung.Refresh else begin // sonst muss auch ein Commit gemacht werden ibqueryzeiterfassung.Transaction.CommitRetaining; // evtll. noch ein Refresh //ibqueryzeiterfassung.Refresh end; end; end; end; Warum ist die Query bei dir zu? Cu, Frank |
Re: Aktuallisieren der ans cxdbGrid gekoppelten Query
Hinter der StarteTransaction() liegt nur dies hinter:
Delphi-Quellcode:
Habe ich in eine Procedure gesetzt weil bei verschiedenen Schaltflächen immer das selbe gemacht wird und um die ganze sache nicht immer mit dem Selben Code zu füllen und um mir Arbeit zu sparen habe ich halt diese kleine mini Procedure darein gesetzt.
procedure Tfrmzeiterfassung.StarteTransaction();
begin if not DataModuleMain.ibtrZeiterfassung.active then DataModuleMain.ibtrZeiterfassung.StartTransaction; end; Gruss Darkchild |
Re: Aktuallisieren der ans cxdbGrid gekoppelten Query
... und wie sind die Einstellungen der Transaktionen?
Benutzen Table und Query die gleiche Transaction? Ist Read Commited eingestellt? Frank |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz