如何对Adoquery的select...where..order的结果集进行修改(100分)

  • 主题发起人 主题发起人 zjwjw
  • 开始时间 开始时间
Z

zjwjw

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在要对一个数据表用Adoquery进行选择并排序后,再用循环语句对结果集进行修改,
结果总是出现: dataset not in edit or insert mode.如何解决?
procedure .....
var temp1,temp2,temp3,temp4:integer;
begin
with adoquery1 do
begin
close;
sql.clear;
sql.add('select * from tablename where ... order by field1');
open;
edit;
first;
temp1:=1;
temp2:=fieldbyname(field1).asinteger;
while not eof do //循环语句实现排名,将名次赋与field2
begin
temp3:=recno;
temp4:=fieldbyname(field1).asinteger;
if temp4=temp2 then
begin
fieldbyname(field2).asinteger:=temp1;
end
else
begin
fieldbyname(field2).asinteger:=temp3;
temp1:=temp3;
end;
temp2:=temp4;
next;
end;
close;
end;
end;

 
你可以看一下帮助,其中提到First、next等方法是自动发出Post指令的,因此,为什么你的
程序不对,你应该知道了吧?
 
procedure .....
var temp1,temp2,temp3,temp4:integer;
begin
with adoquery1 do
begin
close;
sql.clear;
sql.add('select * from tablename where ... order by field1');
open;
first;
temp1:=1;
temp2:=fieldbyname(field1).asinteger;
while not eof do //循环语句实现排名,将名次赋与field2
begin
temp3:=recno;
temp4:=fieldbyname(field1).asinteger;
edit; //将EDIT加到这里
if temp4=temp2 then
begin
fieldbyname(field2).asinteger:=temp1;
end
else
begin
fieldbyname(field2).asinteger:=temp3;
temp1:=temp3;
end;
temp2:=temp4;
POST;
next;
end;
close;
end;
end;

至于你的程序逻辑要你自己保证

 
在一些数据库里order by的sql数据集或查询结果是不可修改的
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
723
import
I
后退
顶部