| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3749 人关注过本帖
标题:求助:16组相似的命令,简化成一组命令。
只看楼主 加入收藏
wyzeaaa
Rank: 1
等 级:新手上路
帖 子:94
专家分:0
注 册:2019-6-4
结帖率:83.33%
收藏
已结贴  问题点数:10 回复次数:19 
求助:16组相似的命令,简化成一组命令。
学校代码从2201到2216,一共16所学校,我现在的代码是分别把这16个学校分数线以下的考生删除。
这每条命令中,只有学校代码不一样,其他的地方都一样。
16个学校,我复制粘贴了16回,如果是100所学校,我得复制粘贴100回,这个办法太笨了。

感觉应该有更简洁的代码,请各位老师指点。

******************************************************
select zbx from bmddm where xxdm='2201' INTO ARRAY fsx
DELETE from 2201 WHERE zf<fsx

select zbx from bmddm where xxdm='2202' INTO ARRAY fsx
DELETE from 2202 WHERE zf<fsx

select zbx from bmddm where xxdm='2203' INTO ARRAY fsx
DELETE from 2203 WHERE zf<fsx

select zbx from bmddm where xxdm='2204' INTO ARRAY fsx
DELETE from 2204 WHERE zf<fsx

select zbx from bmddm where xxdm='2205' INTO ARRAY fsx
DELETE from 2205 WHERE zf<fsx

select zbx from bmddm where xxdm='2206' INTO ARRAY fsx
DELETE from 2206 WHERE zf<fsx

select zbx from bmddm where xxdm='2207' INTO ARRAY fsx
DELETE from 2207 WHERE zf<fsx

select zbx from bmddm where xxdm='2208' INTO ARRAY fsx
DELETE from 2208 WHERE zf<fsx

select zbx from bmddm where xxdm='2209' INTO ARRAY fsx
DELETE from 2209 WHERE zf<fsx

select zbx from bmddm where xxdm='2210' INTO ARRAY fsx
DELETE from 2210 WHERE zf<fsx

select zbx from bmddm where xxdm='2211' INTO ARRAY fsx
DELETE from 2211 WHERE zf<fsx

select zbx from bmddm where xxdm='2212' INTO ARRAY fsx
DELETE from 2212 WHERE zf<fsx

select zbx from bmddm where xxdm='2213' INTO ARRAY fsx
DELETE from 2213 WHERE zf<fsx

select zbx from bmddm where xxdm='2214' INTO ARRAY fsx
DELETE from 2214 WHERE zf<fsx

select zbx from bmddm where xxdm='2215' INTO ARRAY fsx
DELETE from 2215 WHERE zf<fsx

select zbx from bmddm where xxdm='2216' INTO ARRAY fsx
DELETE from 2216 WHERE zf<fsx

******************************************************

学校代码从2201到2216,一共16所学校,我现在的代码是分别把这16个学校分数线以下的考生删除。
这每条命令中,只有学校代码不一样,其他的地方都一样。
16个学校,我复制粘贴了16回,如果是100所学校,我得复制粘贴100回,这个办法太笨了。

感觉应该有更简洁的代码,请各位老师指点。


[此贴子已经被作者于2019-6-17 16:40编辑过]

搜索更多相关主题的帖子: select from where INTO ARRAY 
2019-06-17 16:39
schtg
Rank: 12Rank: 12Rank: 12
来 自:Usa
等 级:贵宾
威 望:67
帖 子:1730
专家分:3324
注 册:2012-2-29
收藏
得分:8 
将你的代码适当作一些简化,我没有测试数据,请试一下可否?
for i = 2201  to 2216
    xxdh = str(i)
    select zbx from bmddm where alltrim(xxdm)==alltrim(xxdh) INTO ARRAY fsx
    DELETE from (xxdh) WHERE zf<fsx
endfor

[此贴子已经被作者于2019-6-17 18:47编辑过]

2019-06-17 18:46
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:2 
代码表结构
学校代码
学校名称
不需要删除分数线下的考生
不知道两个表的具体结构,代码大概如下:
CLOSE DATABASES
USE 代码表
SCAN
    SELECT * FROM 考生表 WHERE ALLTRIM(考生表.XXDM) == ALLTRIM(代码表.学校代码) AND ZF < FSX INTO TABLE ("A" + ALLTRIM(代码表.学校代码))
ENDSCAN

坚守VFP最后的阵地
2019-06-17 18:50
wyzeaaa
Rank: 1
等 级:新手上路
帖 子:94
专家分:0
注 册:2019-6-4
收藏
得分:0 
谢谢两位,我明天上班以后,测试一下。
2019-06-17 19:00
xuminxz
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:41
帖 子:766
专家分:2517
注 册:2011-5-8
收藏
得分:0 
开始的方向出问题了,开始建立了太多的表,以后想增加程序的功能会越来越麻烦。
实际上开始用一个表就可以了,最多再生成个学校代码表,建立一个录取规则表(这个好像没有)。
如果这样做上面的问题不存在了。当需要对不同学校操作时只需要建立一个参数视图就行了,每次换学校只需要改变参数,就可以了。比如一个学校的学生成绩一个表就可以了。各课的成绩、各班的成绩、各年级的成绩都可以通过参数视图实现。
数据库软件不怕表大,就怕表多,容易出现数据矛盾。

dBase有人接盘了。
2019-06-17 22:34
wyzeaaa
Rank: 1
等 级:新手上路
帖 子:94
专家分:0
注 册:2019-6-4
收藏
得分:0 
以下是引用sdta在2019-6-17 18:50:51的发言:

代码表结构
学校代码
学校名称
不需要删除分数线下的考生
不知道两个表的具体结构,代码大概如下:
CLOSE DATABASES
USE 代码表
SCAN
    SELECT * FROM 考生表 WHERE ALLTRIM(考生表.XXDM) == ALLTRIM(代码表.学校代码) AND ZF < FSX INTO TABLE ("A" + ALLTRIM(代码表.学校代码))
ENDSCAN

图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册

16个库,分别处理完后,再合并成一个总库。
主要是水平有限,才弄这么多的表
把这些数据全在一个表里处理当然好,可是不会呀

[此贴子已经被作者于2019-6-18 09:39编辑过]

2019-06-18 09:37
wyzeaaa
Rank: 1
等 级:新手上路
帖 子:94
专家分:0
注 册:2019-6-4
收藏
得分:0 
以下是引用xuminxz在2019-6-17 22:34:26的发言:

开始的方向出问题了,开始建立了太多的表,以后想增加程序的功能会越来越麻烦。
实际上开始用一个表就可以了,最多再生成个学校代码表,建立一个录取规则表(这个好像没有)。
如果这样做上面的问题不存在了。当需要对不同学校操作时只需要建立一个参数视图就行了,每次换学校只需要改变参数,就可以了。比如一个学校的学生成绩一个表就可以了。各课的成绩、各班的成绩、各年级的成绩都可以通过参数视图实现。
数据库软件不怕表大,就怕表多,容易出现数据矛盾。



谢谢指点。
主要是我水平有限,对VFP一知半解,才弄这么多的表。
把这些数据全在一个表里处理当然好,可是不会呀
我会慢慢进步的了,总会有一天,能用老师说的方法处理数据。
2019-06-18 09:40
wyzeaaa
Rank: 1
等 级:新手上路
帖 子:94
专家分:0
注 册:2019-6-4
收藏
得分:0 
以下是引用schtg在2019-6-17 18:46:09的发言:

将你的代码适当作一些简化,我没有测试数据,请试一下可否?
for i = 2201  to 2216
    xxdh = str(i)
    select zbx from bmddm where alltrim(xxdm)==alltrim(xxdh) INTO ARRAY fsx
    DELETE from (xxdh) WHERE zf<fsx
endfor



实测通过,谢谢老师



for i = 2201  to 2216
    xxdh = str(i)
    select zbx from bmddm where alltrim(xxdm)==alltrim(xxdh) INTO ARRAY fsx
    DELETE from (xxdh) WHERE zf<fsx

close all
USE allt(xxdh) EXCLUSIVE
pack
close all


endfor

MESSAGEBOX("16所学校录取线以下考生已经删除完毕! 但有可能仍存在同分情况,注意处理!!!")

************************
我又把下面彻底删除这16个库中的线下考生,也简化了一下,由16组命令简化成一组了,太神奇了。

要是提前掌握这个,可以省下好多复制粘贴的操作,因为我好多命令按钮中都是16组命令



[此贴子已经被作者于2019-6-18 10:08编辑过]

2019-06-18 09:48
wangzhiyi
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:34
帖 子:366
专家分:684
注 册:2014-4-9
收藏
得分:0 
一条非常简单的命令就可以解决的问题,被你整复杂化了。看楼主的意思好像是要把低于分数线(fsx)的学生从表里删除。
个人提供个思路:
use 2201
copy stru to 总表
use 总表
modi stru &&打开表设计器,增加学校代码,学校名称两个字段
appe from 2201
repl all for 学校代码=' ' 学校代码 with '2201',学校名称 with "sdfds"  &&学校具体名称
&& 上述两条命令根据实际情况重复,
dele for zf<fsx
pack
2019-06-18 10:23
schtg
Rank: 12Rank: 12Rank: 12
来 自:Usa
等 级:贵宾
威 望:67
帖 子:1730
专家分:3324
注 册:2012-2-29
收藏
得分:0 
方便的话,发一点数据上来,处理起来更好。
2019-06-18 14:15
快速回复:求助:16组相似的命令,简化成一组命令。
数据加载中...
 
   



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

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