Autor Beitrag
Bulvaye
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 37

Windows Xp
Delphi 7 Enterprise
BeitragVerfasst: Mi 21.07.04 14:28 
Hallo zusammen,

ich habe noch nie mit CalcFields gearbeitet und komme da irgendwie nicht weiter. Ich habe folgende Problemstellung:

1. Es sollen zur Laufzeit CalcFields erzeugt werden.
2. Für die CalcFields existiert keine Repräsentation in der Datenbank, d.h. die Felder sollen nur im TDataset-Objekt vorhanden sein, nicht aber in der Datenbank gespeichert werden.

Wie kann ich CalcFields zur Laufzeit erzeugen? Dieser Code funktioniert leider nicht:

ausblenden Quelltext
1:
2:
3:
4:
5:
  Field := TStringField.Create(nil);
  Field.FieldKind := fkInternalCalc; // oder auch fkCalculated
  Field.FieldName := 'TEST';
  Field.Size := 255;
  Field.DataSet := MeinDataset;


Mit fkCalculated wird das Feld nicht angefügt und mit fkInternalCalc laufe ich auf den Fehler, dass "Test" nicht gefunden wurde. Was mache ich hier grundsätzlich falsch?

Danke für jeden Hinweis.
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Mi 21.07.04 14:44 
Also, bei mir klappt´s:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
procedure TForm1.Button1Click(Sender: TObject);
var Field:TStringfield;
begin
  Field := TStringField.Create(nil);
  Field.FieldKind := fkCalculated;
  Field.FieldName := 'TEST';
  Field.Size := 255;
  Field.DataSet := Clientdataset1;
  Clientdataset1.OnCalcFields:=ClientDataSet1CalcFields;

  Clientdataset1.CreateDataSet;
  Clientdataset1.Insert;
  Clientdataset1.FieldByName('text').AsString:='Hallo,';
  Clientdataset1.Post;

  ShowMessage(Clientdataset1.FieldByName('Test').AsString);
end;

procedure TForm1.ClientDataSet1CalcFields(DataSet: TDataSet);
begin
  Clientdataset1.FieldByName('Test').AsString:=Clientdataset1.FieldByName('Text').AsString+' Welt!';
end;


Cu,
Udontknow
Bulvaye Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 37

Windows Xp
Delphi 7 Enterprise
BeitragVerfasst: Mi 21.07.04 21:55 
Danke - aber das Problem war, dass, sobald ein TField zur Laufzeit erzeugt wird, das Dataset auch nur dieses eine Feld kennt. Also müssen zusätzlich alle Felder aus dem FieldDefs als TFields erzeugt werden - dann klappt's auch.