delphi中执行如下代码,提示:delphi中sql命令未正确结束。麻烦高手帮我看看,谢谢……

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi中执行如下代码,提示:delphi中sql命令未正确结束。麻烦高手帮我看看,谢谢……相关的知识,希望对你有一定的参考价值。

procedure TForm1.Button1Click(Sender: TObject);
var
s:string;
begin
s:='select '+
'task_no , '+
'barcode_zcb ,'+
'c_item_code , '+
'element_pos , '+
'customer_item_no , '+
'repair_state , '+
'proc_no , '+
'repair_item , '+
'repair_com_by , '+
'repair_com_date ,'+
'judge ,'+
'onceok ,'+
'totallrepair ,'+
'success '+
'from SMT_BGA_WEIXIU '+
'where judge in(''BG误判'',''FT误判'') ';
if trim(edit1.Text)<>'' then
s:=s+'and repair_com_by='''+edit1.text +'''';
if trim(ComboBox1.Text)<>'' then
s:=s+'and proc_no='''+ComboBox1.text +'''';
if datetostr(datetimepicker1.DateTime)<>'' then
s:=s+ 'and repair_com_date between To_Date(''' + DateToStr(datetimepicker1.DateTime) + ''',''yy-mm-dd'') '+
'and To_Date(''' + DateToStr(datetimepicker2.DateTime+1) + ''',''yy-mm-dd'') '+
'order by repair_com_date desc ';

(1)

s:=s+\'and repair_com_by=\'\'\'+edit1.text +\'\'\'\';

改成
s:=s+\' and repair_com_by=\'\'\'+edit1.text +\'\'\' \';
(2)

s:=s+\'and proc_no=\'\'\'+ComboBox1.text +\'\'\'\';
改成
s:=s+\' and proc_no=\'\'\'+ComboBox1.text +\'\'\' \';
(3)

s:=s+ \'and repair_com_date between To_Date(\'\'\' + DateToStr(datetimepicker1.DateTime) + \'\'\',\'\'yy-mm-dd\'\') \'+
\'and To_Date(\'\'\' + DateToStr(datetimepicker2.DateTime+1) + \'\'\',\'\'yy-mm-dd\'\') \'+
\'order by repair_com_date desc \';
改成
s:=s+ \' and repair_com_date between To_Date(\'\'\' + DateToStr(datetimepicker1.DateTime) + \'\'\',\'\'yy-mm-dd\'\') \'+
\' and To_Date(\'\'\' + DateToStr(datetimepicker2.DateTime+1) + \'\'\',\'\'yy-mm-dd\'\') \'+
\' order by repair_com_date desc \';

以上就可以了 ,都是你and 和前一句之间没有空格分开
还有就是,这种类似问题别提问了,做程序要知道调试
你在运行的时候,提取S出来,看看S到底是什么东西,就知道SQL语句错在哪里了
你可以这样做,在S赋值之后,执行S语句之前,设置一个断点,然后按出ctrl,用鼠标点击s,就弹出一个框框,就是S赋值的值,将其复制出来,看看哪里出问题了
参考技术A 加一个输出显示,容易找出错误
showmessage(adoquery1.sql.text);

在执行open或execsql之前加,你这样看是看不出来的
参考技术B s:=s+'and repair_com_by='''+edit1.text +'''';
s:=s+'and proc_no='''+ComboBox1.text +'''';
这两句,还有后面的语句,后面没有加空格吧?
参考技术C 任务

Delphi 7 在程序中直接执行SQL脚本文件

Delphi 7 在程序中直接执行SQL脚本文件

 

在处理MSDE一些操作中。需要执行一些SQL脚本。有的是从
SQLServer 2000中生成的SQL为后缀的脚本。在MSDE中没有企业管理器,
操作都是在程序中完成的。所以用以下函数来执行SQL脚本。

//执行一个SQL角本文件,文件只能是ANSI编码的。
//如果文件是UNICODE编码的话,则会乱码。
var
  s:string;
  sqltext : string;
  sqlfile : TextFile;
begin
  if OpenDialog1.Execute then
  begin
    AssignFile(sqlfile, OpenDialog1.FileName);
    FileMode := 0;
    Reset(sqlfile);
    try
      ADOConnection1.BeginTrans;
      while not eof(sqlfile) do
      begin
        Readln(sqlfile, s);
        sqltext:=s;
        while (not eof(sqlfile)) and 
        (uppercase(trim(s))<>‘GO‘) do
        begin
          Readln(sqlfile, s);
          if (uppercase(trim(s))<>‘GO‘) then
            sqltext:=sqltext+‘ ‘+s;
        end;
        adoquery1.Close;
        adoquery1.SQL.Clear;
        adoquery1.SQL.Add(sqltext);
        adoquery1.ExecSQL;
      end;
      CloseFile(sqlfile);
      ADOConnection1.CommitTrans;
      application.MessageBox(‘SQL角本完成!‘,
        ‘提示‘,MB_OK+MB_ICONINFORMATION);
    except
      raise exception.Create(‘SQL角本执行失败!‘);
      ADOConnection1.RollbackTrans;
    end;
  end;
end;

其中:ADOConnection1,adoquery1,OpenDialog1都是窗口中放置的控件。可以将之设为局部变量,在本函数内创建和消毁。

 

以上是关于delphi中执行如下代码,提示:delphi中sql命令未正确结束。麻烦高手帮我看看,谢谢……的主要内容,如果未能解决你的问题,请参考以下文章

怎么在DELPHI程序中执行DOS命令

delphi的简单代码

如何在delphi7中,测试一段代码的执行时间?

delphi7 环境,如何自动提示代码

请解释下面delphi代码每句的含义

delphi中组合键代码