Entwickler-Ecke

Datenbanken - Tquery Requestlive=true


FrankBellartz - Fr 05.12.03 12:26
Titel: Tquery Requestlive=true
Hallo, wer kann mir weiterhelfen?
Ich habe bisher mit zwischengespeicherten Abfragen gearbeitet, die mit einem Update-Object in die Datenbank geschrieben wurden. Das läuft problemlos. Jetzt möchte ich aktualisierbaren Abfragen arbeiten (Requestlive = true, cacheupadte = false, auf Accessund MSSQL) arbeiten. Das läuft nicht ganz so gut. Nach einem Post, das einem Insert folgt verschwindet in einem Tdbgrid ein datensatz und wird scheinbar von meinem neuen Datensatz überschrieben. Ein erneutes select zeigt aber, dass alles richtig eingetragen wurde. Das ganze ist zwar nur ein Schöheitsfehler, die Anwender fragen aber erschreckt nach, wo denn der Datensatz geblieben ist. Ein Workaround läßt sich mit einer neuen Abfrage machen. Aber viele Abfragen sind der Performance Tod. Wer weiß Abhilfe?


Udontknow - Di 09.12.03 17:50

Hallo!

Bei unseren alten Anwendungen sind wir ebenfalls auf diese Problematik gestossen. Wir haben nach jedem Post die Datenmenge erneut geholt.

Das ist zwar nicht schön, aber auch nicht unbedingt der Performance-Tod, wenn man nicht gerade eine Datenmenge mit >10000 Datensätzen holt (was ja auch nicht nötig ist für den Benutzer).
Bei kleinen Daten-Happen ist das gar kein Problem.

Heute entwickeln wir nur noch mit Clientdatasets, da tritt das Phänomen nicht auf.

Cu


FrankBellartz - Mi 10.12.03 10:05

Hallo, das stimmt. Ein weiterer Schönheitsfehler ist, wenn in einer Abfrage die z.B. einen Datumsbereich einschränkt, der Anwender einen neuen Datensatz erstellt, der nicht in die Einschränkung fällt (was durchaus gewünscht ist), dann kommt bei einer erneuten Abfrage dieser Datensatz nicht mehr mit. Für den Anwender sieht es aus, als ob er verschwunden ist und er gibt ihn neu ein. Leider habe ich Anwender die diesen Vorgang hartnäckig wiederholen.


Udontknow - Mi 10.12.03 10:33

Nun, das Problem hat man natürlich bei allen Komponenten, die Filterung beherrschen. :)

Eine Möglichkeit wäre, im BeforePost-Ereignis einen MessageDlg-Befehl zu setzen, falls der Datensatz gefiltert werden würde. Dann könnte der Benutzer entscheiden, ob er ihn so speichern möchte oder doch lieber seine Eingabe revidiert (programmtechnisch durch abort).

Cu


FrankBellartz - Mi 10.12.03 14:59

Hallo, ich habe es so gemacht: ich führe die möglichen neuen Datensätze bei der erneuten Abfrage mit. Das funktioniert, könnte aber schöner sein. Vielen Dank für die Hilfe