Autor Beitrag
bkgmjo
Hält's aus hier
Beiträge: 8



BeitragVerfasst: So 16.09.07 02:01 
hallo, bin änfänger in delphi und habe folgendes problem:
ich versuche eine desktop datenbank anzulegen, die als timer, geburtstagsplaner usw. funktionieren soll. soweit funktioniert das ganze auch schon aber ich fürchte meine lösung zur anzeige der restzeit bis zu einem event ist unbrauchbar. bei folgendem timeraufruf dauert es ca. 1 sekunde nur 20 werte zu aktualisieren, ausserdem springt der cursor lustig durch die gegend. hätte gerne, dass man die verschiedenen einträge über rechtsklick oder evtl. linksklick und dann löschen button auch wieder entfernen kann. für hilfe wäre ich sehr dankbar!

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TForm1.Timer1Timer(Sender: TObject);
var AZeit,Rest    : TDateTime;
begin
  ClientDataSet1.IndexFieldNames := 'Alarmzeit';
  ClientDataSet1.First;
  while not ClientDataSet1.Eof do
    begin
      AZeit := ClientDataSet1.FieldByName('Alarmzeit').AsDateTime;
      Rest := AZeit-Now;
      ClientDataSet1.Edit;
      ClientDataSet1.FieldByName('Restzeit').Value := Rest;
      ClientDataSet1.Next;
    end;
end;


Moderiert von user profile iconjasocul: Code- durch Delphi-Tags ersetzt
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: So 16.09.07 02:37 
2 Möglichkeiten:

1. Du sagst dem ClientDataset bescheid, dass sich jetzt was ändert

2. Du nutzt eine TQuery, der Du den Auftrag gibst, die Restzeit-Spalte Serverseitig zu ändern.
Bei 2. ginge da z.B.
ausblenden SQL-Anweisung
1:
UPDATE DeineTable SET Restzeit = Alarmzeit - :now					

Dann noch ein Query1.Params.Clear; und ein Query1.Params.Add('Now', Now); gefolgt von einem Query1.Execute; und die neuen Restzeiten sollten augenblicklich erscheinen ;-)

Ansonsten noch ein paar allgemeine Hinweise:
1. Nutz für Updates immer den DB-Cache der Datenbank-Komponenten (CachedUpdates). Damit wird das ehschon mal etwas schneller, weil die Anzahl der Server-Anfragen reduziert wird. Ferner solltest Du IMMER bei der VCL bescheidgeben, wenn Du etwas änderst OHNE die Anzeige aktualisiert bekommen zu wollen. Das spart Zeit, weil nicht neu gezeichnet wird nach jedem Schritt.

HTH.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
bkgmjo Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: So 16.09.07 07:00 
hmmm, ich hätte erwähnen sollen, dass ich im sinn hatte, das ganze evtl. weiterzugeben. da wäre doch die installation einer sql datenbank etwas übertrieben oder? hatte an diverse downloadprogramme gedacht, die ja auch laufend restzeiten aktualisieren. hab bis jetzt alles in einer xml datei gespeichert. kann auch sein, dass ich hier was falsch mitbekomme und sql befehle trotzdem funktionieren?!
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: So 16.09.07 13:10 
Das ist doch ein hilfreiches Detail, was Du hättest erwähnen sollen ;-)

Zwecks DB beim Anwender: Da würde sich ADO anbieten, da das eh meist installiert ist.

Wie das beim ClientDataset speziell aussieht zwecks Datenanbindung via XML weiß ich nicht (dazu habsch damit zu lang nix mehr zu tun gehabt).

Es bliebe Dir aber immer noch die Möglichkeit, kurz die visuelle Verbindung zu kappen während des Updates.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
bkgmjo Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: So 16.09.07 17:09 
hm, wie wäre denn dann ein lösungsvorschlag zum kappen der visuellen verbindung? ich wäre auch offen für eine ganz neue lösung der sache. es soll nur endlich funktionieren ;)
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: So 16.09.07 17:18 
Siehe TDataset in der DOH bzgl. ControlsDisabled, DisableControl und EnableControls. HTH.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
bkgmjo Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Mo 24.09.07 06:29 
leider ohne erfolg versucht, es passiert im prinzip dasselbe, nur dass man jetzt nicht sieht, dass er von datensatz zu datensatz kriecht, sondern es einfach ewig läd und dann die steuerung für eine halbe sekunde wieder zulässt. kann es evtl. daran liegen, dass ich die daten über ein dbgrid anzeigen lasse und dieses für die automatische aktualisierung sehr lang braucht?
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Mo 24.09.07 06:35 
Wenn Du in einer Datenmenge (TDataset) etws änderst, werden alle angeschlossenen visuellen Elemente benachrichtigt. Umd das dauert.
Versuch mal:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
Procedure DoUpdate;
Var
  B : TBookmark;

Begin
  MyDataset.DisableControls;   // Maul halten
  B := MyDataset.GetBookmark;  // Merken, wo wir sind
  Try
    MyDataset.first;
    While not MyDataset.Eof do begin
      MyDataset.Edit;
      MyDataset['Field1'] := Foobar;
      MyDataset.Post;
      MyDataset.Next;
    End
  Finally
    MyDataset.GotoBookmark (B); // Wieder an die Stelle springen
    MyDataset.FreeBookmark (B); // Lesezeichen freigeben
    MyDataset.EnableControls;   // Änderungen weitersagen
  End;
End;


Das sollte viel schneller gehen.

_________________
Na denn, dann. Bis dann, denn.