Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi ''case erwartet Konstantenausdruck (https://www.delphipraxis.net/195309-case-erwartet-konstantenausdruck.html)

Codehunter 19. Feb 2018 09:34

Delphi-Version: 10 Seattle

''case erwartet Konstantenausdruck
 
Moin!

Ich steh grad etwas auf dem Schlauch. Der Compiler mäkelt einen fehlenden Konstantenausdruck an, der aber eine Konstante ist:
Delphi-Quellcode:
unit server_capabilities;

interface

type
  TServerBranch = (sbOther, sbMariaDB, sbMySQL);
  TServerFeature = Integer;
  TServerMutableString = Integer;
  TServerVersion = Integer;

const
  SRVFT_USER_ROLES: TServerFeature = $100001;

  SRVMS_PASSWORD_COLUMN: TServerMutableString = $200001;

type
  TServerCapabilities = class
  private
    FServerBranch: TServerBranch;
    FServerVersion: TServerVersion;
  public
    constructor Create(Branch: TServerBranch; Version: TServerVersion); virtual;
    function HasFeature(const AFeature: TServerFeature): Boolean; virtual;
    function MutableString(const AMutableString: TServerMutableString): string; virtual;
  end;

implementation

{ TServerCapabilities }

constructor TServerCapabilities.Create(Branch: TServerBranch;
  Version: TServerVersion);
begin
  FServerBranch:= Branch;
  FServerVersion:= Version;
end;

function TServerCapabilities.HasFeature(
  const AFeature: TServerFeature): Boolean;
begin
  Result:= FALSE;
  case FServerBranch of
    sbMariaDB:
    begin
      case AFeature of
        SRVFT_USER_ROLES: // <-- [dcc32 Fehler] server_capabilities.pas(45): E2026 Konstantenausdruck erwartet
          Result:= (FServerVersion >= 100005);
      end;
    end;

    sbMySQL:
    begin
      case AFeature of
        SRVFT_USER_ROLES: // <-- [dcc32 Fehler] server_capabilities.pas(45): E2026 Konstantenausdruck erwartet
          Result:= (FServerVersion >= 80000);
      end;
    end;
  end;
end;

function TServerCapabilities.MutableString(
  const AMutableString: TServerMutableString): string;
begin
  Result:= '';
  case FServerBranch of
    sbMariaDB:
    begin
      case AMutableString of
        SRVMS_PASSWORD_COLUMN: // <-- [dcc32 Fehler] server_capabilities.pas(45): E2026 Konstantenausdruck erwartet
          Result:= 'Password';
      end;
    end;

    sbMySQL:
    begin
      case AMutableString of
        SRVMS_PASSWORD_COLUMN: // <-- [dcc32 Fehler] server_capabilities.pas(45): E2026 Konstantenausdruck erwartet
        begin
          if FServerVersion >= 50706 then
            Result:= 'authentication_string'
          else
            Result:= 'password';
        end;
      end;
    end;
  end;
end;

end.

TRomano 19. Feb 2018 09:36

AW: ''case erwartet Konstantenausdruck
 
Nach einem kurzen Blick sehe ich typisierte Konstanten und mit denen geht das nicht !

Codehunter 19. Feb 2018 09:43

AW: ''case erwartet Konstantenausdruck
 
Zitat:

Zitat von TRomano (Beitrag 1394140)
Nach einem kurzen Blick sehe ich typisierte Konstanten und mit denen geht das nicht !

Nach einem kurzen Blick auf Kalender und Uhr stelle ich fest: Es ist Montag Morgen und der Koffeinspiegel ist im Keller :evil:

Danke, Problem gelöst! :thumb:

himitsu 19. Feb 2018 09:58

AW: ''case erwartet Konstantenausdruck
 
Jupp, typisierte Konstanten sind eigentlich "nur" schreibgeschützte Variablen, aber Nichttypisierte ...

Delphi-Quellcode:
const
  SRVFT_USER_ROLES = TServerFeature($100001);

  SRVMS_PASSWORD_COLUMN = TServerMutableString($200001);

18 Uhr in China, aber die haben eh gade alle gleichzeitig ihren einwöchigen Jahresurlaub zum Jahresanfang, also passt doch ... niemand denkt, vorallem da sie den Anfang schonwieder um 2 Monate verpasst haben. :stupid:

Codehunter 19. Feb 2018 10:53

AW: ''case erwartet Konstantenausdruck
 
Zitat:

Zitat von himitsu (Beitrag 1394143)
Jupp, typisierte Konstanten sind eigentlich "nur" schreibgeschützte Variablen, aber Nichttypisierte ...

Delphi-Quellcode:
const
  SRVFT_USER_ROLES = TServerFeature($100001);

  SRVMS_PASSWORD_COLUMN = TServerMutableString($200001);

Ich nehme die Tatsache, dass das so ist, einfach mal als gegeben hin :-) Obwohl es sich auf den ersten Blick nicht logisch erschließt.

Zitat:

Zitat von himitsu (Beitrag 1394143)
18 Uhr in China, aber die haben eh gade alle gleichzeitig ihren einwöchigen Jahresurlaub zum Jahresanfang, also passt doch ... niemand denkt, vorallem da sie den Anfang schonwieder um 2 Monate verpasst haben. :stupid:

Und sind in diesem Jahr auf den Hund gekommen :shock:

Uwe Raabe 19. Feb 2018 11:01

AW: ''case erwartet Konstantenausdruck
 
Zitat:

Zitat von Codehunter (Beitrag 1394151)
Obwohl es sich auf den ersten Blick nicht logisch erschließt.

Das ist aus Kompatibilitätsgründen für Programme mit {$J+} gedacht, bei der solche typisierten Konstante beschreibbar und somit eigentlich initialisierte, globale Variablen waren. Faktisch werden sie vom Compiler immer noch so implementiert. Lediglich das Beschreiben ist mit {$J-} nicht mehr erlaubt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:21 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