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 ';
将
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脚本文件
在处理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命令未正确结束。麻烦高手帮我看看,谢谢……的主要内容,如果未能解决你的问题,请参考以下文章