Wie veränderten Wert im DBGrid (Zelle) anzeigen?

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
beule
Beiträge: 5
Registriert: Do 10. Sep 2009, 20:21

Wie veränderten Wert im DBGrid (Zelle) anzeigen?

Beitrag von beule »

Version Laz 0.9.26.2 Beta

Ich habe ein DBGrid das nur die Ergebniss einer Suche auf der Datenabnk anzeigt. Der Anwender kann eine Zeile im DBGrid markieren (dgRowSelect:= true), die verändert werden soll. Dann betätigt er einen Button und der Wert (eine bestimmte Spalte) wird auf der Datenbank verändert.
Jetzt würde ich gerne im DBGrid dies dem Anwender auch visuell anzeigen. Nach dem Motto, habe ich diese Zeile schon geändert oder nicht? Die Suche einfach nochmal starten scheidet aus, da dies unter Umständen ca. 20 sec dauern kann.

Wie kann ich dieses bewerkstelligen?

Danke für Eure Hilfe

Ciao beule

Ralph59
Beiträge: 145
Registriert: So 22. Mär 2009, 07:48
OS, Lazarus, FPC: WIN 11 (momentan )
CPU-Target: 64 und 32Bit
Wohnort: Hessen
Kontaktdaten:

Re: Wie veränderten Wert im DBGrid (Zelle) anzeigen?

Beitrag von Ralph59 »

Hallo Beule,

zu deinem Problem gibt es sicherlich verschiedene Möglichkeiten.
Ich verstehe zwar nicht richtig dein Problem, aber vieleicht solltest Du anstelle eines DBGrids ein Stringgrid oder Listview verwenden, hierbei hättest Du sehr einfach die Möglichkeit eine Zusätzliche Spalte einzufügen, die z.B. den Beirag erledig oder bearbeitet am von enthalten könnte.

Der Nachteil ist nur, dass du nach deinem Select ... from ... where inner or outer ... order by... was auch immer
die Daten in dein Grid eintragen musst.
Hierfür würdest Du dann z.B. eine While Schleife durchlaufen.
Alle Daten könntest Du dann nach der Bearbeitung über dein Grid entsprechend deines Datensatz Zeigers oder z.B. über eine ID in die Datentabelle schreiben und nur noch dein Listview aktualisieren.

Code: Alles auswählen

var 
    counter:integer
begin
...
counter := 0;
while datasource1.DataSet.EOF = false do begin
    Listview1.Items.Add.Caption:=''
    listview1.Items[counter].SubItems.Add('Feldinhalt 1 z.b. datasource2.DataSet.FieldByName('ID').Text');
    listview1.Items[counter].SubItems.Add('nicht bearbeitet');
    ...
    incr(counter);
    datasource1.DataSet.Next; //solltest Du lieber nicht vergessen
end;
Ich kann dir leider nicht versprechen, dass du den obenstehenden code direkt so verwenden kannst, habe den nur so runter geschrieben. Sollte jedoch ziemlich so funktionieren.

Was ich jedoch nicht verstehe, warum deine Suche 20 Minuten dauern soll, vieleicht kann man da ja auch etwas optimieren. Wieviel daten liegen denn in deiner Datenbank / den einzelnen Tabellen?


Mit freundlichem Gruß

Ralph
Fehler sind wie Berge, man steht auf dem Gipfel seiner eigenen und redet über die der anderen.

Antworten