Autor Beitrag
trm
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: Mo 01.12.14 21:16 
Huhu.

ich habe mal wieder eine eigenartige Knackwurst, die ich nicht durchbekomme.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
type
  THead = record
    A: String;
    B: Integer;
    C: Boolean;
  end;

type
  TFelder = record
    FA: String;
    FB: Byte;
    FC: Integer;
    FD: Boolean;
  end;

type
  TDBStruktur = record
    Head: THead;
    Felder: array of TFelder;
  end;


Das ist die Typenzuweisung (und JA, es sind im Moment einfach nur TEST-Bezeichner).

Im Folgenden möchte ich die Felder als Constanten festlegen, der Kopf wird zur Laufzeit jedoch erst generiert.

Wenn ich nun versuche Felder[0] .. Felder[n] vorzubelegen, kommt immer wieder eine Fehlermeldung.

ausblenden Delphi-Quelltext
1:
2:
Const
 FeldNamen_version:TDBStruktur=( ??? ) ;


Wie sieht so eine Zuweisung denn korrekt aus? Ist das überhaupt möglich, dass ein Teil eines Type-Records variabel und ein anderer Teil als Constante definiert/angesprochen wird?

LG Mathias

_________________
In Erfurt gibt es eine Pension, in der es gemütlich ist, Google einfach nach Pension Fiege ;)
Stundenplan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 128
Erhaltene Danke: 32

Win 7
Delphi 7 Pers., C# (VS 2010 Express)
BeitragVerfasst: Mo 01.12.14 21:37 
Du könntest Zuweisbare typisierte Konstanten (Compilerswitch {$J+}) verwenden. Den Head könntest du mit Dummy-Daten in der Konstante deklarieren und zur Laufzeit neu zuweisen.
Sauberer wäre es sicher, das Felder-Array als Konstante zu haben und zur Laufzeit eine TDBStruktur mit den konstanten Feldern und dem frischen Head zu belegen.
trm Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: Mo 01.12.14 21:54 
Danke, das hatte ich mir auch schon überlegt.

Mein Problem ist, dass der Compiler mir nicht erlaubt die Constanten zu definieren:


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
[dcc32 Fehler] UnitConstanten.pas(36): E2029 ')' erwartet, aber String-Konstante gefunden

Const
  FeldNamen_version: array [0 .. 3of TFelder =
    (('bibo2eintrag',1,1,True),(),(),());

_________________
In Erfurt gibt es eine Pension, in der es gemütlich ist, Google einfach nach Pension Fiege ;)
Stundenplan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 128
Erhaltene Danke: 32

Win 7
Delphi 7 Pers., C# (VS 2010 Express)
BeitragVerfasst: Mo 01.12.14 22:06 
Du musst den Namen des Recordfeldes, das du belegen möchtest, dazu schreiben, in etwa so:
ausblenden Delphi-Quelltext
1:
2:
3:
Const
  FeldNamen_version: array [0 .. 3of TFelder =
    ((FA: 'bibo2eintrag'; FB: 1; FC: 1; FD: True),(),(),());

Für diesen Beitrag haben gedankt: trm, Xion
trm Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: Mo 01.12.14 22:28 
user profile iconStundenplan hat folgendes geschrieben Zum zitierten Posting springen:
Du musst den Namen des Recordfeldes, das du belegen möchtest, dazu schreiben, in etwa so:
ausblenden Delphi-Quelltext
1:
2:
3:
Const
  FeldNamen_version: array [0 .. 3of TFelder =
    ((FA: 'bibo2eintrag'; FB: 1; FC: 1; FD: True),(),(),());


So ein Quatsch. Das habe ich noch nie gesehen.

Herzlichen Dank!

_________________
In Erfurt gibt es eine Pension, in der es gemütlich ist, Google einfach nach Pension Fiege ;)
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Mo 01.12.14 22:28 
Normalerweise bin ich auch für schlanke Records, aber in diesem Fall: Wieso benutzt du keine Klasse? Dort kannst du im Constructor alles anlegen, wie du es möchtest. Wenn du dann alle properites nur als read definierst, dann sind sie auch konstant...mit der Option, später noch erweitert zu werden.

Der Sinn von Konstanten ist ja eigentlich nur, dass sie im Code gleich eincompiliert werden und daher etwas schneller sind (mal davon abgesehen, dass man ihnen nichts zuweisen kann, was mit der Klasse ja auch der Fall wäre).

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)