前言: 问题可能出在query1.sql.add(strsql);  其中strsql是代表查询条件的变量
例如;strsql='select * from base_teacher where teacher_name='+L_teacher;
(L_teacher也是一个变量) 
????????????????????????????????????/////////////////////////////////////////////////////////////////////
procedure TForm8.Button1Click(Sender: TObject);
var strsql:string;
    l_teacher_no,l_teacher_name, l_teacher_job,l_dept_no:string;
begin
strsql:='select * from base_teacher';
l_teacher_no:=edit1.Text;
l_teacher_name:=edit2.Text;
l_teacher_job:=combobox1.Text;
with Form12.Table1 do
begin
  setkey;
  fieldbyname('dept_name').asstring:=combobox2.Text;
  if not gotokey then
      combobox2.Text:=''
  else
   l_dept_no:=fieldvalues['dept_no'];
end;
if (edit1.Text='')and (edit2.Text='')and(combobox1.Text='')and(combobox2.Text='') then
strsql:=strsql;
if edit1.Text<>'' then
  strsql:=strsql+'where teacher_no='+l_teacher_no
else
if edit2.Text<>'' then
begin
  strsql:=strsql+'where teacher_name like %'+l_teacher_name+'%';
  if combobox1.Text<>'' then
  begin
     strsql:=strsql+'and where teacher_job='+l_teacher_job;
     if combobox2.Text<>'' then
       strsql:=strsql+'and where dept_no='+l_dept_no;
  end;
end
else
  if combobox1.Text<>'' then
  begin
    strsql:=strsql+'where teacher_job='+l_teacher_job;
    if combobox2.Text<>'' then
      strsql:=strsql+'and where dept_no='+l_dept_no;
  end
  else
    strsql:=strsql+'where dept_no='+l_dept_no;query1.Close;
query1.SQL.Clear;
query1.sql.add(strsql);  //请看此处!!
query1.Prepare;
query1.open;
end;

解决方案 »

  1.   

    我的问题很可能出现在 query1.sql.add(strsql);  处  
    这样写是不是不合法
      

  2.   

    像这样的语句 strsql:=strsql+'where dept_no='+l_dept_no;
    我感觉是有问题的,我觉得很可能组合的语句之间是少了空格的原因
      

  3.   

    尽可能别用+连接字符串,
    推荐使用Format 或者 利用TQuery 支持的动态参数,动态参数非常好,除了能自动识别数据类型,它还能解决字符串里面带引号的问题,
      

  4.   

    strsql:=strsql+'where dept_no= '+l_dept_no;
      

  5.   

    是strsql='select * from base_teacher where teacher_name=:'+L_teacher吧??
      

  6.   

    其实你的其他语句没有错误,只有以下的语句有错误:
      strsql:=strsql+'where teacher_name like %'+l_teacher_name+'%';
    应该改为下面:
      strsql:=strsql+'where teacher_name like ''%'+l_teacher_name+'%''';
      

  7.   

    strsql='select * from base_teacher where teacher_name='''+L_teacher+''';
    這樣應該沒有問題 strsql:=strsql+'where teacher_name like ''%''+l_teacher_name+''%'' ';
    這樣應該沒有問題
      

  8.   

    1、注意关键字间一定要留空格;
    2、字符串类型的字段要注意,不能只用简单的一个';
    3、可以用ShowMessage显示出来看看,就能找到原因了。
    4、或者输出到一个Edit中,拷贝到数据库服务器中执行查询,也可以找到原因
      

  9.   

    例如 l_teacher_no,strsql 是变量  这样写对不?
    strsql:='select * from base_teacher '
    strsql:=strsql+'where teacher_no='+l_teacher_no;
      

  10.   

    strsql:=strsql+'where teacher_name like '+#39+'%'+l_teacher_name+'%'+#39
      

  11.   

    字符串代入SQL语句以后,一定要注意SQL语句中的单引号也要手工加进去.
      

  12.   

    quted(edit1.text)
    类似上面的语法,就自动加上了两边的单引号
      

  13.   

    strsql:=strsql+'where teacher_name like '+#39+'%'+l_teacher_name+'%'+#39
    #39是什么意思啊
      

  14.   

    字符串代入SQL语句以后,一定要注意SQL语句中的单引号也要手工加进去.
    能举个例子吗
      

  15.   

    //代码中分隔的地方注意加空格,不太清楚你的字段dept_no是文本型还是数值型,如果是文本型则前后加上#39,数值型则不加.
    with Form12.Table1 do
    begin
      setkey;
      fieldbyname('dept_name').asstring:=combobox2.Text;
      if not gotokey then
          combobox2.Text:=''
      else
       l_dept_no:=fieldvalues['dept_no'];
    end;
    if (edit1.Text='') and (edit2.Text='') and (combobox1.Text='')and(combobox2.Text='') then
    strsql:=strsql;
    if edit1.Text<>'' then
      strsql:=strsql+' where teacher_no='+#39+l_teacher_no+#39
    else
    if edit2.Text<>'' then
    begin
      strsql:=strsql+' where teacher_name like '+#39+'%'+l_teacher_name+'%'+#39;
      if combobox1.Text<>'' then
      begin
         strsql:=strsql+' and where teacher_job='+#39+l_teacher_job+#39;
         if combobox2.Text<>'' then
           strsql:=strsql+' and where dept_no='+#39+l_dept_no+#39;
      end
    end
    else
      if combobox1.Text<>'' then
      begin
        strsql:=strsql+' where teacher_job='+#39+l_teacher_job+#39;
        if combobox2.Text<>'' then
          strsql:=strsql+' and where dept_no='+#39+l_dept_no+#39;
      end
      else
        strsql:=strsql+' where dept_no='+#39+l_dept_no+#39;
      

  16.   

    strsql:=strsql+'where teacher_name like '+#39+'%'+l_teacher_name+'%'+#39strsql:=strsql+'where teacher_name like '''%'+l_teacher_name+'%''''strsql:=strsql+'where teacher_name like '+quedstr('%'+l_teacher_name+'%')三个写法功能应该是一样的吧!
      

  17.   

    改一下angle097113(深思不解) 的最后一个
    strsql:=strsql+'where teacher_name like '+QuotedStr('%'+l_teacher_name+'%')拼写错误罢了
      

  18.   

    strsql:=strsql+'where teacher_name like ''%'+l_teacher_name+'%''';
    你的单引号用的不对!把你的sql语句输出到一个文本文件中去再把它拿到查询分析器中去执行一下就知道哪里错了有机会去大富翁delphibbs.com