Wert in berechnetes Feld eines TTables schreiben
-
Hallo,
habe in meinem Programm ein TTable, in dem u.a. die Felder Kurs (aktien) und Anteile drin stehen. Nun habe ich, um es nachher im DBGrid darzustellen, ein neues Feld "Betrag" der TTable hinzugefügt.
Wie bekomme ich dieses Feld Betrag nun gefüllt? Es soll jeweils der Wert Kurs*Anteile des aktuellen Datensatzes dort drin stehen.
Schöne grüße
Tobi
-
falls es umbedingt ein TTable sein muß, kannst du vielleicht das Ereignis OnAfterOpen verwenden, z.B. (ungetestet)
void __fastcall TChildAURe::Table1AfterOpen(TDataSet *DataSet) { double Kurs = DataSet->FieldByName("Kurs")->AsFloat; double Anteile = DataSet->FieldByName("Anteile")->AsFloat; DataSet->FieldByName("Betrag")->AsFloat = Kurs*Anteile; }allerdings ist es besser du verwendest ein Query und eine einfache SQL-Abfrage:
Query1->SQL->Clear(); Query1->SQL->Add("select *, (kurs*anteile) as betrag from tabelle"); Query1->Open();dann brauchst du nichtmal eine neue Spalte im TTable zu erzeugen
-
danke schonmal für die Antwort.
Das Problem ist momentang, dass jedesmal durch folgende Zeile die Errormeldung 'Table2: Datenmenge weder im Editier- noch im Einfügemodus' erscheint:FieldByName("Betrag")->AsFloat = Kurs*Anteile;mir ist schon klar, dass die Daten nicht readonly sein dürfen aber readonly ist beim TTable2 auch auf false gesetzt.
Wo könnte ich sonst noch readonly auf false setzen müssen?
-
das Problem ist, das mit dieser Zeile der Wert in die Datenbank geschrieben werden würde und da du kein Edit() verwendest kann er natürlich den Wert nicht zuweisen, d.h du müßtest eher so etwas verwenden:
void __fastcall TChildAURe::Table1AfterOpen(TDataSet *DataSet) { double Kurs = DataSet->FieldByName("Kurs")->AsFloat; double Anteile = DataSet->FieldByName("Anteile")->AsFloat; DataSet->Edit(); DataSet->FieldByName("Betrag")->AsFloat = Kurs*Anteile; DataSet->Post(); }allerdings wird jetzt der Wert in die Datenbank geschrieben...
[Edit]wobei wahrscheinlich nicht alle Zeilen dabei aktualisiert werden, sondern nur die Erste[/Edit]
-
Schau dir mal die Eigenschaft "TField::Calculated" und das zugehörige Ereignis "TDataset::OnCalcFields" an. Dann brauchst du keine zusätzliche Spalte in die Tabelle eintragen, sondern diese wird nur während der Anzeige der Daten benutzt.
Du solltest dann die Felder der Tabellen (innerhalb des IDE) mit dem Feld-Editor anlegen.
-
Hi,
Vielen dank für eure hilfe!
habs jetzt so gemacht wie Th69 beschrieben hat mit Linneas befehlen. (also in der OnCalcFields methode drin)
musste nichtmal edit und post aufrufen.
danke danke funzt alles wunderbar.
Schöne grüße
Tobi