在 文本框输入日期 输出所要查找的资料 我这样写正确么begin
  if edit1.text='' then
  begin
    showmessage('not null');
    abort;
  end;  with ADOQuery1 do
  begin
    sql.Clear;
    sql.Add('DELETE NK_ZLC..TEMP_KQ '+
             'INSERT INTO NK_ZLC..TEMP_KQ '+
             'SELECT W.MB001 FROM WAY2006..YAMMB W   '+
             'RIGHT JOIN  NK_ZLC..TEMP U ON W.MB001=U.MV001 '+
             'WHERE MB002='+''''+TRIM(EDIT1.TEXT)+'%'+'''  '+             'DELETE NK_ZLC..TEMP_3  '+
             'INSERT NK_ZLC..TEMP_3  '+
             'SELECT M.MV001 FROM NK_ZLC..TEMP M '+
             'LEFT JOIN NK_ZLC..TEMP_KQ T ON M.MV001=T.MB001 '+
             'WHERE MB001 IS NULL '+            'SELECT MT001,MV002,ME002 FROM NK_ZLC..TEMP_3 '+
            'LEFT JOIN WAY2006..CMSMV ON MT001=MV001 '+
            'LEFT JOIN WAY2006..CMSME ON ME001=MV004 '+
            'ORDER BY ME002 ASC');
    open
  end
end;

解决方案 »

  1.   

    有问题吧.
    'INSERT NK_ZLC..TEMP_3  '+ 这里就不对
    还有,你这里,有delete,有insert的,还有查询的用open不对吧.
    对于delete,insert应该用execsql,select的用open.
      

  2.   

    delete,insert分开写,或者用存储过程。代码可读性差了点
      

  3.   


    if trim(edit1.text)<>'' then begin
      with ADOQuery1 do begin
         close;
         sql.text:='DELETE NK_ZLC..TEMP_KQ';
         ExecSQL;
         sql.text:=''DELETE NK_ZLC..TEMP_3';
         ExecSQL;
         sql.text:='INSERT INTO NK_ZLC..TEMP_KQ(你的字段名) '+ 
                 'SELECT W.MB001 FROM WAY2006..YAMMB W '+ 
                 'RIGHT JOIN  NK_ZLC..TEMP U ON W.MB001=U.MV001 '+ 
                 'WHERE MB002='+QuotedStr(edit1.text);
        ExecSQL;{不会返回数据集的用EXECSqL}
        sql.text:='INSERT NK_ZLC..TEMP_3(你的字段名)  '+ 
                 'SELECT M.MV001 FROM NK_ZLC..TEMP M '+ 
                 'LEFT JOIN NK_ZLC..TEMP_KQ T ON M.MV001=T.MB001 '+ 
                 'WHERE MB001 IS NULL ';
        Execsql;
        sql.text:='SELECT MT001,MV002,ME002 FROM NK_ZLC..TEMP_3 '+ 
                'LEFT JOIN WAY2006..CMSMV ON MT001=MV001 '+ 
                'LEFT JOIN WAY2006..CMSME ON ME001=MV004 '+ 
                'ORDER BY ME002 ASC';
        open;{有返回数据集的用OPEN}    
        
       end;
    end else
     showmessage('not null'); 
      

  4.   

    修正一下:if trim(edit1.text)<>'' then begin
      with ADOQuery1 do begin
         close;
         sql.text:='DELETE NK_ZLC..TEMP_KQ';
         ExecSQL;
         sql.text:='DELETE NK_ZLC..TEMP_3';
         ExecSQL;
         sql.text:='INSERT INTO NK_ZLC..TEMP_KQ(你的字段名) '+ 
                 'SELECT W.MB001 FROM WAY2006..YAMMB W '+ 
                 'RIGHT JOIN  NK_ZLC..TEMP U ON W.MB001=U.MV001 '+ 
                 'WHERE MB002='+QuotedStr(edit1.text);
        ExecSQL;{不会返回数据集的用EXECSqL}
        sql.text:='INSERT NK_ZLC..TEMP_3(你的字段名)  '+ 
                 'SELECT M.MV001 FROM NK_ZLC..TEMP M '+ 
                 'LEFT JOIN NK_ZLC..TEMP_KQ T ON M.MV001=T.MB001 '+ 
                 'WHERE MB001 IS NULL ';
        Execsql;
        sql.text:='SELECT MT001,MV002,ME002 FROM NK_ZLC..TEMP_3 '+ 
                'LEFT JOIN WAY2006..CMSMV ON MT001=MV001 '+ 
                'LEFT JOIN WAY2006..CMSME ON ME001=MV004 '+ 
                'ORDER BY ME002 ASC';
        open;{有返回数据集的用OPEN}  end;
    end else
     showmessage('not null'); 
      

  5.   

    基本上是这样,如果SQL语句不行,请你在SQL查询分析器调试好,再套入DELPHI