AGB  ·  Datenschutz  ·  Impressum  







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

cxgrid mit NexusDB, Update stoppen

Ein Thema von Surrounder · begonnen am 24. Apr 2006 · letzter Beitrag vom 25. Apr 2006
Antwort Antwort
Benutzerbild von Surrounder
Surrounder

Registriert seit: 26. Sep 2003
Ort: Stuttgart
177 Beiträge
 
Delphi 2006 Professional
 
#1

cxgrid mit NexusDB, Update stoppen

  Alt 24. Apr 2006, 23:50
Datenbank: NexusDB • Version: 4.05 • Zugriff über: Datasource
Hallo Forum,

ich sitz gerade in Mexico und hab ein kleines Geschwindigkeitsproblem mit meinem cxgrid.

Folgende Situation: Ich schreibe alle 25 Sekunden 1 Datensatz in meinen Mastertable, und meine Slavetable 10 Datensätze. Auf einem extra Formular in meiner Software habe ich ein cxGrid (DevExpress) mit dem ich die Datensätze aus der Mastertabelle anzeige. Das cxGrid läuft nicht im GridMode und hat eine Verbindung zur DataSource.

Problem: Wenn ich das Formular öffne sehe ich alle Daten die in der Tabelle sind, wenn dann neue Daten im Hintergrund geschrieben werden dann springt die Ansicht in der Tabelle ständig zum letzten Datensatz, außerdem ist das schreiben des Datensatzes ca. 2-3 Sekunden langsamer vermutlich weil das cxGrid sich ständig aktualisiert und die db auch mit belastet.

Ich hab mir nun gedacht ich könnte das Problem so lösen indem ich dem Grid einfach verbiete sich die aktuellen Daten aus der Tabelle zu holen. Aber leider hab ich nicht heraus gefunden wie und ob das überhaupt geht? Mir würde es reichen wenn das cxGrid einfach einmal beim erzeugen des Formulars die aktuellen Daten laden würde und dann nix mehr tut so dass die db in ruhe arbeiten kann. Ich brauche aber die Verbindung zur db trotzdem weil wenn ich einen datensatz auswähle dann würde ich gerne auch die zugehörigen Einträge in der Slavetabelle haben. Hat da jemand eine Idee oder einen anderen Vorschlag wie ich so etwas machen kann?

Gruß an alle aus dem 35 Grad warmen Mexico ... ( schwitz )
In C geschrieben und schön war zuletzt Franz Schuberts 9. Symphonie
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.351 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: cxgrid mit NexusDB, Update stoppen

  Alt 25. Apr 2006, 00:13
Hallo,

ich kann mir vorstellen, dass man es mit der Methode BeginUpdate oder BeginFullUpdate des DataControllers lösen könnte.
Man sollte dann nur noch beim Schliessen des Forms evtll. CancelUpdate aufrufen.
Ich habe es aber nicht getestet.

Wenn keine anderen Controls mit der DataSource verbunden sind, kann man auch DisableControls des DataSet verwenden.

Cu, Frank
Frank Reim
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: cxgrid mit NexusDB, Update stoppen

  Alt 25. Apr 2006, 08:07
Ja ja, das alte Refresh-Problem....

Wenn es dir nichts ausmacht, bei einem Refresh jedesmal alle Daten neu zu laden, dann verwende DisableControls/EnableControls sowie ein Bookmark während des Neuladens:
Delphi-Quellcode:
Procedure DatasetRefresh (aDataset : TDataset);
Var
  B : TBookmark;

Begin
  aDataset.DisableControls;
  Try
    B := aDataset.GetBookmark;
    aDataSet.Close;
    aDataset.Open;
    Try // Schützen, weil der ehemals aktuelle Datensatz nun weg sein könnte
      aDataset.GotoBookmark (B);
    Except
    End;
  Finally
    aDataset.FreeBookmark (B);
    aDataset.EnableControls;
  End;
End;
Natürlich geht das noch ausgefeilter, z.B. über den FocusedRecordIndex des TcxGrids, aber das Prinzip ist klar.

Alternative (wenn das Grid nur zur Anzeige dient):
- Entweder ein Unbound Grid verwenden (TcxGridTableView) und die Datacontroller.Values befüllen
- Oder ein Memory-Dataset odr ADO-DS (Lockmode = BatchOptimistic) mit einer Kopie der Master-Dateil Tabellen bilden

und alle DB-Operationen auf diese Clones duplizieren.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von Surrounder
Surrounder

Registriert seit: 26. Sep 2003
Ort: Stuttgart
177 Beiträge
 
Delphi 2006 Professional
 
#4

Re: cxgrid mit NexusDB, Update stoppen

  Alt 25. Apr 2006, 15:56
danke erst mal für Eure Antworten, hab das meiste auch schon getestet. Bei BeginUpdate egal welcher Art hab ich das Problem dass das cxGrid sich nicht mehr scrollen lässt und ich also auch nicht mehr alle Einträge anschauen kann. Je 25 Sekunden einen Eintrag, da kommt schon was zusammen.

Das mit dem Disable Controls hab ich auch getestet das hat zwar soweit funktioniert dass der Refresh verhindert wird, aber einige andere Funktionen des cxGrid gingen nicht mehr.

Ich denke ich verlange da zuviel, denn es ist halt nunmal eine Datenbank. Ich denke die einzige Möglichkeit ist wirklich einen MemTable zu verwenden und die aktuelle db zu kopieren um das Problem zu umgehen, und das werde ich jetzt einfach mal testen. Falls jemand noch eine Idee hat, ich bin für alles noch offen
In C geschrieben und schön war zuletzt Franz Schuberts 9. Symphonie
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: cxgrid mit NexusDB, Update stoppen

  Alt 25. Apr 2006, 16:09
Wer braucht schon das Grid, in dem alle Werte angezeigt werden? Niemand. Wenn es wirklich 25 Sekunden braucht, die Werte zu laden ist a) entweder die Tabelle sehr lang oder b) die Abfrage zu komplex.

Ich würde mir die Frage stellen, ob es wirklich sinnvoll ist, die gesamte Tabelle anzuzeigen. Die Suchfunktionen (Inkrementelle Suche) sind zwar ganz nett, aber eben doch nur für ein paar 1000 Records akzeptabel.

Ich habe eine Tabelle mit ca. 1000 Einträgen (Produktdatenbank), da mache ich das mit dem Refresh nach jeder Änderung. Ist bescheuert, geht aber gerade noch...
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.351 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: cxgrid mit NexusDB, Update stoppen

  Alt 25. Apr 2006, 17:32
vielleicht so:

View.DataController.DataModeController.SyncMode := False; Frank
Frank Reim
  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 04:01 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