问一个adoquery的first及next的问题 ( 积分: 100 )

  • 主题发起人 主题发起人 xfh533
  • 开始时间 开始时间
X

xfh533

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在要查找一个excel表格里的记录,excel是用一个adoquery(名字Q_sql)连的,从第5行开始读取数据并依次取出第六行,第七行直到数据尾插入另一个库中,那个库用AdoImpot连接,代码如下:
Q_sql.First;
Q_sql.Next;
Q_sql.Next;
Q_sql.Next;
while not Q_sql.Eof do
begin
adqImport.FieldByName('yxgl').Value := Trim(Q_sql.Fields[33].AsString);
adqImpor.Post;
end;
Q_sql.Next;

这样写的话它倒是从第五行开始读数据,但插数据时是隔三行插一个,是不是因为每次插完一个数据它的指针又指到了Q_sql.first,请问这个问题怎么解决?
 
Q_sql.First;
Q_sql.Next;
Q_sql.Next;
Q_sql.Next;
while not Q_sql.Eof do
begin
adqImport.FieldByName('yxgl').Value := Trim(Q_sql.Fields[33].AsString);
adqImpor.Post;
Q_sql.Next;
end;
 
while not Q_sql.Eof do
begin
adqImport.FieldByName('yxgl').Value := Trim(Q_sql.Fields[33].AsString);
adqImpor.Post;
end;
这是个死循环,你怎么运行的?
 
按二楼的方案改了,还是不行...
 
Q_sql.First;
//Q_sql.Next; 这三行有什么用阿,为什么不放在WHILE中呢,
// Q_sql.Next;
// Q_sql.Next;
while not Q_sql.Eof do
begin
adqImport.FieldByName('yxgl').Value := Trim(Q_sql.Fields[33].AsString);
adqImpor.Post;
Q_sql.Next;
end;
 
楼上的已经给答案了。死循环是因为你没有对跳出循环进行控制造成的了。
 
adoquery.reno
有一个这样的属性,是数据在数据集中的序号,你可以通过判断他来实现
adoquery.first
while not adoquery.eof do
begin
if adoquery.reno>= 5 and adoqueryreno =<6 then
begin
//从第5行开始读取数据并依次取出第六行
end
else if adoquery.reno>6 then
begin
//第七行直到数据尾插入另一个库中
end;
adoquery.next
end;
 
帮楼上的更正一下,是RecNo
 
adqimport 在循环节中只是POST了,没有INSERT或APPEND过
 
用了RecNo,但出错,Incompatible types,这又是怎么回事?
 
select * into table1 from [table2$] where key>4
一个SQL就行了用不了那样做
 
后退
顶部