比如下面这句:共有2个
  insert into User ( Name, Number ) values ( :Name1, :Number1 )

解决方案 »

  1.   

    循环用pos确定第一个:的位置,删除当前:计数。
      

  2.   

    function GetSubStrNum(Source: String; SubStr: String): Integer;
    var
      strTmp: String;
    begin
      strTmp := StringReplace(Source, subStr, '', [rfReplaceAll]);
      Result := (Length(Source) - Length(strTmp)) div Length(subStr);
    end;
      

  3.   

    for i := 1 to Length(str) do
      if str[i] = ':' then Inc(Count);Count就是':'的个数
      

  4.   

    其实我希望得到下面的结果:
    ------------------------------------------
      ADOQuery1.Active:=false;
      ADOQuery1.SQL.Clear;
      ADOQuery1.SQL.Add('insert into User ( Name, Number ) values ( :Name1, :Number1 ) ');
      ADOQuery1.Parameters.ParamByName('Name1').Value := '无能';
      ADOQuery1.Parameters.ParamByName('Number1').Value := '13124355645';  //这里TransSQL(SQL: string是我自己加的函数; 大家先不要管这里为什么要这样做(因为我不希望由Delphi自己做:号的解析)
      ADOQuery1.SQL := TransSQL(SQL: string);
      ADOQuery1.Open;
    -----------------------------------------
      //函数
      funciton TransSQL(SQL: string):string;
      begin
        //这里怎么做
      end;
    -----------------------------------------------------------------------------------------
    函数要完成的功能主要是,我根据ADOQuery1中的SQL值和传入的参数,自己完成转化:即在ADOQuery1.Open之前,将ADOQuery1.SQL的直接替换成下面的值:
        insert into User ( Name, Number ) values ( '无能', '13124355645' ) 
    然后在执行ADOQuery1.Open