Einzelnen Beitrag anzeigen

Benutzerbild von NoGAD
NoGAD

Registriert seit: 31. Jan 2006
Ort: Weimar
345 Beiträge
 
Delphi 10.4 Sydney
 
#1

SetLength eines Records beginnt bei 1 ?

  Alt 13. Feb 2022, 16:37
Hallo, ich verzweifle gerade, weil ein dynamisches Array bei mir immer mit 1, statt 0 beginnt:


Delphi-Quellcode:
[..]
interface

type
  T_DataBase_AddTerminArray = record
    cFieldNames: String;
    aFieldValues: String;
  end;

type
  T_DataBase_AddTermin = record
    aID: Integer;
    aDateTime: TDateTime;
    aFields: array of T_DataBase_AddTerminArray;
  end;


type
  TDBClassAddTermin = class
  private
  public
    aDataBaseAddTermin: T_DataBase_AddTermin;
  end;

var
  { Termin hinzufügen Struktur }
  GDBClassAddTermin: TDBClassAddTermin;
Jetzt versuche ich die Klasse zu initialisieren:

Delphi-Quellcode:
      GDBClassAddTermin := TDBClassAddTermin.Create;
      GDBClassAddTermin.aDataBaseAddTermin.aDateTime := Dummy_DateTime;
      SetLength(GDBClassAddTermin.aDataBaseAddTermin.aFields, 6); // HIER beginnt nun zu meiner Verwunderung der Index bei 1
Eine Zuweisung mittels GDBClassAddTermin.aDataBaseAddTermin.aFields[0].cFieldNames := 'Test'; ergibt eine Fehlermeldung.

Auf der anderen Seite will aber eine Schleife wiederum beim Index 0 beginnen:

Delphi-Quellcode:
var
 DummyX: Integer;
begin
 for low(GDBClassAddTermin.aDataBaseAddTermin.aFields) to pred(high(GDBClassAddTermin.aDataBaseAddTermin.aFields)) do //pred müsste eigentlich korrekt sein, wenn von 0 gezählt wird
  begin
   GDBClassAddTermin.aDataBaseAddTermin.aFields[DummyX].cFieldNames := DummyX.ToString; // ergibt auch eine Fehlermeldung beim Index 0
  end;
Kann mir bitte jemand auf die Sprünge helfen, warum das so ist oder, was mir wichtiger ist, wo mein Denkfehler liegt?

LG Mathias




Edit: hat sich erledigt, auf einmal klappt es doch. Ich weiß aber nicht, warum.
Mathias
Ich vergesse einfach zu viel.

Geändert von NoGAD (13. Feb 2022 um 16:46 Uhr) Grund: Es klappt doch auf einmal.
  Mit Zitat antworten Zitat