为何记录指针已经到末尾却退不出循环 (200分)

  • 主题发起人 主题发起人 blue boy
  • 开始时间 开始时间
B

blue boy

Unregistered / Unconfirmed
GUEST, unregistred user!
语句如下:
with datamodule_BDE.temp1Q do
begin
close;
sql.Clear;sql.Text := 'select * from guide1_change';
open;
status.Caption := '处理正式导游员档案变动数据变化...';
if recordcount > 0 then
begin
gauge.MinValue := 0;
gauge.MaxValue := recordcount;
first;
while not eof do
begin
chkcd_NO := fieldvalues['导游卡号'];
guide_NO := fieldvalues['导游证号'];
guide_name := fieldvalues['姓名'];
sex := fieldvalues['性别'];
nation := fieldvalues['民族'];
education := fieldvalues['学历'];
language := fieldvalues['语种'];
level := fieldvalues['等级'];
travel_name := fieldvalues['旅行社简称'];
qua_NO := fieldvalues['资格证号'];
level_NO := fieldvalues['等级证号'];
IDcard := fieldvalues['身份证号'];
handout_date := fieldvalues['发证日期'];
training_date := fieldvalues['发卡日期'];
year_date := fieldvalues['年检日期'];
chk_count := fieldvalues['分值'];
mark := fieldvalues['外埠识别'];
condition := fieldvalues['培训情况'];
send_mark := fieldvalues['上传标识'];
chg_properties := fieldvalues['变动性质'];
zone_NO := fieldvalues['区域代码'];
nation_NO := fieldvalues['民族码'];
language_NO := fieldvalues['语种码'];
travel_NO := fieldvalues['旅行社码'];
gauge.Progress := gauge.Progress + 1;
next;
//***************
edit;
fieldvalues['上传标识'] := '1';// 1 表示已上传,0表示未上传
post;
end;//while
end// if
else
stabar.Panels[1].Text := '无相关上传数据';
end;//with
 
1.把循环中的edit;
fieldvalues['上传标识'] := '1';// 1 表示已上传,0表示未上传
post
先注释起来再试,看看能不能退出,如果可以则咳断定是POST时记录顺序变掉了...
可在循环外面进行POST处理!
 
to: lujr
首先表示感谢!
我试了一下,还是不行。可是我在其他地方作这样的循环时却没有问题,
这是为什么,这是为什么!
 
设定点检测一下问题的所在,看看是否会eof。。
 
记录指针是移动了,但到最后一条,他就不走了,你说奇怪不奇怪!
 
这样写,试试
edit;
fieldvalues['上传标识'] := '1';// 1 表示已上传,0表示未上传
post;
next;
 
你在試試,問題應該是在edit....post這一段,tquery在next到最後一條紀錄時,eof 不為true,
只有再next一次,eof 才為true,但這時,你用了edit....post這一段使指針又回到最後一條紀錄,
當然退步出循環.
你可以把edit....post改成這段試試.
if not eof then
begin
edit;
fieldvalues['上传标识'] := '1';// 1 表示已上传,0表示未上传
post;
end;
 
不會錯了,我測過了,就是這問題
 
//next;
//***************
edit;
fieldvalues['上传标识'] := '1';// 1 表示已上传,0表示未上传
post;
next; //将next放到此处
end;//while
end// if
 
tomato兄的寫法也沒錯,但違背了blue boy的程序原意,blue boy的程序是第一條不修改,而tomato兄修改了第一條
 
var
i:integer;
begin
...........
if table1.isempty then exit;
table1.first;
i:=1;
while i<table1.recordcount do
begin
.............
table1.edit;
...........
table1.post;
table1.next;
i:=table1.recno;
end;
 
if recordcount > 0 then沒有退出標識
 
to 左右手、richling、tomato、风中流云 :
非常感谢!我试过你们的方法了完全正确!
 
谢谢大家!
 
多人接受答案了。
 
后退
顶部