【急】关于if endif scan for endscan用法

zuiailiangjingru 2011-07-07 01:45:06
tb

bh tj shu
a h 0
b a 3
c a 4

sele tb
scan for shu>0
l_s=shu
seek tj
if found()
repl shu with shu+l_s
endif
endscan

这样写好像是死循环,该怎么写?

...全文
245 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
WWWWA 2011-07-08
  • 打赏
  • 举报
回复
只是用楼主给出的数据测试,如果 用多个TJ=h的记录,需要修改程序
jxjdzwang5555 2011-07-08
  • 打赏
  • 举报
回复
学习:
Use Dbf('tb') Again In 0 Alias tb0 &&在最小工作区中再打开表取别名为tb0
Select tb0 &&选择tb0
Scan for shu > 0 &&条件为shu > 0的循环开始
If Seek(tj, 'tb') &&在tb表中找tj,此处的tj我认为是tb0中的
Replace next 1 tb.yj with tb.yj + tb0.shu in tb&&这句我不理解,tb表中的记录指针怎么确定?
EndIf&&条件结束
EndScan&&循环结束
Use in tb0&&关闭tb0表
。。。。。。
USE r:\temp\ttp
a=0
DO whil !EOF()
IF shu>0
a=a+shu
ENDIF
SKIP
endd
LOCATE FOR shu=0
REPLACE shu WITH a
感觉wwwa老师的意思是所有shu=0的都用所有累加的a值替换?

楼主,您试了嘛?你的意思是什么?

jxjdzwang5555 2011-07-08
  • 打赏
  • 举报
回复
谢谢20楼版主老师的指教。
看不出来
Use Dbf('tb') Again In 0 Alias tb0
Select tb0
Scan for shu > 0
If Seek(tj, 'tb')
Replace next 1 tb.yj with tb.yj + tb0.shu in tb
EndIf
EndScan
Use in tb0

scan for shu > 0
gh = recno()
l_s = shu
seek tj
if found()
repl yj with yj + l_s
endif
goto gh
endscan
的区别?
zuiailiangjingru 2011-07-08
  • 打赏
  • 举报
回复
scan for shu > 0
gh = recno()
l_s = shu
seek tj
if found()
repl yj with yj + l_s
endif
goto gh
endscan

用这个成功了!
都市夜猫 2011-07-08
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 jxjdzwang5555 的回复:]
Replace next 1 tb.yj with tb.yj + tb0.shu in tb&&这句我不理解,tb表中的记录指针怎么确定?
[/Quote]
前一句: If Seek(tj, 'tb'),已将 tb 的记录指针定位到 bh 等于 tb0.tj 的记录上
WWWWA 2011-07-07
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 zuiailiangjingru 的回复:]
用循环语句该怎么写?
[/Quote]
USE r:\temp\ttp
a=0
DO whil !EOF()
IF shu>0
a=a+shu
ENDIF
SKIP
endd
LOCATE FOR shu=0
REPLACE shu WITH a
都市夜猫 2011-07-07
  • 打赏
  • 举报
回复
Use Dbf('tb') Again In 0 Alias tb0
Select tb0
Scan for shu > 0
If Seek(tj, 'tb')
Replace next 1 tb.yj with tb.yj + tb0.shu in tb
EndIf
EndScan
Use in tb0
zuiailiangjingru 2011-07-07
  • 打赏
  • 举报
回复

select tj,sum(shu)=yj into # from tb group by tj

update a set a.yj = b.yj from tb a,## b where a.bh=b.tj
zuiailiangjingru 2011-07-07
  • 打赏
  • 举报
回复
用循环语句该怎么写?
zuiailiangjingru 2011-07-07
  • 打赏
  • 举报
回复
tb中有BH tj shu yj

SQL语句 select tj,sum(shu)=yj into # from tb where tj='a'

update a set a.yj = b.yj from tb a,## b where a.bh=b.tj

WWWWA 2011-07-07
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zuiailiangjingru 的回复:]
引用 8 楼 wwwwa 的回复:

SELECT SUM(a.shu) as ma FROM ttp a INNER JOIN (;
SELECT * FROM ttp WHERE tj='h') b ON ALLTRIM(b.bh)=a.tj INTO CURSOR dd
UPDATE ttp SET shu=dd.ma WHERE tj='h'


数据量大,这方法不适合!
……
[/Quote]
测试过没有?上传dbf
到www.access911.net/csdn
只要有问题的表、查询,用WINRAR压缩
 贴数据以供测试
jxjdzwang5555 2011-07-07
  • 打赏
  • 举报
回复
实在是搞不清楚seek的作用是什么?
sele tb
scan for shu>0
l_s=shu
repl yj with yj+l_s
endscan
“找到TJ 把本身的SHU加到TJ的yj上”,也不知道如何理解?
WWWWA 2011-07-07
  • 打赏
  • 举报
回复
呵呵,如果SQL语句不适合,循环更慢
zuiailiangjingru 2011-07-07
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 wwwwa 的回复:]

SELECT SUM(a.shu) as ma FROM ttp a INNER JOIN (;
SELECT * FROM ttp WHERE tj='h') b ON ALLTRIM(b.bh)=a.tj INTO CURSOR dd
UPDATE ttp SET shu=dd.ma WHERE tj='h'
[/Quote]

数据量大,这方法不适合!
WWWWA 2011-07-07
  • 打赏
  • 举报
回复
SELECT SUM(a.shu) as ma FROM ttp a INNER JOIN (;
SELECT * FROM ttp WHERE tj='h') b ON ALLTRIM(b.bh)=a.tj INTO CURSOR dd
UPDATE ttp SET shu=dd.ma WHERE tj='h'
zuiailiangjingru 2011-07-07
  • 打赏
  • 举报
回复
sele 1
use &tb alias tb
index on bh tag rx_bh
set order to rx_bh

tb

bh tj shu yj
a h 0 0
b a 3 0
c a 4 0

结果

bh tj shu yj
a h 0 7
b a 3 0
c a 4 0

找到TJ 把本身的SHU加到TJ的yj上
bojiansky 2011-07-07
  • 打赏
  • 举报
回复
world hello
都市夜猫 2011-07-07
  • 打赏
  • 举报
回复
直接贴源数据和想要得到的结果
统计前,表有没有设置活动索引(从你的代码上看应该有)?有的话是哪个字段?或者那些字段有索引?
lhwtouch 2011-07-07
  • 打赏
  • 举报
回复
hello world
  • 打赏
  • 举报
回复
hello world
加载更多回复(2)
2.1程序与程序文件 2.1程序与程序文件 程序与程序文件 考点1 程序的概念、建立与执行   1程序的概念   程序是能够完成一定任务的命令集合。这组命令被存放在称为程序文件或命令文件 的文本文件中。当运行程序时,系统会按照一定的次序自动执行包含在程序文件中的命 令。   2程序文件的建立与修改   程序文件的建立与修改一般是通过调用系统内置的文本编辑器来进行的。其建立步 骤如下。   (l)打开文本编辑窗口。   (2)在文本编辑窗口中输入程序内容,此处所输入的程序命令不会马上被执行。   (3)编辑完成后,从"文件"菜单中选择"保存"命令或按快捷键Ctrl+W保存程序文件。   3打开或修改程序文件的方法   (1)从"文件"菜单中选择"打开"命令,弹出"打开"对话框。   (2)在"文件类型"列表框中选择"程序"。   (3)在文件列表框中选定要修改的文件,并单击"确定"按钮。   (4)编辑修改后,从"文件"菜单中选择"保存"命令或按快捷键Ctrl+W保存程序文件, 若要放弃修改,可直接按Esc键,或从"文件"菜单中选择"还原"命令。   4程序文件的执行   程序文件建立后,可使用多种方式、多次执行它,常用的以下有两种方式。   (l)菜单方式。   (2)命令方式。 考点2 简单的输入输出命令   程序一般都包含数据输入、数据处理和数据输出3个部分。   1 INPUT命令   格式:INPUT[<字符表达式>]TO<内存变量>   功能:该命令等待用户从键盘输入数据,当用户回车后,系统将表达式的值存入指 定的内存变量。   注释:输入的数据可以是常量、变量,也可以是更为一般的表达式。但不能不输入 任何内容直接按回车键输入字符串时必须加定界符,输入逻辑型常量时要用圆点定界(如 .T. ,.F.),则输入日期时间型常量时要用大括号(如{^2001-03-01})。   2 ACCEPT命令   格式:ACCEPT[<字符表达式>]TO<内存变量>   功能:该命令等待用户从键盘输入字符串,当用户回车后,系统将表达式的值存入 指定的内存变量。   注释:该命令只能接收字符串。用户在输入字符串时不需要加定界符;否则,系统 会把定界符作为字符串本身的一部分。如果不输入任何内容而直接按回车键,系统会把 空串赋给指定的内存变量。   3 WAIT命令   格式:WAIT[<字符表达式>][TO<内存变量>][WINDOW[AT<行>,<列>]] [NOWAIT][CLEARINOCLEAR][TIMEOUT<数值表达式>]   功能:该命令显示字符表达式的值作为提示信息,暂停程序的执行,直到用户按任 意键或单击鼠标时继续程序运行。   注释:<内存变量>用来保存用户输入的字符,其类型为字符型。若用户按的是Ente r键或单击了鼠标,那么<内存变量>中保存的将是空串若不选TO <内存变量>短语,则输入的单字符不保留。 小提示:   如果用DO命令执行查询文件、菜单文件,在文件名中必须要包括扩展名(QPR、MPR) 。 7.2 程序的基本结构   程序结构是指程序中命令或语句执行的流程结构,包括3种基本结构:顺序结构、选 择结构和循环结构。 考点3 顺序结构   顺序结构是最简单的程序结构,它是按命令在程序中出现的先后次序依次执行。 考点4 选择结构   支持选择结构的语句包括条件语句和分支语句。   1条件语句   格式: IF<条件> <语句序列1> [ELSE> <语句序列2>] ENDIF   功能:该语句根据<条件>是否成立从两组代码中选择一组执行。   语句的执行流程图如图7-1和图7-2所示。 图7-1有ELSE的选择语句            图7- 2无ELSE的选择语句   2分支语句   格式:DO CASE CASE<条件1> <语句序列1> CASE<条件2> <语句序列2> …… CASE<条件n> <语句序列n> [OTHERWISE <语句序列>] ENDCASE    功能:语句执行时,依次判断CASE后面的条件是否成立。分支语句实现的是一种扩展的 选择结构,可以根据条件从多组代码中选择一组执行。分支语句的流程如图7-3所示。              图7-3 多分支语句 考点5 循环结构   循环结构也称为重复结构,是指程序在执行的过程中,其中的某段代码被重复执行 若一干珠。被重复执行的代码段,通常称为循环体。Visual FoxPro支持循环结构的语句包括:DO WHILE-ENDDO、FOR-ENDFOR和SCAN- ENDSCAN。   1 DO WHILE - ENDDO语句 格式: DO WHILE<条件> <语句序列1> [LOOP] <语句序列2> [EXIT] <语句序列3>

588

社区成员

发帖
与我相关
我的任务
社区描述
提出问题
其他 技术论坛(原bbs)
社区管理员
  • community_281
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧