我从客户端动态收到一个字符串,如‘1’,‘2’,‘33’……
收到后我要用sql语句查询:
select num from biao where id in (1,2,33)//大概就是这样的格式。
我要怎么转化一下?需要用到数组吗?另外,我要把查出来的num再转换成如:‘11’,‘22’,‘333’的这中格式。要怎么做?或者哪位大虾能给个更好的建议,我这样做主要是因为数据传输的格式是‘’,‘’的。

解决方案 »

  1.   

    str:=StringReplace(‘1’,‘2’,‘33’,'’','',[rfReplaceAll]);
    str:=StringReplace(‘1’,‘2’,‘33’,'‘','',[rfReplaceAll]);
    'select num from biao where id in ('+str+')' ;
      

  2.   

    var
      s:string;
      i:integer;
    begin
      s = '1,2,33';
      while Pos(',',s) > 0 do
      begin
         i := Pos(',',s);
         s[i] := ',';
      end;
    end;后面也是一样的转换,注意全角与半角的区分
      

  3.   

    哦,sorry,全都是',是我写错了。
      

  4.   

    function StringReplace(const S, OldPattern, NewPattern: string; Flags: TReplaceFlags): string
    也可以用Pos+循环来实现
      

  5.   

    这样:我收到字符串,显示到eidt中是:1,2,3,……
    我想查询:SELECT NUM FROM BIAO WHERE ID IN (1,2,3)
    再把查出来的num做成一个字符串,如111,222,333,发送出去。网络通信中我每次发送的如:1,2,……到几千呢,这样直接传字符串不好吧,求大虾们指点。
      

  6.   

    var
     str : string;begin
      str:=StringReplace(''1','2','33'',',',',',[rfReplaceAll]);
      str:=StringReplace(''1','2','33'',',',',',[rfReplaceAll]);
      'select num from biao where id in ('+str+')' ;
    end;注意全角与半角的区分
      

  7.   

    谢谢。
    可我显示的时候:
      edit2.Text:= FReceived;
      with adoquery1 do
      begin
        sql.Clear;
        sql.Add('select m_num from shouji where id in '+'('+edit2.Text+')');
        open;
      end;
      while not eof do
       s:=s+','+adoquery1.FieldValues['m_num'];
      next;
      edit3.Text:=s;
      end;
    我想edit3显示最终的s,可提示错误,怎么回事?
      

  8.   

    sql.Add('select m_num from shouji where id in '+'('+edit2.Text+')');
    showmessage(sql.text);显示一下,你的SQL。TEXT
        open;
    select m_num from shouji where id in ('11','33')如果显示这样就对了,不是你可以再改改 
      

  9.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        procedure SeparateTerms(s : string;Separator : char;Terms : TStringList);
        function DeleteSubStr(S, SubStr: String): String;
      end;var
      Form1: TForm1;implementation{$R *.dfm}
    procedure TForm1.SeparateTerms(s : string;Separator : char;Terms : TStringList);
    { This browses a string and divide it into terms whenever the given
      separator is found. The separators will be removed }
      var
      hs : string;
      p : integer;begin
      Terms.Clear; // First remove all remaining terms
      if Length(s)=0 then   // Nothin' to separate
        Exit;
      p:=Pos(Separator,s);
      while P<>0 do
      begin
        hs:=Copy(s,1,p-1);   // Copy term
        Terms.Add(hs);       // Add to list
        Delete(s,1,p);       // Remove term and separator
        p:=Pos(Separator,s); // Search next separator
      end;
      if Length(s)>0 then
        Terms.Add(s);        // Add remaining term
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      s:string;
      sl:Tstringlist;
      i:integer;
    begin
      sl:=Tstringlist.Create;
      s:='''1'',''2'',''3''';
      s:=DeleteSubStr(s,'''');
      SeparateTerms(s,',',sl);
      for i:=0 to sl.Count-1 do
        showmessage(sl[i]);
    end;//删除字符串S中的子串SubStrfunction TForm1.DeleteSubStr(S, SubStr: String): String;beginwhile Pos(SubStr, S) <> 0 doDelete(S, Pos(SubStr, S), Length(SubStr));Result := S;end;end.
      

  10.   

    一个函数:DeleteSubStr(S, SubStr: String)
    作用是在一个字符串中删除某个子串,目的是把‘1’,‘2’,‘33’变成1,2,3
    一个过程:SeparateTerms(s : string;Separator : char;Terms : TStringList);
    作用是在字符串中用某个字符分成若干段,返回一个TStringlist,目的是把1,2,3变成
    sl[0]:=1,sl[1]:=2,sl[0]:=3
    然后你再用StrToInt(sl[i])不就行了吗?
      

  11.   

    楼上这位好厉害,小子刚刚学习 delphi 
    能不能介绍几本入门的书籍来看看
      

  12.   

    你要是刚学的话先找一本入门级的书看一看,这样的书很多,然后你看一看《delphi6开发人员指南》这本书很好。