var str:string;
begin
str:='select * from stu where';
if edit1.Text<>'' then
begin
  str:=str+'s_id like '''+edit1.Text+'''';
end;
if edit2.Text <>'' then
 begin
  str:=str+'and s_name like '''+edit2.Text+'''';
 end;  adoquery1.Close ;
  adoquery1.SQL.Clear ;
 // adoquery1.SQL.Add('select * from stu where s_id like '''+edit1.Text+'''');
    adoquery1.SQL.Add(str);
  adoquery1.Open ;
提示from子句出现错误,晕,这个错在哪里啊

解决方案 »

  1.   

    如果你的两个Edit都为空,那SQL就错了...where后面没有条件跟随...
      

  2.   

    楼上的正解,所以如果你要写的话,改成下面的会好点:var str:string;
    begin
    str:='select * from stu ';
    if edit1.Text<>'' then
    begin
      str:=str+'where s_id like '''+edit1.Text+'''';
    end;
    if edit2.Text <>'' then
     begin
      str:=str+'and s_name like '''+edit2.Text+'''';
     end;  adoquery1.Close ;
      adoquery1.SQL.Clear ;
     // adoquery1.SQL.Add('select * from stu where s_id like '''+edit1.Text+'''');
        adoquery1.SQL.Add(str);
      adoquery1.Open ;
      

  3.   

    如果Edit1为空,Edit2不为空,变成没有 where 只有 and 的条件var str:string;  Tmp:boolean;
    begin
    str:='select * from stu';
    if edit1.Text<>'' then
    begin
      str:=str+'  where s_id like '''+edit1.Text+'''';
      Tmp:=true;
    end
    else Tmp:=false;
    if edit2.Text <>'' then 
    begin
     if Tmp then str:=str+'  and' 
     else str:=str+'  where';
       str:=str+' s_name like '''+edit2.Text+'''';
    end;  adoquery1.Close ;
      adoquery1.SQL.Clear ;
     // adoquery1.SQL.Add('select * from stu where s_id like '''+edit1.Text+'''');
        adoquery1.SQL.Add(str);
      adoquery1.Open ;
      

  4.   

    再说这样的句子啊,可以用中断看一下最后的SQL语句是什么,再查一下程序就知道了
      

  5.   

    关于   如果Edit1为空,Edit2不为空,变成没有 where 只有 and 的条件
    这个问题,可以用if来解决的,现在问题是两个edit都不是空的也会出现问题,我发现delphi中的"""号好象很复杂,
      

  6.   

    adoquery1.Close ;
      adoquery1.SQL.Clear ;adoquery1.SQL.Add('select * from stu');
    if edit1.Text <>'' then
    begin
        adoquery1.SQL.Add('where S_ID like '''+edit1.Text+'''');
    end;
    if edit2.Text <>'' then
     begin
        adoquery1.SQL.Add('and S_NAME like '''+edit2.text+'''');
     end
      else  begin
       adoquery1.SQL.Add('where S_NAME like '''+edit2.Text+'''');
       end;
      adoquery1.Open ;
    我是这样控制的,可是要出错,5555555,高手门指点下啊
      

  7.   

    先写成where 1=1,给一个真的条件再继续and ....
      

  8.   

    楼上的正解.你的条件会产生where直接跟and
    但edit为空,edit2不空的时候就变成
    select * from stu where and s_name like ...了
    所以还是用str='select * from stu where 1=1'然后在if条件成立时加and语句
      

  9.   

    var str:string;
    begin
    str:='';
    if edit1.Text<>'' then
    begin
      str:=str+'and where s_id like '''+edit1.Text+'''';
    end;
    if edit2.Text <>'' then
     begin
      str:=str+'and s_name like '''+edit2.Text+'''';
     end;  adoquery1.Close ;
      adoquery1.SQL.Clear ;
     adoquery1.sql.text:='select * from stu where 1=1'+str;
      adoquery1.Open ;
      

  10.   

    这个问题太简单了,先在str:='select * from stu where';这里随便加个where条件,这样下面的edit不管是否空,都不会出现这个问题了。比如:str:='select * from stu where  s_id <>'0' ';下面的全部用 and ....if Trim(edit1.text)<>'' thenstr:=str +' and s_id like '''+Trim(edit1.text)+'%'' ';if Trim(edit2.text)<>'' thenstr:=str +' and s_name like '''+Trim(edit2.text)+'%'' ';
    指出你的 一点错误,用like 的时候,少不了%号
      

  11.   

    str:='select * from stu where 2>1 ';str:=str+' and where s_id like '''+edit1.Text+'''';.....
      

  12.   

    if Trim(edit1.text)<>'' thenstr:=str +' and s_id like '%''+Trim(edit1.text)+'%'' ';if Trim(edit2.text)<>'' thenstr:=str +' and s_name like '%''+Trim(edit2.text)+'%'' ';