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;
运行了,加括号,单,双引号都加了,各种试,都不行,啊啊
问题就出在where条件语句(ss2)里,头一条(ss1)不加条件运行通过了,就是不知道语法错在哪,哪个字符没加,还是输入问题
https://www.cnblogs.com/wxl845235800/p/7568418.html
建议:
1、监控SQL语句,看看哪里出现问题;断点看下最后的sql到底是什么样子就知道了,另外你可以把这段sql放在查询分析器下面让他帮你检查下语法。
2、有条件的话,将监控的值放到MS-SQLserver中执行以下,错误就知道在哪里了。
3、可以的话不要用这种拼接方式,很容易出错而且不好调试。建议使用SQL自带的parma来添加参数
4、由于这种拼接方式是将所有字段作为字符串处理,因此遇到日期型和数值型的数据的时候会很麻烦,尤其是日期型数据。
在数据库中debug一步一步走着看呀
建议你将:ss1:='Insert into 汉字95列标准库('+s952+') select '+s39+' from '+y+char(32)+'';
ss2:='where ('+y+'.林班 =汉字95列标准库.林班号) and ('+y+'.小班 =汉字95列标准库.小班号)';这两个语句合并,然后在数据库中尝试 ,
如果语句没问题,数据成功插入数据库,可以试着将这个sql语句连起来用,不分开试试,自定义的查询条件可能需要双重单引号引起来。
在with DM1.ADOQuery DO之前加一句显示ss2的语句,看一下SQL是不是对的
主要是拼接sql错误吧,
接时候值为字符串是要单引号的
另外有的数据库执行识别sql文件编码
还有有的数据库字段要加定界符的
排除这三点很重要
我用ODBC数据源连接的DBF数据库,发现很多SQL执行语句都类似用ACESS数据库,经过加单引号测试,不提示操作符丢失了,但是老是提示“COUNT字段不正确呢?
哈哈,问题解决了,还是定界符问题
真心谢谢各位大侠的热心帮助!