主要代码:
procedure TForm2.BitBtn1Click(Sender: TObject);
Var
  s1,s2:String;     
   i:integer;  
begin
          s1:= '';
          for i := 0 to ListBox2.Items.Count - 1 do
           begin
              if s1 = '' then
                 begin
                 s1 := QuotedStr(Trim(ListBox2.Items[i]));
                 s2 :='  And  (TA021 = '+s1+')';
                 end
              else
                 begin
                 s1 :='('+ s1 + ',' + QuotedStr(Trim(ListBox2.Items[i]))+')';
                 s2 :='  And  (TA021 in '+s1+')';
                 end;
           end;
end;最后执行一个查询语句,其中'select * from A where (TA001=''Y'') + s2'
ListBox2.Items可允许为0001,0002,0003,0004等值,但当为0003时,则没有什么信息.
1、当ListBox2.Items只有0001时可以查出相应的值,只有0002时可以查出相应的值,只有0003时则返回结果为空,只有0004时可以查出相应的值;
2、当ListBox2.Items有0001,0002,0004时可以查出相应的值
3、关键是当ListBox2.Items有0001,0002,0003,0004时,当包含有0003时,程序则提示','附近有错误,请问这是什么原因?

解决方案 »

  1.   

    标点符号的问题吧
    跟踪一下SQL语句,放到查询分析器执行看看具体是哪写错了
      

  2.   

    如果符号有问题,那第2点就不成立了!如果0003有问题,那第1点的红色处也不成立了!我用相同代码在SQL查询分析器里是没问题的,是不是Delphi在编译时与SQL有什么不同?
      

  3.   

    这种最好的办法就是查看下最后的 sql.text 是什么 然后在 查询分析器里 执行 看结果
      

  4.   


    procedure TForm1.Button1Click(Sender: TObject);
    var
    s,sqlstr:string;
    i:integer;
    begin
     sqlstr:='select * from A where (TA001=''Y'') and TA021 in(';
     s:='';
     for i :=0  to ListBox1.Items.Count-1 do begin
      s:=s+QuotedStr(ListBox1.Items.Strings[i])+',';
     end;
     s:=copy(s,1,length(s)-1);
     sqlstr:=sqlstr+s+')'; with adoquery1 do begin
      close;
      sql.Text:=sqlstr;
      open;
     end;end;
      

  5.   

    谢谢shuihan20e的关注,问题解决了!