| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 587 人关注过本帖
标题:请VFP高手帮我解决这个问题。
只看楼主 加入收藏
liqiao1680
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2011-5-22
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
请VFP高手帮我解决这个问题。
编了个记考勤的程序,可是程序总是进入了死循环,请各位高手帮我看看,指点迷津。程序如下:

week=ALLTRIM(thisform.text4.value)
IF EMPTY(thisform.text4.value)
MESSAGEBOX("请填写第几周",16,"出错提示")
RETURN
ENDIF
USE temptab;记载有考勤的一个通用的模板表
COPY TO &week;将表复制成第N周的考勤表

cc=MESSAGEbox("是否将本周加入汇总",36,"提示")
IF cc=6
    sele 0
    USE &week
        DO while not EOF()
           SCATTER fields a课时,b课时,早自习,午自习,晚自习1,晚自习2,晚自习3,病假,私假,旷工 to kq(10) "取出第一个记录中的数据放入kq(10)
           SKIP
           sele 1
           USE kqhz ;"kqhz"是已经建立的考勤汇总表
           SCATTER fields a课时,b课时,早自习,午自习,晚自习1,晚自习2,晚自习3,病假,私假,旷工 to hz(10)
             FOR i=1 to 10
             hz(i)=hz(i)+kq(i)
             endfor
           GATHER from hz fields a课时,b课时,早自习,午自习,晚自习1,晚自习2,晚自习3,病假,私假,旷工 ;"将汇总后的数据读入kqhz表中。"
             SKIP
          ENDDO
ENDIF
OPEN DATABASE 考勤管理
ADD TABLE &week
thisform.text4.Value=""
USE temptab
REPLACE all a课时 with 0,b课时 with 0,早自习 with 0,午自习 with 0,晚自习1 with 0,;
晚自习2 with 0,晚自习3 with 0,病假 with 0,私假 with 0,旷工 with 0
CLOSE TABLES
thisform.Release
RETURN

搜索更多相关主题的帖子: 通用 晚自习 
2011-05-22 17:55
wzxc
Rank: 9Rank: 9Rank: 9
来 自:齐鲁大地
等 级:贵宾
威 望:39
帖 子:985
专家分:1296
注 册:2006-4-25
收藏
得分:20 
1、select 0 是选尚未使用的最小工作区。如果程序开始没有使用工作区打开表,那么,select 0 与select 1 等价。
2、 DO while not EOF() 和enddo 之间:一开始的表是:
sele 0
USE &week
循环体末并没有改过来,当前表是循环体内打开的表:
sele 1
USE kqhz
SKIP 移动的记录指针是kqhz,而不是 &week
3、行末注释应该是&&,不是;。
 USE kqhz &&"kqhz"是已经建立的考勤汇总表



认真看书学习,弄通Fox主义。
2011-05-22 19:41
liqiao1680
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2011-5-22
收藏
得分:0 
回复 楼主 liqiao1680
我改成了这样,程序能执行,可是汇总的表总是不改变。还是请您不吝赐教:
cc=MESSAGEbox("是否将本周加入汇总",36,"提示")
IF cc=6
        DO while not EOF()
           SELECT 1
           USE &week
           SCATTER fields a课时,b课时,早自习,午自习,晚自习1,晚自习2,晚自习3,病假,私假,旷工 to kq(10)
           SKIP
           SELECT 2
           USE kqhz
           SCATTER fields a课时,b课时,早自习,午自习,晚自习1,晚自习2,晚自习3,病假,私假,旷工 to hz(10)
             FOR i=1 to 10
             hz(i)=hz(i)+kq(i)
             endfor
           GATHER from hz fields a课时,b课时,早自习,午自习,晚自习1,晚自习2,晚自习3,病假,私假,旷工
             SKIP
          ENDDO
ENDIF
2011-05-24 20:20
xzyu1968
Rank: 2
等 级:论坛游民
帖 子:4
专家分:10
注 册:2011-5-25
收藏
得分:0 
week.dbf 表的结构
 姓名,a课时,b课时,早自习,午自习,晚自习1,晚自习2,晚自习3,病假,私假,旷工
kqhz.dbf 表的结构
 姓名,a课时,b课时,早自习,午自习,晚自习1,晚自习2,晚自习3,病假,私假,旷工
考勤一定有人名,所以加一个人名,这是因为你没有给出数据表的结构.

cc=MESSAGEbox("是否将本周加入汇总",36,"提示")
IF cc=6
  SELECT 1
  USE &week
  inde on 姓名 tag  姓名 &&建立索引 如果有就用: set orde to 姓名
  SELECT 2
  USE kqhz
  inde on 姓名 tag  姓名
  sele 1
  scan            &&循环开始
   scatter to Kq  && Kq 是数组,没有定义,VFP系统会自动定义
   sele 2
   do case
     case seek(Kq(1))==.t. &&汇总表有此人
       scatter to HZ       && 取汇总表数据
     other                 &&汇总表没有此人
       append blank        &&追加一条空白记录
       scatter to Hz blank &&取汇总表数据空值
       hz(1)=Kq(1)         &&姓名
    endcase
    FOR i=2 to 11 step 1
       hz(i)=hz(i)+kq(i)   &&赋值,汇总,
    endfor
    GATHER from hz         &&保存数据
    sele 1                 &&转成工作区 1  ,&week表
  endscan                  &&数据到了尾部该循环结束
ENDIF

说明:这个段代码,加了某个周考勤表增加了新人,而汇总表没有增加,汇总时,自动追加到汇总表里面去.
2011-05-25 19:16
liqiao1680
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2011-5-22
收藏
得分:0 
非常感谢您的指点。现在程序已能正常运行,根据您的指点,我的完整的设计是这样的:
week=ALLTRIM(thisform.text4.value)  &&填入第几周,用于记载、汇总和查询,第几周的数字作为当周考勤的表名。
IF EMPTY(thisform.text4.value)      &&第几周必填。
MESSAGEBOX("请填写第几周",16,"出错提示")
RETURN
ENDIF
USE temptab      &&temptab是一个含有本学期所有教师姓名和考勤项的模板表,当中只有教师姓名,其它各项都是零。;
                   设计了一个表单,将temptab表作为数据源,输入当周的考勤记载。完成后按“确定”按钮,执行下列程序:
COPY TO &week    &&将已记入考勤的模板表复制成第几周的考勤表,即&week.
cc=MESSAGEbox("是否将本周加入汇总",36,"提示")
IF cc=6
        SELECT 1
           USE &week   &&week是当周考勤
        SELECT 2
           USE kqhz     &&kqhz是各周的考勤汇总。
           SELECT 1
        scan             &&开始循环
           SCATTER fields a课时,b课时,早自习,午自习,晚自习1,晚自习2,晚自习3,病假,私假,旷工 to kq   &&收集第一个记录的各考勤项,放入kq中。
           SELECT 2
           SCATTER fields a课时,b课时,早自习,午自习,晚自习1,晚自习2,晚自习3,病假,私假,旷工 to hz(10)  &&收集考勤汇总表中的考勤项,放入hz中。
             FOR i=1 to 10
             hz(i)=hz(i)+kq(i)  &&将&week表中的考勤项加入到汇总表中,进行汇总。
             endfor
           GATHER from hz fields a课时,b课时,早自习,午自习,晚自习1,晚自习2,晚自习3,病假,私假,旷工       &&将汇总后的数据读入汇总表中。
          ENDscan
ENDIF
use  &&关闭表
OPEN DATABASE 考勤管理
ADD TABLE &week          &&将&week表加入到考勤数据库中,作为以后每周查询的用表。
thisform.text4.Value=""  &&清空表单中的文本框。
USE temptab              &&打开模板表,将模板表中记载的本周考勤的数据清空,以备下周复制后记入考勤。
REPLACE all a课时 with 0,b课时 with 0,早自习 with 0,午自习 with 0,晚自习1 with 0,;
晚自习2 with 0,晚自习3 with 0,病假 with 0,私假 with 0,旷工 with 0
CLOSE TABLES
thisform.Release
RETURN


非常感谢您不吝赐教,不胜感激。
2011-05-25 22:46
liqiao1680
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2011-5-22
收藏
得分:0 
回复 4楼 xzyu1968
上次的修改还不行,改成下面的程序,经反复检验是可用的。
week=ALLTRIM(thisform.text4.value)  &&填入第几周,用于记载、汇总和查询,第几周的数字作为当周考勤的表名。
IF EMPTY(thisform.text4.value)      &&第几周必填。
MESSAGEBOX("请填写第几周",16,"出错提示")
RETURN
ENDIF
USE temptab      &&temptab是一个含有本学期所有教师姓名和考勤项的模板表,当中只有教师姓名,其它各项都是零。;
                   设计了一个表单,将temptab表作为数据源,输入当周的考勤记载。完成后按“确定”按钮,执行下列程序:
COPY TO &week    &&将已记入考勤的模板表复制成第几周的考勤表,即&week.
cc=MESSAGEbox("是否将本周加入汇总",36,"提示")
IF cc=6
        SELECT 1
           USE &week   &&week是当周考勤
        SELECT 2
           USE kqhz     &&kqhz是各周的考勤汇总。
           SELECT 1
        scan             &&开始循环
           SCATTER fields a课时,b课时,早自习,午自习,晚自习1,晚自习2,晚自习3,病假,私假,旷工 to kq   &&收集第一个记录的各考勤项,放入kq中。
           SELECT 2
           SCATTER fields a课时,b课时,早自习,午自习,晚自习1,晚自习2,晚自习3,病假,私假,旷工 to hz(10)  &&收集考勤汇总表中的考勤项,放入hz中。
             FOR i=1 to 10
             hz(i)=hz(i)+kq(i)  &&将&week表中的考勤项加入到汇总表中,进行汇总。
             endfor
           GATHER from hz fields a课时,b课时,早自习,午自习,晚自习1,晚自习2,晚自习3,病假,私假,旷工       &&将汇总后的数据读入汇总表中。
           skip  &kqhz表移至下一个记录(上次就是没有这个,总是把考勤加到了第一个教师里)
           sele 1   &&将当前工作区转到1
 ENDscan
ENDIF
use  &&关闭表
OPEN DATABASE 考勤管理
ADD TABLE &week          &&将&week表加入到考勤数据库中,作为以后每周查询的用表。
thisform.text4.Value=""  &&清空表单中的文本框。
USE temptab              &&打开模板表,将模板表中记载的本周考勤的数据清空,以备下周复制后记入考勤。
REPLACE all a课时 with 0,b课时 with 0,早自习 with 0,午自习 with 0,晚自习1 with 0,;
晚自习2 with 0,晚自习3 with 0,病假 with 0,私假 with 0,旷工 with 0
CLOSE TABLES
thisform.Release
RETURN
再次感谢各位的帮助。
2011-05-27 18:04
liqiao1680
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2011-5-22
收藏
得分:0 
回复 4楼 xzyu1968
4楼的xzyu1968,我们能不能交个朋友。我QQ号:292753928。
2011-05-27 18:06
快速回复:请VFP高手帮我解决这个问题。
数据加载中...
 
   



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

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