很简单吧!
首先对商品编码把每个字符串分解开来存在一个数组或者什么里面暂定是数组ShopArr中然后就对数据库操作
var
  iLoop : Integer;
begin
  with Query do  
  begin
    Close;
    SQL.Clear;
    SQL.Add('select 商品编号,商品名称,单价 from 商品表');
    SQL.Add('where 1 =1 ')
    for iLoop := Low(ShopArr) to High(ShopArr) do
    begin
      if iLoop = 0 then
        SQL.Add('and (商品编号 = '''+ShopArr[iLoop]+''')');
      else
        SQL.Add('or (商品编号 = '''+ShopArr[iLoop]+''')');  
    end;   
    Open;
  end;
end;//这样就可以了!字符串分解应该没什么问题吧! 代码没有经过测试,先试试看!

解决方案 »

  1.   

    谢谢
    1)首先对商品编码把每个字符串分解开来存在一个数组或者什么里面暂定是数组ShopArr中,
       
      把定单里的商品编码分解吗?怎么分解?
     能否在详细一点,我用的是ADO做的,俺是新手,谢谢   
      

  2.   

    分解的意思就是把1,2,3,4,5 用逗号区分把它存在一个数组中ShopArr[1,2,3,4,5] 
    注意ShopArr是个全局变量!
    给你个分解的过程不是最好的,但能用
    声明全局数组和过程
        ArrValue : Array of String;
        procedure MultiCount(sign : String; s : String);
    procedure TfrmQYFB.MultiCount(sign : String; s : String);
    var
      iStart,iEnd,sLeng,i,ArrayLeng : Integer;
      vArray : Array of Integer;
    begin
      sLeng := Length(s);
      setLength(vArray,sLeng);
      ArrayLeng := 0;
      for i := 0 to sLeng do
      begin
        if Copy(s,i,1) = sign then
        begin
          vArray[Arrayleng] := i;
          ArrayLeng := ArrayLeng + 1;
        end;
      end;
      i := pos(sign,s);
      vArray[ArrayLeng] := sLeng+1;
      setLength(ShopArr,ArrayLeng);
      sLeng := ArrayLeng - 1;
      iStart := 1;
      iEnd := i -1;
      ArrayLeng := 0;
      for i :=0 to sLeng do
      begin
        ShopArr[ArrayLeng] := Copy(s,iStart,iEnd);
        ArrayLeng := ArrayLeng + 1;
        iStart := vArray[i]+1;
        iEnd := vArray[i+1]-iStart;
      end;
    end;// 调用时参数为 MultiCount(',',query.FieldByName('商品名称').AsString);