Neue Spalte im DBGRID+zur Laufzeit berechnete Felder?
-
Hallo Zusammen,
ich versuche einen aus einer Query resultierenden DBGRID zu erweitern.
Ich möchte gerne Werte in eine zusätzliche Spalte
einfügen.Diese errechnet die Zeit differenz der spalte 3 und 4.
Auszug:
TBookmark bookmark;
SavePos = DBGridStatistik->DataSource->DataSet->GetBookmark();
DBGridStatistik->DataSource->DataSet->First();//Zeitdifferenz errechnen infügen in die erste zeile der zelle 9
DBGridStatistik->Fields[9]->AsString=AnsiString(DBGridStatistik->Fields[5]->AsDateTime-DBGridStatistik->Fields[3]->AsDateTime);
//danach exception zugriffsverletzung blabla!!!DBGridStatistik->DataSource->DataSet->GotoBookmark(bookmark);
DBGridStatistik->DataSource->DataSet->FreeBookmark(bookmark);oder kann man dbgrids durch datasource abhängikeit nicht erweitern?
Wäre lieb von Euch!
epidemic
-
Also ich versuche sowas gleich im SQL abzuhandeln.
Beispiel:
Ich will 2 Spalten (WERT1/WERT2) mit nummerischen Werten auslesen und als dritte Spalte die Summen aus den 2 Spalten anzeigen. Das SQL würde dann so aussehen
SELECT WERT1, WERT2, WERT1+WERT2 FROM TABELLE;Vielleicht kannst Du das in Deinem Fall so ähnlich lösen und hättest dann automatisch Deine zusätzliche Spalte
-
Ein DBGrid zeigt doch nur das an, was du im DataSet darunter (also z.B. Table oder Query) ermittelt hast.
Wenn du eine weitere Spalte haben möchtest, dann musst du diese in der Table bzw. Query entsprechend anlegen.
Falls das nicht gehen sollte, dann stell die Daten doch in einem StringGrid oder einer ListView dar.
Dort kannst du dann Spalten und Zeilen hinzufügen, ändern, löschen wie du willst, ohne dass du dabei die Table bzw. Query ändern musst.Allerdings hat ein schlauer Mann mal zu mir gesagt, dass die Datenbank an sich so viel wie möglich von der Datenbereitstellung übernehmen soll.
-
Hi Jungs,
Danke für Eure Bemühungen!
Peter, Deine variante war in der Tat sehr originell
funzt allerdings in dieser Konstellation nicht, da die uhrzeit
auf diese Weise nicht berechenbar ist.Habe mich dann doch für ein StringGrid entschieden.
Grüße
epidemic
-
Habs gerade nochmal explizit mit Datumsfelder probiert, geht auch astrein, jedenfals bei Oracle. Hier mein Test:
create table x (d1 date, d2 date);
insert into x values('1.1.3', '1.2.3');
select d1, d2, d2-d1 from x;
Ergebniss
D1 D2 D2-D1
-------- -------- ----------
01.01.03 01.02.03 31
-
Hups, Du sprachst ja von Zeitfeldern. Sorry, hab ich wohl vorhin überlesen.
Na auf jeden Fall bist Du mit nem StringGrid besser bedient als mit dem ollen DBGrid