![]() |
AW: TJvTimer
Also, wenn ich das richtig verstehe ist nach:
Delphi-Quellcode:
das Grid leer.
procedure TFramePlannung.TimerPlanungTimer(Sender: TObject);
begin DatamodulePlannung.DataModule5.IBDataSetGridPlannung.Close; end; Was ist denn dann mit:
Delphi-Quellcode:
Ist das Grid beim ersten ShowMessage leer und beim zweiten wieder gefüllt?
procedure TFramePlannung.TimerPlanungTimer(Sender: TObject);
begin DatamodulePlannung.DataModule5.IBDataSetGridPlannung.Close; ShowMessage('isetnuleer?'); Datamodule5.IBDatabasePlannung.DatabaseName := dbpfad; DatamodulePlannung.DataModule5.IBDataSetGridPlannung.Open; ShowMessage('Jetzsehemerwiederwatt?'); end; Dann geht das Neuladen wohl ohne die ShowMessages so schnell, dass man es nicht sieht. Und wenn sich nix an den Daten geändert hat, dann sieht man halt auch keinen Unterschied. Ansonsten mal ein bisserl ändern:
Delphi-Quellcode:
Wenn dann die SQL-Sanduhr übrig bleibt, ist (eventuell) irgendwo eine Exception (meldungslos) abgefangen worden und die Routine wird nicht vollständig ausgeführt.
procedure TFramePlannung.TimerPlanungTimer(Sender: TObject);
begin Screen.Cursor := crSQLWait; DatamodulePlannung.DataModule5.IBDataSetGridPlannung.Close; Datamodule5.IBDatabasePlannung.DatabaseName := dbpfad; DatamodulePlannung.DataModule5.IBDataSetGridPlannung.Open; Screen.Cursor := crDefault; end; Allerdings würd' ich dann bei 'nem erfolgreichen Close ein leeres Grid erwarten. |
AW: TJvTimer
Zum Problem. Schließt du das Grid oder das Dataset, das dahinter steht? Werde aus deiner Benamsung nicht ganz schlau. Afaik muss man nicht das Grid sondern das Dataset/die Query oder was auch immer dahinter steht öffnen und schließen.
|
AW: TJvTimer
Zitat:
ShowMessage ist VCL und was hatten wir bereits bezüglich Threads angemerkt? |
AW: TJvTimer
Also ich habe mir erstmal so geholfen:
Habe das DBGrid in ein Frame gepackt. Beim Aufruf des Frames das übliche: Dataset open usw. Beim schliessen des Frames: Dataset close. Jetzt im JvTimer: Frame schliessen und Frame öffnen. Es funktioniert aber leider im einem Blinken am Bildschirm. |
AW: TJvTimer
@himitsu
und was hatten wir bezüglich des Schalters Threaded=True angemerkt? Ist er nun gesetzt oder nicht, wenn nein, dann wird TTimer genutzt und dann ist ShowMessage kein Problem. Selbst wenn der Schalter gesetzt sein sollte, könnte man das ja mal eben ändern und probieren, wie dann das Verhalten mit ShowMessage ist. Oder? @Jumpy Ein Grid kann man (meines Wissens) nicht schließen, sondern nur die dahinterliegende Datenmenge. Die Namen in
Delphi-Quellcode:
Intepretiere ich mal dahingehend, das irgendwas mit dem Namen DatamodulePlannung über (mindestens) fünf Datenmodule verfügt, wobei das fünfte Datenmodul über ein IBDataSet verfügt, das dem Grid mit den Namen Planung zugeordnet ist.
DatamodulePlannung.DataModule5.IBDataSetGridPlannung
--- Prinzipiell sollte der ursprüngliche Quelltext eigentlich wie erwartet funktionieren. Und wenn's mit TJvTimer nicht funktioniert, dann nimmt man halt mal 'nen TTimer und packt dort die Routine ins Ereignis. Ändert sich das Verhalten dann, ist TJvTimer eventuell die Problemursache. Bleibt das Verhalten aber unverändert, dann müsste man mal schauen, was denn da sonst so im Hintergrund schief gehen könnte. @Luckner: Die Sichtbarkeit oder Unsichtbarkeit der Frames dürfte kaum eine Auswirkung auf das Ergebnis des Öffnens und Schließens der Datenmenge haben, es wurde lediglich die Stelle im Quelltext verändert, an der der Vorgang ausgeführt wird. Und wenn man eine Komponente versteckt und dann wieder anzeigt, dann sieht man das in der Oberfläche. Hat sich durch Deine Änderung denn jetzt das ursprüngliche Problem erledigt? |
AW: TJvTimer
Hallo nahpets,
1) habe es auch mit dem TTimer ausprobiert. Ebenfalls kein Erfolg. 2) Es gibt eine Datenmodul und wie aus dem Quellcode abzulesen ist, habe ich natürlich das entsprechende Dataset geschlossen und dann geöffnet (Wie auch im Frame). 3) Problem ist nicht unbedingt erledigt, weil das Geblincke natürlich stört. Morgen versuche ich mit einem Querry statt Dataset. Möglicherweise funktioniert es besser. Wenn ich einen Erfolgt erleben sollte, dann werde es hier mitteilen. Danke, Luckner |
AW: TJvTimer
Also es hat mit Querry anstatt Dataset auch nicht funktioniert. Ich belasse es erstmal mit dem Schliessen und Öffnen des Frames. Möglicherweise liegt es am JvDBGrid. Wäre aber dankbar für jeden Lösungsvorschlag.
Gruß, Luckner |
AW: TJvTimer
Nutze das JvDBGrid schon seit Jahren, habe bisher noch nicht einmal erlebt, dass mir das was anders angezeigt hat, als ich erwartet habe.
Bei 'nem Close der Datenmenge und 'nem anschließenden Open habe ich immer den dann aktuellen Stand der Daten gesehen. Meiner Meinung nach dürfte die Wahrscheinlichkeit, dass das JvDBGrid was anders anzeigt, als die Datenmenge enthält, gegen 0 tendieren. Zumindest kann ich mir momentan keinen Programmzustand vorstellen, bei dem dies möglich sein könnte. |
AW: TJvTimer
Aber irgenwie funktioniert der Timer nicht mit diesem Grid zusammen. Es zuckt nicht mal beim Schliessen und Öffnen des Datasets.
|
AW: TJvTimer
Das liegt aber nicht am Grid.
Bau in dem Timer doch mal hinter dem Close oder vor dem Open jeweils ein Sleep(5000) ein. Oder irgendwie 'ne andere Warteschleife, so dass man an der Oberfläche die einzelnen Schritte sehen kann. Wie groß ist denn die Datenmenge? Wenn's nur ein paar wenige Datensätze sind, kann es durchaus sein, dass man das Schließen und Öffnen an der Oberfläche nicht mitbekommt, weil es einfach zu schnell geht. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:08 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