| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3692 人关注过本帖
标题:求助:多条件记录替换
只看楼主 加入收藏
chychychy
Rank: 2
等 级:论坛游民
帖 子:201
专家分:91
注 册:2015-4-18
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:21 
求助:多条件记录替换
调班.rar (33.21 KB)

学籍号,xjh
总成绩,zcj
分区标志,fqbz
调区要求A
数据库已按zcj排好初始分区(fqbz),有需要调整的在A字段,list for a<>0 AND fqbz<>a如下图
有调整需求的只有10条记录
图片附件: 游客没有浏览图片的权限,请 登录注册



按A字段要求找zcj(总成绩)相同的做同等对调,
比如第一条5号记录,A字段值为1不同于fqbz字段值为3,需要做同等对调,将本条记录的fqbz由3替换为1,这样分区为1的就多一人,为同等调整,需要找到fqbz为1且总成绩为936(有可能很多条这样的记录)一条记录将他的fqbz换成3,这样保证同等对调。
比如第二条8号记录,A字段值为2不同于fqbz字段值为1,需要同等对调,但是找不到zcj(总成绩)为934.5,fqbz为2的记录做同等对调,本条记录不予调整。
变了一段小程序但运行结果不对,请帮助修正。
loca for a<>0 AND fqbz<>a
dime arr(4)
SCATTER FIELDS xjh,zcj,fqbz,a TO arr
loca for fqbz=arr(4) and zcj=arr(2) and a=0
repl fqbz with arr(3)
loca for xjh==arr(1)
REPLACE fqbz with arr(4)
clea
LIST for a<>0 AND fqbz2<>a
搜索更多相关主题的帖子: 记录 总成绩 字段 for AND 
2017-07-31 22:20
wangzhiyi
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:34
帖 子:366
专家分:684
注 册:2014-4-9
收藏
得分:0 
以下是引用chychychy在2017-7-31 22:20:29的发言:

loca for a<>0 AND fqbz<>a
dime arr(4)
SCATTER FIELDS xjh,zcj,fqbz,a TO arr
loca for fqbz=arr(4) and zcj=arr(2) and a=0
repl fqbz with arr(3)
loca for xjh==arr(1)
REPLACE fqbz with arr(4)
clea
LIST for a<>0 AND fqbz2<>a


SCATTER FIELDS xjh,zcj,fqbz,a TO arr
修改为SCATTER FIELDS xjh,zcj,fqbz,a TO arr for a<>0 AND fqbz<>a
其他的地方还没看清,至少这里肯定有问题。不加条件就是把原来所有的记录传送到数组里去了。
后面的两条REPLACE命令肯定有问题,数据指针没有移动,你永远是第一行相关元素的值去修改

[此贴子已经被作者于2017-7-31 22:55编辑过]

2017-07-31 22:54
chychychy
Rank: 2
等 级:论坛游民
帖 子:201
专家分:91
注 册:2015-4-18
收藏
得分:0 
回复 2楼 wangzhiyi
我是loca了一条(当然符合这个条件的记录有多条)但loca会定位到第一条,传到数组的是符合条件的第一条的记录,加上你这个条件后反而错误。

[此贴子已经被作者于2017-8-1 07:56编辑过]

2017-07-31 22:59
chychychy
Rank: 2
等 级:论坛游民
帖 子:201
专家分:91
注 册:2015-4-18
收藏
得分:0 
回复 楼主 chychychy
loca for a<>0 AND fqbz<>a
DO  while found()
    DISPLAY
    **dime arr(4)
    **SCATTER FIELDS xjh,zcj,fqbz,a TO arr
    **repl fqbz with arr(3) for fqbz=arr(4) and zcj=arr(2) and a=0
    **REPLACE fqbz with arr(4) FOR  xjh==arr(1)
    CONTINUE
ENDDO
这样也是错误,请帮助修改**部分以实现正确替换,谢谢!
2017-07-31 23:41
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10559
专家分:42996
注 册:2014-5-20
收藏
得分:0 
这样可否:
SELECT * FROM "tb - 副本.dbf" WHERE (a != 0) AND (a != fqbz) INTO CURSOR tmp READWRITE
SELECT tmp
GO TOP
DO WHILE !EOF()
    nRecno = RECNO()
    SCATTER TO arr
    LOCATE FOR fqbz==arr[4] AND zcj==arr[2]
    IF FOUND()
        REPLACE fqbz WITH arr[3]
        GO nRecno
        REPLACE fqbz WITH arr[4]
    ELSE
        GO nRecno
    ENDIF
    SKIP
ENDDO
BROWSE
2017-08-01 08:21
chychychy
Rank: 2
等 级:论坛游民
帖 子:201
专家分:91
注 册:2015-4-18
收藏
得分:0 
回复 5楼 吹水佬
谢谢,我试试,请问如何让我这段循环执行,只执行符合条件的一条,遇到不符合条件的如何继续。
loca for a<>0 AND fqbz<>a
SCATTER FIELDS xjh,zcj,fqbz,a TO arr
loca for  fqbz=arr(4) and zcj=arr(2) and a=0
if found()
    repl fqbz with arr(3)
    repl fqbz with arr(4) for xjh=arr(1)
endif
2017-08-01 08:37
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3146
专家分:8408
注 册:2015-3-25
收藏
得分:0 
回复 6楼 chychychy
按A字段要求找zcj(总成绩)相同的做同等对调...
你上面的分数,只有934这个分数才有相同的,那就只有这个才能调,其他的不能调了?
2017-08-01 09:13
chychychy
Rank: 2
等 级:论坛游民
帖 子:201
专家分:91
注 册:2015-4-18
收藏
得分:0 
回复 7楼 mywisdom88
图片附件: 游客没有浏览图片的权限,请 登录注册

不是的,除了8号记录找不到对等934.5分的,其他都有同等分数的需要调整
2017-08-01 09:50
chychychy
Rank: 2
等 级:论坛游民
帖 子:201
专家分:91
注 册:2015-4-18
收藏
得分:0 
回复 5楼 吹水佬
我试了一下,不行,我可能没说明白,我需要同分对调,比如5号记录,zcj为936分,按A自带要求需要调整,把他从fqbz为3区重新分到1区了,需要找一个从1区找一个936分的调成3区,要不然1区会多一个人。但是8号记录,虽然要求调整,但是找不到一个和他934.5分相同的做对等,就不调整。麻烦再帮忙,谢谢。
2017-08-01 09:56
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10559
专家分:42996
注 册:2014-5-20
收藏
得分:0 
以下是引用chychychy在2017-8-1 09:56:12的发言:

我试了一下,不行,我可能没说明白,我需要同分对调,比如5号记录,zcj为936分,按A自带要求需要调整,把他从fqbz为3区重新分到1区了,需要找一个从1区找一个936分的调成3区,要不然1区会多一个人。但是8号记录,虽然要求调整,但是找不到一个和他934.5分相同的做对等,就不调整。麻烦再帮忙,谢谢。

试了一下,比如5号记录,zcj为936分,要找一个1区936分的,但没找到,怎么办?
2017-08-01 10:39
快速回复:求助:多条件记录替换
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029041 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved