Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi DBGrid "einfrieren" (https://www.delphipraxis.net/124689-dbgrid-einfrieren.html)

haentschman 23. Nov 2008 12:40

Datenbank: firebird • Version: 2.0 • Zugriff über: zeos

DBGrid "einfrieren"
 
Hallo alle...

ich suche jetzt schon eine Weile und finde es nicht :wall:

Problem:
- in ein DBGrid werden Werte eingetragen.
- bei Veränderung wird eine ComboBox geleert und mit den neuen Daten gefüllt.
- dazu muß ich alle Datensätze durchlaufen
- mich stört einfach, daß der Balken mit dem aktuellen Datesatz mitläuft.
- ich hätte gern das Grid "eingefroren" und nach der Aktualisierung der ComboBox wieder freigegeben.

Ich weis, daß es da eine einfache Möglichkeit gibt, aber ich komme nicht drauf :oops:

Danke für Infos in die Richtung...

ConstantGardener 23. Nov 2008 12:45

Re: DBGrid "einfrieren"
 
Hallo haentschmann,

meinst Du DisableControls der Datenbankkomponenten (weiß nicht ob zeos sowas hat ?) ?

mfg CG

haentschman 23. Nov 2008 12:56

Re: DBGrid "einfrieren"
 
Danke für die schnelle Reaktion.

...leider führt mich Query.DisableControls nicht zum Ziel...die Datenmenge in der Query ist dann nicht mehr die gleiche :gruebel:
:hi:

PS: im Prinzip ist das genau das was ich suchte, ich muß nur noch herausfinden, warum meine Datenmenge in der Durchlaufschleife immer nur einen Datensatz enthällt.

Berserker 23. Nov 2008 13:00

Re: DBGrid "einfrieren"
 
Hallo.

Mach doch einfach eine zweite Datenquelle auf.
Damit wird die erste nicht angetastet und dein DBGrid bleibt wie es ist.

MfG, Ronny

alzaimar 23. Nov 2008 14:23

Re: DBGrid "einfrieren"
 
Du hast das Konzept der Datenmengen (TDataset-Abkömmlinge) vielleicht nicht richtig verstanden.

Ein TDataset enthält die geladenen Daten in Tabellenform und verwaltet einen Datensatzzeiger, sodaß beim Zugriff auf die Felder die daten jeweils einer Zeile ausgelesen werden. Mit First/Next/Prior/Last kann man den Datensatzzeiger bewegen. Mit Get/GotoBookmark kann man sich die Position des Datensatzzeigers merken und später wieder dort hinspringen.

Eine Routine, die unsichtbar durch eine Datenmenge iteriert, und den Datensatzzeiger hinterher wieder dort plaziert, wo er vorher war, sieht so aus:
Delphi-Quellcode:
...
Var
  B : TBookmark;

Begin
  B := MyDataSet.GetBookmark;
  MyDataset.DisableControls;
  Try
    MyDataset.First;
    While Not MyDataset.Eof do Begin
      // Mach was mit MyDataset
      MyDataset.Next,
    End
  Finally
    MyDataset.GotoBookmark(B);
    MyDataset.FreeBookmark(N);
    MyDataset.EnableControls;
  End
End;
Damit solltest Du die gewünschte Funktionalität abbilden können.

haentschman 23. Nov 2008 15:00

Re: DBGrid "einfrieren"
 
Hallo alzaimar,
Zitat:

Du hast das Konzept der Datenmengen (TDataset-Abkömmlinge) vielleicht nicht richtig verstanden.
...ich denke nach 3 Jahren Arbeit mit Datenbanken sollte man schon wissen was ein Datensatzzeiger ist und wie Tabellen oder Querys arbeiten :mrgreen:

- das mit den Bookmarks ist schon klar aber es ging mir weniger um die Positionierung auf den alten Datensatz.

DisableControls / EnableControls war das was ich suchte. Ich hatte nur an der falschen Stelle nach dieser Funktionalität gesucht.
Funktioniert auch so wie es sein soll.
Meine Update Routine hatte ich im AfterPost der Query. Da aber auch beim Versetzen in den EditMode AfterPost aufgerufen wird :gruebel: , ergab das mit dem DisableControls ein wenig komische Effekte. Das habe ich aber nun auch im Griff.

Trotzdem Danke...


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:54 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