DataListView refresh

Deutschsprachiges X#-Forum – German language forum

Moderator: wriedmann

lagraf
Posts: 450
Joined: Thu Jan 18, 2018 9:03 am
Location: A

DataListView refresh

Post by lagraf »

Wenn ich in einem DataListView eine SQLTable darstelle und auf einem anderen Arbeitsplatz einer dieser angezeigten Datensätze geändert wird, kann ich diese geänderten Daten dem User irgendwie anzeigen?
- entweder den DataListView refreshen
- oder den Datensatz auf den ich drauf positioniere aktualisieren
User avatar
wriedmann
Posts: 3755
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

DataListView refresh

Post by wriedmann »

Hallo Franz,
in diesem Fall musst Du dafür Sorge tragen, dass die Daten neu gelesen werden, d.h. das SQL-Select neu ausgeführt wird.
Wieweit das die SQLSelect-Klasse aber bereits von alleine macht, kann ich Dir nicht sagen.
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
lagraf
Posts: 450
Joined: Thu Jan 18, 2018 9:03 am
Location: A

DataListView refresh

Post by lagraf »

Die Variante ist halt unschön, denn jedesmal wenn jemand einen Datensatz ändert, wird ihm quasi der Boden unter seinem Hintern weggezogen und der Cursor steht wieder auf dem ersten Satz des Datasets.

Besteht das Problem auch bei Verwendung des bBrowsers oder bei DBFs?
User avatar
wriedmann
Posts: 3755
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

DataListView refresh

Post by wriedmann »

Hallo Franz,
bei DBFs hast Du das Problem nicht, weil dort der Satz frisch und direkt aus der Tabelle gelesen wird, während bei SQL eine Abfrage gestartet wird und der Server ein Resultat zurückgibt. Das ist auch mit ein Grund, warum DBF bei größeren Datenmengen so viel langsamer als SQL ist.
Das mit dem Boden unter den Füßen weggezogen ist Dein Job: Du musst halt den aktuellen Satz vor dem Refresh speichern und danach wieder anspringen. Dazu solltest Du den eindeutigen Key des Satzes verwenden.
Das ist aber auch so, wenn Du so wie ich mit normalen ListViews (also nicht DataListView) auf DBF-Daten arbeitest.
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
lagraf
Posts: 450
Joined: Thu Jan 18, 2018 9:03 am
Location: A

DataListView refresh

Post by lagraf »

Wenn ich das Datset neu einlese und den Cursor auf den Datensatz stellen möchte, auf dem der User zuvor stand, dann geht das nur indem ich die Sätze durchskippe. Würde ich wie bei DBFs einen Seek drauf machen, dann könnte ich ab dem gefundenen Datensatz nicht mehr zurückblättern, weil durch den Seek ein neues Dataset beginnend mit dem gesuchten Satz gemacht wird. Da muß ich mal ausprobieren, wie lange das Skippen bei ein paar hundert Sätzen dauert, und natürlich die Anzeige dabei unterbinden.
User avatar
wriedmann
Posts: 3755
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

DataListView refresh

Post by wriedmann »

Hallo Franz,
ich würde hier den DataListView komplett vergessen und das mit einem normalen ListView machen.
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
lagraf
Posts: 450
Joined: Thu Jan 18, 2018 9:03 am
Location: A

DataListView refresh

Post by lagraf »

Ich habe immer einen DataListView für die Übersicht und daneben die Details für die Eingabe des markierten Datensatzes, beide arbeiten mit dem gleiche Server, sodaß sie miteinander skippen.

Welche Vorteil hätte ein ListView anstelle des DataListView? Nachteil wäre ja, dass ich alles manuell aufbauen und synchronisieren muss. Wie schauts dabei mit dem Sortieren, Filtern und suchen über alle Spalten aus?
Bild1.jpg
Bild1.jpg (99.54 KiB) Viewed 1504 times
User avatar
wriedmann
Posts: 3755
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

DataListView refresh

Post by wriedmann »

Hallo Franz,
wenn Du alles manuell machst, hast Du wesentlich mehr Kontrolle über das Ganze.
Genau dasselbe gilt auch für Filtern, Sortieren usw.
Besonders mit SQL bewährt es sich, die Daten in einen ArrayServer einzulesen und dann nur mehr im Speicher zu arbeiten. Änderungen kannst Du dann gezielt in die Datenbank schreiben, bzw. genauso gezielt aus der Datenbank lesen.
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
lagraf
Posts: 450
Joined: Thu Jan 18, 2018 9:03 am
Location: A

DataListView refresh

Post by lagraf »

Hallo Wolfgang auch schon munter?
Das mit dem ArrayServer verhindert aber nicht, dass die Daten im ListView nicht aktuell sind, wenn durch PHP Apps andere User inzwischen Daten verändern. Ich könnte zwar die Daten im Array aktualisieren, wenn das geschieht, aber die Anzeige im ListView würde sich erst nach einem Refresh aktualisieren.
User avatar
wriedmann
Posts: 3755
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

DataListView refresh

Post by wriedmann »

Hallo Franz,
spätestens 5:30 bin ich am PC.....
Das mit dem Ändern von Daten durch andere Benutzer wirst Du anders als durch regelmäßige Refreshs nicht auf die Reihe bekommen.
Das einzige, was mir sonst noch einfallen würde: per Datenbank-Trigger ein Notification-Log erstellen und das regelmäßig auslesen.
An die Funktionsweise von einem bBrowser auf einer DBF-Datenquelle kommst Du da aber nur mit großem Aufwand hin.
Das ist systembedingt. Meines Wissens nach hat der VO DataBrowser im Hintergrund da irgendwas gemacht, d.h. beim Bewegen innerhalb des Grids den aktuellen Satz neu nachgeladen oder so ähnlich. Ich habe das aber nie eingesetzt - bin sehr schnell auf GridPro und dann bBrowser umgestiegen, und mit SQL sowieso nur auf ListViews (nicht DatalistView). Das nutze ich mittlerweile auch immer mehr mit DBFs als Datenquelle.
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
Post Reply