fcode='aaa' and fname='张三'....可能有多个条件组合,我想转成下面的格式。a.fcode='aaa' and a.fname='张三'

解决方案 »

  1.   

    fcode=:fname 
    fname=:'aaa'
      

  2.   

    procedure TForm1.FormCreate(Sender: TObject);
    var
      S, S2: string;
      N: Integer;
      B: Boolean;
    begin
      S := 'fcode=''aaa'' and fname=''张三'' or fss=''ddljf''';
      S2 := '';  repeat
        N := Pos('and ', S);
        if N = 0 then
        begin
          N := Pos('or ', S);
          if N = 0 then Break else
          begin
            B := False;
            S2 := S2 + 'a.' + Trim(Copy(S, 1, N - 1)) + ' or ';
            Delete(S, 1, N + 2);
          end
        end
        else
        begin
          B := True;
          S2 := S2 + 'a.' + Trim(Copy(S, 1, N - 1)) + ' and ';
          Delete(S, 1, N + 3);
        end
      until False;  S2 := S2 + 'a.' + Trim(S);  ShowMessage(S2);
    end;
      

  3.   

    这问题怎么感觉和字符串一毛钱关系也没有?
    实例化一个类a a.fcode='aaa' and a.fname='张三'
      

  4.   

    fcode='aaa' and fname='张三'....可能有多个条件组合,我想转成下面的格式。a.fcode='aaa' and a.fname='张三'stringreplace文本替换不行?
      

  5.   

    楼主的意思是要在查询语句里面的字段名前面加上表的别名。
    ......
    function Test(ABM:string;AStr:string):string;
    //ABM表示别名
    var
      i,iLen,k,j,iLen2:Integer;
    begin
      iLen:=length(AStr);
      iLen2:=length(ABM+'.');
      k:=1;
      i:=1;
      while i<=iLen do
      begin
        if AStr[i]='=' then
        begin
          for j:=i-1 downto k do
            if (AStr[j]=' ') or (j=1) then
            begin
              if j>1 then
                Insert(ABM+'.',AStr,j+1)
              else
                Insert(ABM+'.',AStr,j);          inc(i,iLen2);
              inc(iLen,iLen2);
              k:=i+1;
              break;
            end;
        end;    inc(i);
      end;  result:=AStr;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      edit1.Text:='fcode=''aaa'' and fname=''张三''';
      edit2.Text:=Test('a',edit1.Text);
    end;