Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   MemoryDataset + CalcFields (https://www.delphipraxis.net/188621-memorydataset-calcfields.html)

Luckner 22. Mär 2016 14:00

Datenbank: Firebird • Version: 2.1 • Zugriff über: Dataset

MemoryDataset + CalcFields
 
Hallo,
Habe im meinem Programm ein DBGrid über ein Dataset mit einer Tabelle der Datenbank verbunden um eine Anzahl verschiedener Vorgänge anzuzeigen. Da das DBGrid über das Dataset ständig mit der Datenbank verbunden ist, wenn der Anwender in dieser Ansicht bleibt und zum Mittag geht, hatte ich ein MemoryDataset gefunden, das die Daten in Speicher kopiert und das DBGrid darauf zugreifen kann. Es fuktioniert auch weitgehend, jedoch ein CalcField für die Anzeige der Satznummern im DBGrid funktioniert nicht. In dem normalem Dataset hatte ich folgenden Routine dafür:
Delphi-Quellcode:
procedure TDataModule5.IBDataSetGridPlannungCalcFields(DataSet: TDataSet);
begin
  DataSet.FieldValues['NUMMER'] := DataSet.RecNo;
end;
Das Gleiche jedoch im MemoryDataset:
Delphi-Quellcode:
procedure TDataModule5.MemoryDataGridPlannungCalcFields(DataSet: TDataSet);
begin
 // MemoryDataGridPlannung.FieldByName('NUMMER').AsInteger := IBDataSetGridPlannung.FieldByName('NUMMER').AsInteger;
 //MemoryDataGridPlannung.FieldValues['NUMMER'] := DataSet.RecNo;//MemoryDataGridPlannung.DataSet.RecNo;
 DataSet.FieldValues['NUMMER'] := DataSet.RecNo;
end;
funktioniert nicht.
Hat bitte Jemand eine Idee, wie ich es machen kann?
Danke, Luckner

HolgerX 22. Mär 2016 14:44

AW: MemoryDataset + CalcFields
 
Hmm..

Ist das Field 'Nummer' nach dem kopieren ins MemoryDataset überhaupt noch ein CalcField?
ODer wird es dadurch zu einem DataField?

Luckner 22. Mär 2016 14:55

AW: MemoryDataset + CalcFields
 
Das Field "Nummer" aus dem Dataset wird in das MemoryDataSet nicht übernommen. Nur die "echtem" Felder aus der Tabelle.

HolgerX 22. Mär 2016 16:11

AW: MemoryDataset + CalcFields
 
Hmm..

Dann kann

Delphi-Quellcode:
procedure TDataModule5.MemoryDataGridPlannungCalcFields(DataSet: TDataSet);
begin
  DataSet.FieldValues['NUMMER'] := DataSet.RecNo;
end;
ja nicht funktionieren, wenn das 'Nummer' Field nicht vorhanden ist.

Leider kenne ich das MemoryDataSet nicht..
Gibt es da FieldDefs und kannst Du dort ein CalcField hinzufügen?

mkinzler 22. Mär 2016 17:01

AW: MemoryDataset + CalcFields
 
Wit welchen Komponenetn greift Du auf die Datenbank zu? Welches Memory-DataSet?

nahpets 22. Mär 2016 17:06

AW: MemoryDataset + CalcFields
 
Wie ist eigentlich funktioniert nicht zu verstehen?

Wird das Feld angezeigt, aber es bekommt keinen oder nicht den erwarteten Wert?
Gibt es zur Laufzeit eine Exception? Wenn ja, welche?
Hat der Compiler etwas gegen die Anweisung?
Lässt sich DataSet.RecNo sonstirgendwie ausgeben? Wenn ja, enthält es den erwarteten Wert?

Nicht alle DataSets liefern einen Wert für DataSet.RecordCount.
Hat Dein DataSet eventuell ein Problem mit dem Liefern von DataSet.RecNo?

Luckner 22. Mär 2016 17:33

AW: MemoryDataset + CalcFields
 
Das Feld NUMMER habe ich in dem MemoryDataset erzeugt als Calcfield. Auf die Datenbak greife ich über ein IBDataset zu. Das JvMemoryDataset (Jedi) greift aud das IBDataset zu und liest die Daten ein. Das funktioniert recht gut. Aber ich möchte im DBGrid auch die Durchnummerierung der Datensätze haben. Mit IBDataset funktioniert das. Wenn ich das gleiche mit dem MemoraDataset mache, dann steht im DBGrid 20-mal (oder mehr) die Nr: 1. Die Datensätze ebenfalls 20-mal die selben. Ohne das Calcfield alles OK. Auch die Reihenfolge ist korrekt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:14 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz