0

私は溶岩、水、闇、自然の4つのマナタイプを持っています。一度に1つずつ、それぞれに対してクエリを実行したい。現在、私は持っています

    procedure TFGame.GetStartingCards;
var
   ManaType :string  ;
begin
Manatype := 'Nothing';
    while ManaType <> 'Nature' do
      begin
        if ManaType = 'Dark' then
            ManaType := 'Nature';
        if ManaType = 'Water' then
            ManaType := 'Dark';
        if Manatype = 'Lava' then
            Manatype := 'Water';
        if Manatype = 'Nothing' then
           ManaType := 'Lava' ;
        with adoquery1 do
          begin
             close;
             sql.Clear;
             sql.Add('SELECT * ');
             sql.Add('FROM Cards');
             sql.Add('WHERE Color='''+ManaType+'''');
             open;
          end;

          //return the result of everything for giving mana type..
    end;

しかし、各マナ タイプを配列に入れ、配列を使用してクエリをフィードするなど、より良い方法のようです。しかし、それを機能させることができませんでした。だから質問は、私がこのように保つことに決めた場合、これには欠陥がありますか?

4

3 に答える 3

8

マナに列挙型を導入することをお勧めします。また、クエリに使用する文字列の const 配列を導入することをお勧めします。

type 
  TManaType = (mtNothing, mtNature, mtDark, mtWater, mtLava);

const
  cManaQueryNames : array[mtNothing..mtLaval] of string =
    ('nothing','nature','dark','water','lava');

また、データベースでは、マナタイプを TManaType の数値 (ord) に対応する数値として保存することを検討できます。そのため、データベースでは、水のマナは ord(mtWater) = 3 として保存する必要があります。

于 2013-10-21T06:51:14.957 に答える