ich bin im Code der ZEOS-Komponenten (ZSqlTestCase.pas line 68) auf eine Schreibweise für Konstanten gestoßen die mir neu war
Code: Alles auswählen
const
{ protocol lists }
pl_mysql_client_server = 'mysql,mysql-4.1,mysql-5,MariaDB-5';
pl_mysql_embedded = 'mysqld-4.1,mysqld-5';
pl_all_mysql = pl_mysql_client_server + ','+ pl_mysql_embedded;
Aus irgend einem Grund dachte ich dann, dass das doch eine elegante Art wäre diese Konstanten in einem Case zu verwenden, aber scheinbar klappt das nicht.
Nun suche ich nach der Bestätigung ob es wirklich nicht klappt oder ich nur irgend etwas falsch mache.
Es geht letztlich darum in Abhängigkeit unterschiedlicher SQL-Dialekte und Versionen SQL-Statements zu bauen die selbst schon recht komplex sein können. Da sind dann lange IF Ketten unübersichtlich.
Andere elegante Lösungen sind auch willkommen
Code: Alles auswählen
procedure TForm1.Button1Click(Sender: TObject);
var
s:string;
const
{ protocol lists }
pl_mysql_client_server = 'mysql,mysql-4.1,mysql-5,MariaDB-5';
pl_mysql_embedded = 'mysqld-4.1,mysqld-5';
pl_all_mysql = pl_mysql_client_server + ','+ pl_mysql_embedded;
begin
s:='mysql-5';
case s of
pl_mysql_client_server: showmessage('client_server');
pl_mysql_embedded: showmessage('embedded');
else
showmessage('found nothing');
end;
end;