Einzelnen Beitrag anzeigen

norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
504 Beiträge
 
Delphi 12 Athens
 
#1

Keine Daten wenn UniDac TVirtualDataSet in TDataModule

  Alt 12. Okt 2020, 16:50
Datenbank: Virtual • Version: xx • Zugriff über: UniDac
Hallo zusammen,

ich habe ein TVirtualDataSet von UniDac in einem TDataModule definiert und stelle die Daten über TDataSource in einem DBGrid dar.
Dem TVirtualDataSet wird eine TObjectList wie folgt zugeordnet.
Delphi-Quellcode:
type
  TSerNr = class
  private
    FID: Integer;
    FSerNr: string;
    FName: string;
  public
    property ID: Integer read FID write FID;
    property SerNr: string read FSerNr write FSerNr;
    property Typ: string read FName write FName;

    constructor Create;
    destructor Destroy; override;
  end;

  TSerNrList = class(TObjectList<TSerNr>)
  end;

procedure TDataModule1.vdsSerNrGetFieldValue(Sender: TObject; Field: TField; RecNo: Integer; out Value: Variant);
var
  SerNr: TSerNr;
begin
  SerNr := TSerNr(SerNrList.Items[RecNo - 1]);
  case Field.FieldNo of
    1: Value := SerNr.ID;
    2: Value := SerNr.SerNr;
    3: Value := SerNr.Typ;
  end;
end;

procedure TDataModule1.vdsSerNrGetRecordCount(Sender: TObject; out Count: Integer);
begin
  Count := SerNrList.Count;
end;
Das Ganze hat einwandfrei funktioniert, als ich TVirtualDataSet und TDataSource direkt auf dem TForm abgelegt habe. Sobald ich die beiden Komponenten aber in eine DataModule verschiebe, funktioniert es nicht mehr.
Die Liste wird korrekt angebunden, d.h. das vdsSerNrGetRecordCount wird aufgerufen und im Grid eine entsprechende Anzahl leerer Zeilen erzeugt.
Ein Haltepunkt in vdsSerNrGetFieldValue zeigt aber, dass dieses Event nie aufgerufen wird.

Wenn ich TVirtualDataSet und TDataSource wieder ins Form schiebe geht es.
Das Vorgehen ist in TForm und TDataModule genau das gleiche
  • Komponenten auf das Form/DataModule legen
  • TDataSource mit TVirtualDataSet verknüpfen
  • OnGetFieldValue und OnGetRecordCount definieren
  • Liste erzeugen
  • TVirtualDataSet.Open aufrufen
Hat jemand eine Idee woran das liegen könnte?

Ich arbeite mit Delphi 10.3.2 und UniDac 7.4.12

Grüße
Gerd
  Mit Zitat antworten Zitat