case str of
    'test1'  : showmessage('test1') ;
    'test2'  : showmessage('test2') ;
    'test3'  : showmessage('test3') ;
    end;
还是有错

解决方案 »

  1.   

    Delphi的Case语句中的变量必须是有序的类型。
      

  2.   

    Delphi的Case语句中的变量必须是有序的类型。所以你若要对无序的类型进行变换的话,就必须进行一系列的变换。
    如下:
    function Str2Ac(SourceStrs:String):string;
    var SelectStrings: TStringList;
    begin
      SelectStrings := TStringList.Create;
      SelectStrings.Add('等于');
      SelectStrings.Add('并且');
      SelectStrings.Add('或者');
      SelectStrings.Add('小于等于');
      SelectStrings.Add('大于等于');
      SelectStrings.Add('小于');
      SelectStrings.Add('大于');
      SelectStrings.Add('不等于');
      SelectStrings.Add('类似');
      case SelectStrings.IndexOf(SourceStrs) of
        0:Result :=' = ';
        1:Result :=' AND ';
        2:Result :=' or ';
        3:Result :=' <= ';
        4:Result :=' >= ';
        5:Result :=' < ';
        6:Result :=' > ';
        7:Result :=' <> ';
        8:Result :=' like ';
      end;
      SelectStrings.Free;
    end;
      

  3.   

    什么都能Case那就不是小Case了。
    整数、枚举、字符(不是字符串)可以Case,其他,免谈!
      

  4.   

    Hongyan_OK(梦里人) 已经完全谈过了,很精辟,请仔细分析一下后再发言。
    当然 CASE 里的内容自已一定要首先定义好。例子如下
    var SelectStrings: TStringList;
    begin
      SelectStrings := TStringList.Create;
      SelectStrings.Add('test1');
      SelectStrings.Add('test2');
      SelectStrings.Add('test3');
      case SelectStrings.IndexOf(SourceStrs) of
        0:showmessage('test1') ;
        1:showmessage('test2') ;
        2:showmessage('test3') ;
      end;
      SelectStrings.Free;//注意一定要FREE
    end;
      

  5.   

    CASE中的必需是有序类型的,如果你非得要使一个字符串类型可以用枚举先定义一下。或是字符串数组。另外str是函数名,不能乱用。
    type
    Tstr1=(test1,test2,test3);
    var
      a:Tstr1;
    这样你可以引用了。