![]() |
Hallor r_kerber,
vielen Dank für den Link, damit haben sich gleich noch ein paar andere UZK's (= Unidentifizierte ZeichenKetten) geklärt. Ich hab' die Seite mit DFÜ-Token und Smileys gleich mal in meine Favoriten gelegt. Werd' ich mir nie merken! mfg eddy |
Hallo Eddi,
Leider habe ich kein Netzwerk aufgebaut und kann meine Theorien nicht austesten. Trotzdem solltest du die nachfolgende Info mal näher anschauen. Wenn Datensätze innerhalb eines Programmes verändert werden, werden diese erst auf der Platte gespeichert, wenn die Tabelle geschlossen wird. Die veränderten Daten werden in einem Zwischenspeicher gehalten. Vielleicht ist das ja schon der erste Ansatz für das Problem Erzwingen kann mann diesen Vorgang auch, indem man beim Programmstart folgenden Code in sein Formular einbindet. uses ...,bde; type TFormTest = class(TForm) ........ private procedure FlashToTable(Sender:TObject; var done:boolean); ..... end; procedure TFormTest.flashtotable; begin dbiuseidletime; done:=true; end; Abschließend noch im Objectinspector zur Form eine ONCREATE Anweisung doppelt anclicken und den CODE procedure TFormTest.FormCreate(Sender: TObject); begin application.onidle := FlashToTable; .... end; einfügen. Jetzt speichert das Programm, wenn es nicht anderweitig beschäftigt ist die Daten aus dem Zwischenspeicher direkt auf die Platte. |
@Praktiker
Genau diese Vermutung hatte ich auch. Die Tabellen werden erst in den Speicher geschrieben und wenn die Tabellen/Programm geschlossen werden, dann werden diese auch auf die Platte geschrieben! Das sieht man auch daran, das bei einem Reset während das Programm läuft alle neu eingetragenen Daten verloren gehen! @Eddy Ich weiß´es ja nicht genau, aber ich denke meine Lösung beschreibt Dein Problem (so wie es sich anhört) und gibt Dir die Lösung dazu! Gruß Mitchl |
Hallo Leute!
@praktiker: Den Verdacht, daß die Zwischenspeicherung der Daten die Aktuallisierung verhindert, hatte ich auch schon. Zu Testzwecken hatte ich DbiSaveChanges in AfterPost eingebunden. Das hat aber mein Problem nicht gelöst. Wenn ich mir zu DBiUseIdleTime die Hilfe hole, erhalte ich folgenden Hinweis: This function is no longer supported. Use DbiSaveChanges instead. Mit application.onidle muß ich mich noch beschäftigen. Zumindest ließe sich damit wohl der Zeitpunkt, wann die Aktuallisierungsabfrage erfolgen soll (in welcher Variante auch immer), festlegen - nämlich wenn das Programm gerade nichts macht. @MrSpock: Ich verwende Delphi 5 Professional, könnte das die Ursache dafür sein, daß die Variante mit "Table1.Filtered := Table1.Filtered;" bei mir nicht funktioniert? Schließlich würde diese Variante mein Problem mit dem geringsten Aufwand aus der Welt schaffen. Die Variante mir der separaten Tabelle, ich habe sie NetCtrl genannt, ist bereits in Arbeit. Aber bevor ich da zuviel Energie 'reinstecke, wollte ich mich hier um Alternativen kümmern. @Mitchl55: Den Link habe ich mir angesehen, kann aber keine Verbindung zu meinem Problem herstellen. Das TForm zu schließen und neu zu generieren kommt nicht in Frage, da ja damit die gesamte Initialisierungen und aktuellen Zustände verloren gingen, alle aktuell offenen Datenbanken geschlossen und an der selben Stelle neu geöffnet werden müssen. Erscheint mir vom Zeitverhalten nicht unbedingt optimal. @ Kann jemand etwas zu dem Zeitbedarf bzw. der Netzwerkbelastung zu den in der bereits beschriebenen Prozedur sbRefreshClick verwendeten Befehlen sagen? Gibt es noch andere Möglichkeiten, das Updaten der Datenbank, wie von MrSpock beschrieben, zu erzwingen? mfg eddy |
Hallo eddy,
nein, ich bin mir ziemlich sicher, dass es nicht an der Version liegt. Ich denke eher, dass nach dieser Zuweisung erneut das Scroll Event erzeugt wird. Das war in meinem kleinen Testprogramm nicht der Fall. Da gibt es jetzt 2 Möglichkeiten. Die eine mit dem Schließen und Wiederöffnen der Tabelle mit einem DisableControls vorher und dem Merken des aktuellen Datensatzes, damit du ihn wieder findest, habe ich ja schon erwähnt. Die andere wäre, dass du die Zuweisung nur machst, wenn das "Tag" der Tabelle 0 ist. Vor der Zuweisung setzt du das Tag dann aber auf 1, so dass bei einer erneuten Auslösung des Scrollevents keine Endlosschleife erzeugt wird, etwa so:
Delphi-Quellcode:
Dabei solltest du aber sicher sein, dass das Scroll Event bei der Zuweisung immer ausgelöst wird.
if Table1.Tag = 0 then
begin Table1.Tag := 1; Table1.Filtered := Table1.Filtered; end else { Tag ist 1 } Table1.Tag := 0; |
Hallo,...
Hab die Antwort von MrSpock ausprobiert! Funktioniert nicht ganz so wie gedacht, ist aber nah dran! Könnte es daran liegen das ich einfach das Programm zweimal gestartet habe!? Oder warum scrollt es öfter? Hab noch zu wenig Ahnung davon! Gruß Mitchl |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:44 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 by Thomas Breitkreuz