读书人

adoquery3查询数据循环安插adoquery1里

发布时间: 2012-12-14 10:33:08 作者: rapoo

adoquery3查询数据循环插入adoquery1里面
adoquery1总共有6个字段'a','b','c','d','e','f',adoquery3先用select h from table,有字段h,怎么把adoquery3查询的数据插入adoquery1的a里面啊,然后b,c,d,e,f字段都为0!求教,谢谢啊
[最优解释]
var
h: string;
begin
with adoquery3 do
begin
close;
sql.clear;
sql.add('select h from table');
open;
while not eof do
begin
h := FieldByName('h').AsString;
with adoquery1 do
begin
close;
sql.clear;
sql.add('insert into table2(a,b,c,d,e,f) values ('''
+ h ''', 0,0,0,0,0)');
ExecSql;
end;
Next;
end;
end;
end;
[其他解释]
你跟踪程序是在执行插入的时候报错吗?如果是看一下数据库字段的类型之类,大小,是否为空等项。
还有就是with这个东西少用,尤其是这种嵌套使用,很有可能出错,你最好是把这个去掉试试!
[其他解释]

引用:
var
h: string;
begin
with adoquery3 do
begin
close;
sql.clear;
sql.add('select h from table');
open;
while not eof do
begin
h := FieldByName……

运行的时候显示不正常的定义参数对象,提供了不一致或者不完整的信息!将将adoquery 的 ParamCheck设置为 false后还有问题,怎么回事呢。

[其他解释]
sql.add('insert into table2(a,b,c,d,e,f) values ('''
+ h + ''', 0,0,0,0,0)');

[其他解释]
这个我知道的,我已经添加了,之前我自己也试过,就是插入的时候出现‘不正常的定义参数对象,提供了不一致或者不完整的信息’将adoquery 的 ParamCheck设置为 false后提示不是可以识别的 OPTIMIZER LOCK HINTS 选项
[其他解释]
引用:
sql.add('insert into table2(a,b,c,d,e,f) values ('''
+ h + ''', 0,0,0,0,0)');
begin
with adoquery3 do
begin
close;
sql.clear;
adoquery3.SQL.Text:='select distinct '
+'n.remote_id from user_data as m inner join readdata as n on m.'
+'remote_id=n.remote_id and m.selinfo='''+h+''''
+' where m.remote_id not in(select e.remote_id from readdata as e inner join'
+'(select distinct a.xiaoqu_name ,a.remote_id as remote_id,max(b.readtime)'


+' as readtime from user_data as a inner join readdata as b on a.remote_id=b.remote_id'
+' and a.selinfo='''+h+''' and b. readtime>'''+s1+''' and b.readtime < '''+s2+''''
+'group by a.xiaoqu_name,a.remote_id ) as f on e.remote_id=f.remote_id '
+'and e.readtime=f.readtime ) order by n.remote_id' ;
open;
while not eof do
begin
u := FieldByName('remote_id').AsString;
with adoquery1 do
begin
close;
sql.clear;
sql.add('insert into export(id,nf,yf,byds,sgds,bj) values ('''
+ u +''', 0,0,0,0,0)');
ExecSql;
end;
Next;
end;
end;
end;

完整的代码
[其他解释]
二楼的写法是对的,如果你的b,c,d,e,f是字符型,那么在插入时应该加两个引号,如下:
sql.add('insert into table2(a,b,c,d,e,f) values ('''
+ h + ''', ''0'',''0'',''0'',''0'',''0'')');
[其他解释]
引用:
二楼的写法是对的,如果你的b,c,d,e,f是字符型,那么在插入时应该加两个引号,如下:
sql.add('insert into table2(a,b,c,d,e,f) values ('''
+ h + ''', ''0'',''0'',''0'',''0'',''0'')');
这个我也试过的但是仍然有这个问题,我也觉得是参数问题,a,b,c,d,e,f全部都是字符串格式的
[其他解释]
你的代码我编译通过,执行出错?提示什么错误?
[其他解释]
引用:
你的代码我编译通过,执行出错?提示什么错误?
执行没出错,就是执行的时候,弹出“不正常的定义参数对象,提供了不一致或者不完整的信息”,将adoquery 的 ParamCheck设置为 false后提示不是可以识别的 OPTIMIZER LOCK HINTS 选项,a,b,c,d,e,f都是char格式
[其他解释]
那是你组合的SQL有问题,里面可能有冒号,你用Memo将SQL显示出来检查下。
Memo1.Lines.Add(SQL);
[其他解释]
我发现很有可能是with的事。你去掉这个试试!
[其他解释]
引用:
我发现很有可能是with的事。你去掉这个试试!


不会和with没关系,应该是SQL的问题,不过初学者with还是慎用,很容易出问题。
[其他解释]
引用:
那是你组合的SQL有问题,里面可能有冒号,你用Memo将SQL显示出来检查下。
Memo1.Lines.Add(SQL);
adoquery3的查询我在sql测试过,行得通,select出来的是单一的字段remote_id,问题是出在插入过程中,和with也没关系,纠结了好久了
[其他解释]
引用:
引用:我发现很有可能是with的事。你去掉这个试试!

不会和with没关系,应该是SQL的问题,不过初学者with还是慎用,很容易出问题。
原来是我上面一个赋值的时候出错了

读书人网 >.NET

热点推荐