select * from A
得到:select部分、字段部分、from部分和where部分。
如果是复杂的如:select * from a left join (select bb from b where a.aa='a') on a.aa=b.bb
怎么获取from 部分呀,应该是:a left join (select bb from b where a.aa='a') on a.aa=b.bb不知道怎么实现?急。

解决方案 »

  1.   

    字符串分析?用Copy 和 Pos 这两个函数可以吗?query1.SQL.Text := 'select * from a left join (select bb from b where a.aa=''a'') on a.aa=b.bb';
    var
      S, S2 : string;
    begin
      S := LowerCase(Query1.SQL.Text);
      S2 := Copy(S, Pos('from',S)+5, MaxInt);
      ShowMessage(S2);
    end;
      

  2.   

    对。在写入SQL语句时可以分行写,这样,就便于把各部分取出来了。  with Query1.SQL do
        begin
        Clear;
        Add('select * ');
        Add('from table ');
        Add('where 1=1');
        Add('order by ID desc');
        end;
    有取出某部分的需要时:(下面是取出每一部分)procedure TForm1.Button1Click(Sender: TObject);
    var
      I : integer;
    begin
      for I := 0 to Query1.SQL.Count-1 do
        ShowMessage(Query1.SQL[I]);
    end;
      

  3.   

    我要对SQL语句重新组合,可惜搞不定。
      

  4.   

    重新组合?是这个意思吗:function SQLStr(const SelectStr, FromStr, WhereStr : string): string;
    begin
      Result := Format('select %s from %s where %s',[SelectStr, FromStr, WhereStr]);
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      S : string;
    begin
      S := SQLStr('*', 'table', '1=1');
      ShowMessage(S);
    end;
      

  5.   

    自己编写Parser,需要编写一个栈结构当遇到join的时候压栈,join结束则弹栈。这样可以嵌套join。
      

  6.   

    个人觉得构造SQL字符串。就可以使用+操作符,直接加不就好了
      

  7.   

    赞成lihuasoft(一九七五)(::我业余,所说仅供参考)兄写的