qq_18408527
小乙2018
采纳率0%
2018-05-31 13:38

SQL查询语句提示”语法错误(操作符丢失)在查询语句Where....中,愁死了,请大师帮忙!

20
  • delphi7 安装步骤

delphi 7 使用ODBC连接DBF数据库,用ADOQuery 查询一直提示如标题的错误,愁死啦,代码如下:
with DM1.ADOTable95 DO
BEGIN
close;
Tablename:='汉字95列标准库.dbf';
Open;
for t:=0 to 77 do
begin
oldf:=Fields[t].fieldname;
s951:=s951+','+oldf;
end;
for t:=78 to 94 do
begin
oldf:=Fields[t].fieldname;
s952:=s952+','+oldf;
end;
s952:='林场,村,林班号,小班号'+s952;

s951:=copy(s951,2,length(s951)-1)+',NFID';

s952:=copy(s952,2,length(s952)-1);

END;//END95Table;
ss1:='Insert into 汉字95列标准库('+s952+') select '+s39+' from '+y+char(32)+'';
ss2:='where ('+y+'.林班 =汉字95列标准库.林班号) and ('+y+'.小班 =汉字95列标准库.小班号)';
with DM1.ADOQuery DO
BEGIN
{ Close;
Sql.Clear;
Sql.Add('insert into 汉字95列标准库('+s951+') select '+s81+' from '+fs+';');

ExecSQL;
}
Close;
Sql.Clear;
Sql.Add(ss1);
Sql.Add(ss2);
Prepared;
ExecSQL;
Showmessage('39列数据输入95库!');

END;//结束SQL

DM1.ADOTable95.Close;
DM1.ADOTable95.Open;

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

11条回答

  • fsy351 fsy351 3年前

    主要是拼接sql错误吧,

    接时候值为字符串是要单引号的
    另外有的数据库执行识别sql文件编码
    还有有的数据库字段要加定界符的

    排除这三点很重要

    点赞 1 评论 复制链接分享
  • qq_36764463 EnticE* 3年前

    建议:
    1、监控SQL语句,看看哪里出现问题;断点看下最后的sql到底是什么样子就知道了,另外你可以把这段sql放在查询分析器下面让他帮你检查下语法。
    2、有条件的话,将监控的值放到MS-SQLserver中执行以下,错误就知道在哪里了。
    3、可以的话不要用这种拼接方式,很容易出错而且不好调试。建议使用SQL自带的parma来添加参数
    4、由于这种拼接方式是将所有字段作为字符串处理,因此遇到日期型和数值型的数据的时候会很麻烦,尤其是日期型数据。

    点赞 1 评论 复制链接分享
  • devmiao devmiao 3年前
    点赞 1 评论 复制链接分享
  • qq_18408527 小乙2018 3年前

    问题就出在where条件语句(ss2)里,头一条(ss1)不加条件运行通过了,就是不知道语法错在哪,哪个字符没加,还是输入问题

    点赞 1 评论 复制链接分享
  • qq_18408527 小乙2018 3年前

    真心谢谢各位大侠的热心帮助!

    点赞 评论 复制链接分享
  • qq_18408527 小乙2018 3年前

    哈哈,问题解决了,还是定界符问题

    点赞 评论 复制链接分享
  • qq_18408527 小乙2018 3年前

    我用ODBC数据源连接的DBF数据库,发现很多SQL执行语句都类似用ACESS数据库,经过加单引号测试,不提示操作符丢失了,但是老是提示“COUNT字段不正确呢?

    点赞 评论 复制链接分享
  • SUNNYfc SUNNYfc 3年前

    在with DM1.ADOQuery DO之前加一句显示ss2的语句,看一下SQL是不是对的

    点赞 评论 复制链接分享
  • CreazyMa CreazyMa 3年前

    建议你将:ss1:='Insert into 汉字95列标准库('+s952+') select '+s39+' from '+y+char(32)+'';
    ss2:='where ('+y+'.林班 =汉字95列标准库.林班号) and ('+y+'.小班 =汉字95列标准库.小班号)';这两个语句合并,然后在数据库中尝试 ,
    如果语句没问题,数据成功插入数据库,可以试着将这个sql语句连起来用,不分开试试,自定义的查询条件可能需要双重单引号引起来。

    点赞 评论 复制链接分享
  • qinwanpeng1122 qinwanpeng1122 3年前

    在数据库中debug一步一步走着看呀

    点赞 评论 复制链接分享
  • qq_18408527 小乙2018 3年前

    运行了,加括号,单,双引号都加了,各种试,都不行,啊啊

    点赞 评论 复制链接分享