Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Keine Daten wenn UniDac TVirtualDataSet in TDataModule (https://www.delphipraxis.net/205756-keine-daten-wenn-unidac-tvirtualdataset-tdatamodule.html)

norwegen60 12. Okt 2020 16:50

Datenbank: Virtual • Version: xx • Zugriff über: UniDac

Keine Daten wenn UniDac TVirtualDataSet in TDataModule
 
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

mkinzler 12. Okt 2020 17:33

AW: Keine Daten wenn UniDac TVirtualDataSet in TDataModule
 
In welcher Unit/Klasse ist die Event-Methode deklariert?

norwegen60 12. Okt 2020 19:13

AW: Keine Daten wenn UniDac TVirtualDataSet in TDataModule
 
Ganz blöder Fehler: Ohne das geht es natürlich nicht

Delphi-Quellcode:
procedure TDataModule1.DataModuleCreate(Sender: TObject);
begin
  vdsSerNr.FieldDefs.Add('ID', ftInteger);
  vdsSerNr.FieldDefs.Add('SerNr', ftString, 20);
  vdsSerNr.FieldDefs.Add('Typ', ftString, 30);
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:18 Uhr.

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