public
     I:Integer;
     P1,P2,P3,P4,P5,P6,P7: String;
  end;
procedure TForm1.BOMMCAfterScroll(DataSet: TDataSet);
begin
  with BOMMD do
  begin
    if  Trim(DataSet.FieldByName('A001').AsString) IN [P1,P2,p3,p4,p5,p,6] then
    begin
      i :=0; p1:=''; p2:=''; p3:=''; p4:=''; p5:=''; p6:=''; p7 :='';
    end;
    if Active then Close;
    BOMMD.Parameters[0].Value := Trim(DataSet.FieldByName('A001').AsString);
    Active := True;
  end;
end;
错误提示:
[Error] Unit1.pas(106): Ordinal type required
[Error] Unit1.pas(106): Incompatible types: 'Integer' and 'String'
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'请问这句有什么问题:
IF Trim(DataSet.FieldByName('A001').AsString) IN [P1,P2,p3,p4,p5,p6] then
A001 为一字段名,CHAR(20)

解决方案 »

  1.   

    集合操作IN只能处理有序的数据类型如整型,char,但是 string是不可以处理的
      

  2.   

    集合操作in,只能是有序的数据类型,可以是integer,char,和有序数组。
      

  3.   

    这样吧,多写几句
    IF (Trim(DataSet.FieldByName('A001').AsString)=P1) or
       (Trim(DataSet.FieldByName('A001').AsString)=P2) or
       (Trim(DataSet.FieldByName('A001').AsString)=P3) or
       (Trim(DataSet.FieldByName('A001').AsString)=P4) or
       (Trim(DataSet.FieldByName('A001').AsString)=P5) or
       (Trim(DataSet.FieldByName('A001').AsString)=P6) then