回 帖 发 新 帖 刷新版面

主题:循环运行到第一个skip命令时就提示:已到文件尾!!是何原因?

大家好:
   以下程序运行到第一个skip命令时就提示:已到文件尾!!但事实上表Lorderse(是select语句生成的临时表)
有6个记录,但是指针还是在第一个记录上,没有移动,是何原因?请各位多多指教,感激不尽!!!急!!
sele Lorderse
go top
do while !eof() &&更新
     update taborderse set 颜色=Ltabtest.颜色,型号=Ltabtest.型号;
            where 定单号==dindanhao and 颜色=Lorderse.颜色 and 型号=Lorderse.型号 
            sele Lorderse 
     skip
     sele Ltabtest
     skip               
 enddo

回复列表 (共10个回复)

沙发

原因么就是你在Update语句的where子句中用到了Lorderse表文件呀,该表在Update对taborderse表字段更新时也会同步移动指针的,以响应where子句。你试试下面这条语句(其它语句全部拿掉):

update taborderse from Ltabtest,Lorderse set 颜色=Ltabtest.颜色,型号=Ltabtest.型号;
   where 定单号==dindanhao and 颜色=Lorderse.颜色 and 型号=Lorderse.型号

板凳

很感谢你的回复,我试一下。。。

3 楼

好像不是你说的问题,我改成如下还是出提示:已到文件件尾!!
sele Lorderse
go top
do while !eof()
       messagebox(" ttttttttt",48,"UBUR")     
     sele Lorderse
     skip
     sele Ltabtest
     skip               
 enddo

4 楼

你的 Ltabtest 表有几条记录?

do while !eof() 这条语句是判断 Lorderse 表呢,还是判断 Ltabtest 表呢?
根据你的代码,应该是在 Ltabtest 的 SKIP 时已到了文件尾。

do while !eof() .... enddo 循环体内应该只针对一个表进行判断。


5 楼

根据你后面的那段程序来看,你有两个skip,分别针对两个表文件。你用跟踪窗口和监视窗口联合起来看看,到底是哪个表文件的记录溢出。这两个窗口很轻易就能看得到:跟踪窗口用F6或F8一句句走,监视窗口分别输入EOF("Lorderse")、EOF("Ltabtest")。如果值发生变化,FoxPro会自动用红色显示的。

6 楼

经过多次试验,复制这段到双击事件后再复制回click事件中又可以运行,我总感觉用到临时表有时总会莫名,明明有一个临时表Labc,可用sele Labc这句命令都会在调试时出错箭头指在此行,事实是这样吗?还是程序中受空格多少的影响,有这种情况吗?

7 楼

[quote]你的 Ltabtest 表有几条记录?

do while !eof() 这条语句是判断 Lorderse 表呢,还是判断 Ltabtest 表呢?
根据你的代码,应该是在 Ltabtest 的 SKIP 时已到了文件尾。

do while !eof() .... enddo 循环体内应该只针对一个表进行判断。


[/quote]
有5条记录,do while !eof() 这条语句是判断 Lorderse 表。谢!

8 楼

[quote][quote]你的 Ltabtest 表有几条记录?

do while !eof() 这条语句是判断 Lorderse 表呢,还是判断 Ltabtest 表呢?
根据你的代码,应该是在 Ltabtest 的 SKIP 时已到了文件尾。

do while !eof() .... enddo 循环体内应该只针对一个表进行判断。


[/quote]
有5条记录,do while !eof() 这条语句是判断 Lorderse 表。谢![/quote]
如果是判断Lorderse表,那就应该把你循环里最后两组SELECT...SKIP倒过来写,或把“!eof()”写成“!eof("Lorderse")”。另外,命令中单词之间的分隔空格没有限制必须是几个,可以是一个,也可以是多个。还有,FoxPro发展到9.0,关键字已经非常多,以往dBASE时代只写前四个字符的习惯建议改掉,还是把关键字写全比较好。一来自己以后维护方便,二来可以减少些莫名其妙的错误。

9 楼

[quote]经过多次试验,复制这段到双击事件后再复制回click事件中又可以运行,我总感觉用到临时表有时总会莫名,明明有一个临时表Labc,可用sele Labc这句命令都会在调试时出错箭头指在此行,事实是这样吗?还是程序中受空格多少的影响,有这种情况吗?[/quote]
临时表使用一点也不复杂,和正式表文件一样。但要你时刻注意一个问题:是否在使用半途被关闭!以你这篇回帖为例:如果在SELECT Labc之前已经有命令关闭了该临时表,那Labc这个临时表将被FoxPro自动删除,你再用SELECT命令选择那个工作区当然就发生错误了。临时表在使用过程中请务必保持打开,一旦要使用关闭命令关闭某个数据库或某个表文件,请一定要注意命令关闭的是哪个工作区的表文件,实在不行,就用“USE IN 工作区/别名”这条命令关闭。有了IN子句,无论当前工作区在哪里,总能准确关闭你想要关的工作区。

10 楼

谢谢!!!我再学习学习。

我来回复

您尚未登录,请登录后再回复。点此登录或注册