怎样关闭多表在工作区打开的表

yyuuu2003 2016-06-30 11:12:45
使用DELE FILE 删除表时,如果在多工作区中打开了如何关闭?
上次我写的语言可以删除,而再在原来基础上加多点内容就行不通了,
可以删除的语言:
SELE Y2
COPY STRU TO ZJK1
SELE 0
USE ZJK1 AGAIN
APPE FROM ? TYPE XL5
GO TOP
LY=年月
K=1
KK=K+1
COUNT TO N
do while kK<=n
use zjk1
go kK
LOCA FOR 年月=LY
IF NOT FOUN()
=MESSAGEBOX('该表年月必须一致',48,'警告')
USE
DELE FILE ZJK1.DBF
with this.parent.command3
.caption='归档'
.enabled=.t.
endwith
RETU 0
ELSE
KK=kK+1
ENDIF
enddo
REPL ALL 是否归档 WITH .F. 收入表名 WITH STR(LY)+'职工收入'
go 1
dele
USE
Select Y2
APPE FROM ZJK1
DELE FILE ZJK1.DBF

不能删除的语言:
IF THISFORM.PAGEFRAME1.PAGE3.TEXT1.VALUE =THISFORM.PAGEFRAME1.PAGE3.TEXT2.VALUE
SELE 职工档案
COPY TO ZJK2 FOR 建档年月=THISFORM.PAGEFRAME1.PAGE3.TEXT3.VALUE
SELE 0
USE ZJK2 AGAIN
count to m_jls
GO TOP
for i=1 to m_jls
SELE 0 &&这里没用USE打开,因为如果用USE 直接打开显示不存在
USE ZJK2 AGAIN

go i
a1=工作编号
A2=姓名
A3=人事编号
A4=工种
A5=一级部门
AA5=二级部门
A6=是否绩效
A7=参与计件
A8=参与计件名
A9=计件序号
SELE 0 &&这里没有用SELE Y2的形式打开,是因为如果这样打开显示找不到
USE Y2 AGAIN

loca for alltrim(人事编号)==alltrim(A3)

IF FOUND()
Repl 工种 with A4,一级部门 WITH A5,二级部门 WITH AA5,工作编号 WITH A1,人事编号 WITH A3,是否绩效 WITH A6,;
参与计件 WITH A7,参与计件名 WITH A8,计件序号 WITH A9 for alltrim(人事编号)==alltrim(A3) AND 年月=THISFORM.PAGEFRAME1.PAGE3.TEXT1.VALUE
dele
endiF
USE
endfor
=messagebox('核入完毕。',48,'警告')
ENDIF
DELE FILE ZJK2.DBF &&到这步时显示文件在使用
以上有颜色的地方就是有问题的地方,请老师帮看看与第一段语言有什么不同,为什么第一段可以行得通,第二段却行不通?是否是因为第二段语言打开了多个表?SELE的意思不是说当打开一个表时另一个表自动关闭吗?要怎样才能在有自由表的情况下各自能独立打开和关闭及删除?
请老师帮看看哦
...全文
334 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
yyuuu2003 2016-07-04
  • 打赏
  • 举报
回复
你们的知识那么丰富,我只能跟你学点皮毛了,因为学到你们这程度要花很多时间和精力且还要有悟性,,看来只能让你指点了.因为我们工作的重点是管理工资方面的,抽不出这么多时间,我们有几千人,管理民工队伍、员工队伍、物流,这些经济工作很多烦琐事,要定单价要统计分析要做方案等等。。。。。 谢谢你耐心讲解.
xuzuning 2016-07-01
  • 打赏
  • 举报
回复
SELE y2_副本 Replace all ; 工种 with m.oRec.工种 ; ......... 好奇怪的写法! 为什么要全部修改,而不是修改指定记录呢?
yyuuu2003 2016-07-01
  • 打赏
  • 举报
回复
老师,这是我用你的代码代进的,执行没出现语言上的问题,就是将职工档案的相关内容更新进Y2表时全部是相同的.你帮看是不是我代错了. if thisform.pageframe1.page3.text3.value=0 =MESSAGEBOX('档案年月不能为空,请重新输入!',48,'警告') retu 0 thisform.pageframe1.page3.text3.setfocus endif SELE 职工档案 LOCA FOR 建档年月=thisform.pageframe1.page3.text3.value IF NOT FOUND() =MESSAGEBOX(STR(thisform.pageframe1.page3.text3.value)+'档案年月不存在,请重新输入!',48,'警告') retu 0 thisform.pageframe1.page3.text3.setfocus endif SELE Y2 IF THISFORM.PAGEFRAME1.PAGE3.TEXT1.VALUE =THISFORM.PAGEFRAME1.PAGE3.TEXT2.VALUE LOCA FOR 年月=THISFORM.PAGEFRAME1.PAGE3.TEXT1.VALUE IF NOT FOUND() =MESSAGEBOX('无'+STR(THISFORM.PAGEFRAME1.PAGE3.TEXT1.VALUE)+'年月收入数据!',48,'警告') RETU 0 ENDIF ENDIF IF THISFORM.PAGEFRAME1.PAGE3.TEXT1.VALUE<>THISFORM.PAGEFRAME1.PAGE3.TEXT2.VALUE LOCA FOR 年月>THISFORM.PAGEFRAME1.PAGE3.TEXT1.VALUE OR 年月=THISFORM.PAGEFRAME1.PAGE3.TEXT1.VALUE; AND 年月<THISFORM.PAGEFRAME1.PAGE3.TEXT2.VALUE OR 年月=THISFORM.PAGEFRAME1.PAGE3.TEXT2.VALUE IF NOT FOUND() =MESSAGEBOX('无此年月收入数据!',48,'警告') RETU 0 ENDIF ENDIF IF THISFORM.PAGEFRAME1.PAGE3.TEXT1.VALUE =THISFORM.PAGEFRAME1.PAGE3.TEXT2.VALUE SELE 职工档案 COPY TO ZJK2 FOR 建档年月=THISFORM.PAGEFRAME1.PAGE3.TEXT3.VALUE USE ZJK2 IN 0 ALIAS ZJK2 use y2 again in 0 alias y2_副本 sele zjk2 SCAN ALL Scatter name oRec m.oRec.人事编号 = Alltrim(m.oRec.人事编号) SELE y2_副本 Replace all ; 工种 with m.oRec.工种 ; ,一级部门 with m.oRec.一级部门 ; ,二级部门 with m.oRec.二级部门 ; ,工作编号 with m.oRec.工作编号 ; ,人事编号 with m.oRec.人事编号 ; ,是否绩效 with m.oRec.是否绩效 ; ,参与计件 with m.oRec.参与计件 ; ,参与计件名 with m.oRec.参与计件名 ; ,计件序号 with m.oRec.计件序号 ; for alltrim(人事编号)==m.oRec.人事编号 AND 年月=THISFORM.PAGEFRAME1.PAGE3.TEXT1.VALUE ENDSCAN Use in zjk2 Use in y2_副本 =messagebox('核入完毕。',48,'警告') DELE FILE ZJK2.DBF select 一级部门,是否绩效,参与计件,COUNT(工种),SUM(岗位工资),SUM(年功工资),sum(技术津贴),SUM(绩效工资),SUM(计件工资),SUM(二次分配),; SUM(其他工资),SUM(加班费),SUM(夜餐费),SUM(零星计件),SUM(特殊津贴),SUM(金额1), SUM(金额2) ,SUM(金额3) ,; SUM(金额4) ,SUM(金额5) , SUM(金额6) ,SUM(金额7), SUM(金额8) from gz!Y2 ; INTO cursor HZA TO SCREEN group by 一级部门,是否绩效,参与计件 where y2.年月=THISFORM.PAGEFRAME1.PAGE3.TEXT3.VALUE thisform.pageframe1.page3.grid1.recordsource="HZA" thisform.pageframe1.page3.grid1.refresh canchu=MESSAGEBOX('是否导出?',292,'警告') if canchu=6 ok=getfile('xls') if empty(ok) return endif nn=at('.',ok) if nn#0 ok=left(ok,nn-1) endif sele hza export to &ok xls =messagebox('数据转换结束') ENDIF USE IN ZJK2 DELE FILE ZJK2.DBF ENDIF IF THISFORM.PAGEFRAME1.PAGE3.TEXT1.VALUE<>THISFORM.PAGEFRAME1.PAGE3.TEXT2.VALUE SELE 职工档案 COPY TO ZJK3 FOR 建档年月>THISFORM.PAGEFRAME1.PAGE3.TEXT1.VALUE USE ZJK3 IN 0 ALIAS ZJK3 use y2 again in 0 alias y2_副本 sele zjk3 SCAN ALL Scatter name oRec m.oRec.人事编号 = Alltrim(m.oRec.人事编号) SELE y2_副本 Replace all ; 工种 with m.oRec.工种 ; ,一级部门 with m.oRec.一级部门 ; ,二级部门 with m.oRec.二级部门 ; ,工作编号 with m.oRec.工作编号 ; ,人事编号 with m.oRec.人事编号 ; ,是否绩效 with m.oRec.是否绩效 ; ,参与计件 with m.oRec.参与计件 ; ,参与计件名 with m.oRec.参与计件名 ; ,计件序号 with m.oRec.计件序号 ; for alltrim(人事编号)==m.oRec.人事编号 AND 年月>THISFORM.PAGEFRAME1.PAGE3.TEXT1.VALUE OR 年月=THISFORM.PAGEFRAME1.PAGE3.TEXT1.VALUE; AND 年月<THISFORM.PAGEFRAME1.PAGE3.TEXT2.VALUE OR 年月=THISFORM.PAGEFRAME1.PAGE3.TEXT2.VALUE ENDSCAN =messagebox('核入完毕。',48,'警告') canchu=MESSAGEBOX('是否导出明细?',292,'警告') &&转出这一明细是想看更新后的明细结果,因为汇总感觉不对. if canchu=6 ok=getfile('xls') if empty(ok) return endif nn=at('.',ok) if nn#0 ok=left(ok,nn-1) endif sele Y2_副本 export to &ok xls =messagebox('明细转换结束') ENDIF Use in zjk3 Use in y2_副本 DELE FILE ZJK3.DBF select 一级部门,是否绩效,参与计件,COUNT(工种),SUM(岗位工资),SUM(年功工资),sum(技术津贴),SUM(绩效工资),SUM(计件工资),SUM(二次分配),; SUM(其他工资),SUM(加班费),SUM(夜餐费),SUM(零星计件),SUM(特殊津贴),SUM(金额1),SUM(金额2),SUM(金额3),SUM(金额4),SUM(金额5),SUM(金额6),; SUM(金额7),SUM(金额8) from gz!Y2 ; INTO cursor HZA TO SCREEN group by 一级部门,是否绩效,参与计件 where y2.年月=THISFORM.PAGEFRAME1.PAGE3.TEXT1.VALUE; AND 年月<THISFORM.PAGEFRAME1.PAGE3.TEXT2.VALUE OR 年月=THISFORM.PAGEFRAME1.PAGE3.TEXT2.VALUE thisform.pageframe1.page3.grid1.recordsource="HZA" thisform.pageframe1.page3.grid1.refresh canchu=MESSAGEBOX('是否导出?',292,'警告') if canchu=6 ok=getfile('xls') if empty(ok) return endif nn=at('.',ok) if nn#0 ok=left(ok,nn-1) endif sele hza export to &ok xls =messagebox('数据转换结束') ENDIF *USE IN ZJK3 *USE IN Y2_副本 *DELE FILE ZJK3.DBF ENDIF
都市夜猫 2016-07-01
  • 打赏
  • 举报
回复
vfp 不算功能强大的语言,有着很多的局限性,尤其是非 unicode,单线程,没有 64 位版本,底层开发,web 应用等等,很多很多,更悲剧的是微软已放弃并停止更新 我的团队规模不大,五到十人的开发团队,配合按区域划分的庞大销售人员,主要做行业软件,目前人手不是问题,人不在多在于精 写代码时,就必须考虑以后的可维护性,像命名习惯,缩进,大小写这些基本的要求必须规范化,至少 10% 的注释量必须强制化(复杂算法的注释行基本上是可执行代码行数的3倍以上);再根据语言特点制定相应的规范,像 vfp 中就必须严格限制 public 类型变量的使用,程序员不得私自声明和使用这种类型的变量,必须通过团队讨论才可新增一个(我们的框架中就只有一个 goApp 公用变量,别无其他),另外像环境(包括工作区,记录指针,各种 set 命令相关的值)都必须在函数或过程进出时保存和恢复,非公用的表必须用后关闭,必要时使用私有数据会话杜绝对默认数据环境的影响,....
yyuuu2003 2016-07-01
  • 打赏
  • 举报
回复
老师,你的知识很渊博哦,想跟你学广一些,因为我还有三类统计还没完成:民工的,物流的,员工测价的,这些目前我是直接在数据库中操作的,就存在着很多麻烦的明细数据更正工作,且还要分析,如果编成程序了,让我的手下整理基础数据,我直接分析就可以了. 今天我又学着你这种用法了,有时如果不懂一些强大的语言,要达到同样目的做多好多才能达到,象你这种让程序变得简单多了,现在我看我的程序有时隔久点我都要慢慢复习才能懂得当时的用意. 你的团队是怎样的,一般人能加入吗?
都市夜猫 2016-07-01
  • 打赏
  • 举报
回复
1. scatter name oRec
oRec 不是数组,是一个基于 Empty 类的对象,按规范的命名习惯 o 开头的变量类型都是对象类型
这句的意思是,把当前表的当前记录存入对象 oRec 中,字段名作为对象的属性名,字段值作为属性值
例如:当前表有 id, name 两个字段,当前记录的值分别是 1000 和 abc,执行 scatter name oo 后,oo 将拥有 id 和 name 两个属性,值分别是 1000 和 abc,属性值的类型和表字段的类型一致
好处是只用一个变量,可以有很多值,而且属性名比数组下标更具有可读性,比较一下,用 oo.id 和 aVar[1] 谁更容易出错 ?

2. 为什么前面加 m 以前的帖子中回答过你,不喜欢按规范写代码的话,可以选择不加,在我的团队中,不允许编写不规范的代码,有过维护不规范代码经历的人,会知道它有多么重要
yyuuu2003 2016-07-01
  • 打赏
  • 举报
回复
我刚重新把档案整理了一下,可能是我运用了什么将人事编号变成一样了,老师的代码可以了. 只是我没用过这种方法,所以想问问明白,以便以后懂得运用: SCAN ALL Scatter name oRec *这句话是什么意思?是一个数组?怎么我上网查设数据的形式是: SCATTER TO X 这样的形式,有什么区别吗 m.oRec.人事编号 = Alltrim(m.oRec.人事编号) SELE y2_副本 Replace all ; 工种 with m.oRec.工种 ; ,一级部门 with m.oRec.一级部门 ; *M.OREC为什么前面要加个M ,二级部门 with m.oRec.二级部门 ; ,工作编号 with m.oRec.工作编号 ; ,人事编号 with m.oRec.人事编号 ; ,是否绩效 with m.oRec.是否绩效 ; ,参与计件 with m.oRec.参与计件 ; ,参与计件名 with m.oRec.参与计件名 ; ,计件序号 with m.oRec.计件序号 ; for alltrim(人事编号)==m.oRec.人事编号 AND 年月=THISFORM.PAGEFRAME1.PAGE3.TEXT1.VALUE ENDSCAN 不好意思,我从来没用练习用数组,只是懂这个大概用意
都市夜猫 2016-07-01
  • 打赏
  • 举报
回复
引用 11 楼 yyuuu2003 的回复:
这个人事编号原来是不一样的,就是运行了这个代码连人事编号都是一样了
我给你的代码不可能有这种效果 Replace all ; 工种 with m.oRec.工种 ; ,一级部门 with m.oRec.一级部门 ; ,二级部门 with m.oRec.二级部门 ; ,工作编号 with m.oRec.工作编号 ; ,人事编号 with m.oRec.人事编号 ; ,是否绩效 with m.oRec.是否绩效 ; ,参与计件 with m.oRec.参与计件 ; ,参与计件名 with m.oRec.参与计件名 ; ,计件序号 with m.oRec.计件序号 ; for Alltrim(人事编号) == m.oRec.人事编号 and 年月 == m.YM 这里没有替换过 人事编号 字段
yyuuu2003 2016-07-01
  • 打赏
  • 举报
回复
这个人事编号原来是不一样的,就是运行了这个代码连人事编号都是一样了
都市夜猫 2016-07-01
  • 打赏
  • 举报
回复
引用 9 楼 xuzuning 的回复:
好奇怪的写法!
为什么要全部修改,而不是修改指定记录呢?

主要是不理解楼主的业务逻辑是怎样的
全部修改倒不奇怪,因为 replace all 语句加了 for 条件限制,收入表Y2 中,同一人、同一年月,可能有多条记录,这些记录都要填入档案中的内容

引用 2 楼 yyuuu2003 的回复:
图2是按你写的运行的结果,每个人都变成一样的内容了


替换成同一内容正常啊,虽然人名不同,但他们在Y2表中的人事编号都是004431,而你原来的替换条件就是
Repl 工种 with A4, .... for alltrim(人事编号)==alltrim(A3) AND 年月=THISFORM.PAGEFRAME1.PAGE3.TEXT1.VALUE
所以,只要是这个人事编号和这个年月的记录,都填入了相同的档案资料,除非他们的人事编号不同,填入的档案资料才会不同

另外,一直对你那个 dele 不理解
sele 0
USE Y2 AGAIN
loca for alltrim(人事编号)==alltrim(A3)
IF FOUND()
Repl 工种 with A4,一级部门 WITH A5,二级部门 WITH AA5,工作编号 WITH A1,人事编号 WITH A3,是否绩效 WITH A6,;
参与计件 WITH A7,参与计件名 WITH A8,计件序号 WITH A9 for alltrim(人事编号)==alltrim(A3) AND;
年月>THISFORM.PAGEFRAME1.PAGE3.TEXT1.VALUE OR 年月=THISFORM.PAGEFRAME1.PAGE3.TEXT1.VALUE;
AND 年月<THISFORM.PAGEFRAME1.PAGE3.TEXT2.VALUE OR 年月=THISFORM.PAGEFRAME1.PAGE3.TEXT2.VALUE
dele ** ????? 为什么这里要删除 Y2 表中的最后一条记录 ?????
endiF

都市夜猫 2016-06-30
  • 打赏
  • 举报
回复
不知你代码搞那么复杂干嘛,那条 dele 语句的用意也不明确
m.YM = Thisform.Pageframe1.Page3.Text1.Value
IF THISFORM.PAGEFRAME1.PAGE3.TEXT1.VALUE == m.YM
SELE 职工档案
COPY TO ZJK2 FOR 建档年月 == m.YM
Use ZJK2 In 0 Alias zjk2
*<!-- 如果其他地方没有打开 y2,这里就不需要 Again 和 _副本;不过,有它们也不会出错 -->
Use Y2 Again In 0 Alias y2_副本
*<!-- *********** end ********** -->
Select zjk2
Scan all
Scatter name oRec
m.oRec.人事编号 = Alltrim(m.oRec.人事编号)
Select y2_副本
Replace all ;
工种 with m.oRec.工种 ;
,一级部门 with m.oRec.一级部门 ;
,二级部门 with m.oRec.二级部门 ;
,工作编号 with m.oRec.工作编号 ;
,人事编号 with m.oRec.人事编号 ;
,是否绩效 with m.oRec.是否绩效 ;
,参与计件 with m.oRec.参与计件 ;
,参与计件名 with m.oRec.参与计件名 ;
,计件序号 with m.oRec.计件序号 ;
for Alltrim(人事编号) == m.oRec.人事编号 and 年月 == m.YM
*dele &&//-- 不知你这个干吗用的, 想删 zjk2 还是 y2 的当前记录
EndScan
Use in zjk2
Use in y2_副本
=messagebox('核入完毕。',48,'警告')
DELE FILE ZJK2.DBF
ENDIF

另外,上个帖子就跟你说过,select 是选择工作区,use 才是打开表,它们之间没一毛钱关系
都市夜猫 2016-06-30
  • 打赏
  • 举报
回复
晕,这不是我要的结果,我要你的代码插入到 Y2 中的记录是怎样的
yyuuu2003 2016-06-30
  • 打赏
  • 举报
回复
首先谢谢你哦,我把代码改得乱乱的,刚恢复出现的情况.
下面是我"职工收入1级汇总按钮的全部代码:
if thisform.pageframe1.page3.text3.value=0
=MESSAGEBOX('档案年月不能为空,请重新输入!',48,'警告')
retu 0
thisform.pageframe1.page3.text3.setfocus
endif
SELE 职工档案
LOCA FOR 建档年月=thisform.pageframe1.page3.text3.value
IF NOT FOUND()
=MESSAGEBOX(STR(thisform.pageframe1.page3.text3.value)+'档案年月不存在,请重新输入!',48,'警告')
retu 0
thisform.pageframe1.page3.text3.setfocus
endif
SELE Y2
*这是当TEXT1与TEXT2相等时执行的代码,相当于只是一个月的统计
IF THISFORM.PAGEFRAME1.PAGE3.TEXT1.VALUE =THISFORM.PAGEFRAME1.PAGE3.TEXT2.VALUE
LOCA FOR 年月=THISFORM.PAGEFRAME1.PAGE3.TEXT1.VALUE
IF NOT FOUND()
=MESSAGEBOX('无'+STR(THISFORM.PAGEFRAME1.PAGE3.TEXT1.VALUE)+'年月收入数据!',48,'警告')
RETU 0
ENDIF
ENDIF
IF THISFORM.PAGEFRAME1.PAGE3.TEXT1.VALUE<>THISFORM.PAGEFRAME1.PAGE3.TEXT2.VALUE
LOCA FOR 年月>THISFORM.PAGEFRAME1.PAGE3.TEXT1.VALUE OR 年月=THISFORM.PAGEFRAME1.PAGE3.TEXT1.VALUE;
AND 年月<THISFORM.PAGEFRAME1.PAGE3.TEXT2.VALUE OR 年月=THISFORM.PAGEFRAME1.PAGE3.TEXT2.VALUE
IF NOT FOUND()
=MESSAGEBOX('无此年月收入数据!',48,'警告')
RETU 0
ENDIF
ENDIF
IF THISFORM.PAGEFRAME1.PAGE3.TEXT1.VALUE =THISFORM.PAGEFRAME1.PAGE3.TEXT2.VALUE
SELE 职工档案
COPY TO ZJK2 FOR 建档年月=THISFORM.PAGEFRAME1.PAGE3.TEXT3.VALUE

SELE 0 &&这里没用USE打开,因为如果用USE 直接打开显示不存在
USE ZJK2 AGAIN
count to m_jls
GO TOP
for i=1 to m_jls
SELE 0
USE ZJK2 AGAIN
go i
a1=工作编号
A2=姓名
A3=人事编号
A4=工种
A5=一级部门
AA5=二级部门
A6=是否绩效
A7=参与计件
A8=参与计件名
A9=计件序号
SELE 0 &&这里没有用SELE Y2的形式打开,是因为如果这样打开显示找不到
USE Y2 AGAIN
loca for alltrim(人事编号)==alltrim(A3)
IF FOUND()
Repl 工种 with A4,一级部门 WITH A5,二级部门 WITH AA5,工作编号 WITH A1,人事编号 WITH A3,是否绩效 WITH A6,;
参与计件 WITH A7,参与计件名 WITH A8,计件序号 WITH A9 for alltrim(人事编号)==alltrim(A3) AND 年月=THISFORM.PAGEFRAME1.PAGE3.TEXT1.VALUE
dele
endiF
USE
endfor
=messagebox('核入完毕。',48,'警告')

*老师,顺便请看看我这样能行得通吗?下面这段语言就是我跟你说的我想在表单中按输入的名称替进临时表中,以便统计出去时能真正知道我们这些金额所含的是什么费用
*select 一级部门,是否绩效,参与计件,COUNT(工种),SUM(岗位工资),SUM(年功工资),sum(技术津贴),SUM(绩效工资),SUM(计件工资),SUM(二次分配),;
SUM(其他工资),SUM(加班费),SUM(夜餐费),SUM(零星计件),SUM(特殊津贴),SUM(金额1) AS THISFORM.PAGEFRAME1.PAGE3.TEXT4.VALUE,;
SUM(金额2) AS THISFORM.PAGEFRAME1.PAGE3.TEXT5.VALUE ,SUM(金额3) AS THISFORM.PAGEFRAME1.PAGE3.TEXT6.VALUE,;
SUM(金额4) AS THISFORM.PAGEFRAME1.PAGE3.TEXT7.VALUE,SUM(金额5) AS THISFORM.PAGEFRAME1.PAGE3.TEXT8.VALUE,;
SUM(金额6) AS THISFORM.PAGEFRAME1.PAGE3.TEXT9.VALUE,SUM(金额7) AS THISFORM.PAGEFRAME1.PAGE3.TEXT10.VALUE,;
SUM(金额8) AS THISFORM.PAGEFRAME1.PAGE3.TEXT11.VALUE from gz!Y2 ;
INTO cursor HZA TO SCREEN group by 一级部门,是否绩效,参与计件 where y2.年月=THISFORM.PAGEFRAME1.PAGE3.TEXT3.VALUE

select 一级部门,是否绩效,参与计件,COUNT(工种),SUM(岗位工资),SUM(年功工资),sum(技术津贴),SUM(绩效工资),SUM(计件工资),SUM(二次分配),;
SUM(其他工资),SUM(加班费),SUM(夜餐费),SUM(零星计件),SUM(特殊津贴),SUM(金额1), SUM(金额2) ,SUM(金额3) ,;
SUM(金额4) ,SUM(金额5) , SUM(金额6) ,SUM(金额7), SUM(金额8) from gz!Y2 ;
INTO cursor HZA TO SCREEN group by 一级部门,是否绩效,参与计件 where y2.年月=THISFORM.PAGEFRAME1.PAGE3.TEXT3.VALUE
thisform.pageframe1.page3.grid1.recordsource="HZA"
thisform.pageframe1.page3.grid1.refresh
canchu=MESSAGEBOX('是否导出?',292,'警告')
if canchu=6
ok=getfile('xls')
if empty(ok)
return
endif
nn=at('.',ok)
if nn#0
ok=left(ok,nn-1)
endif
sele hza
export to &ok xls
=messagebox('数据转换结束')
ENDIF
DELE FILE ZJK2.DBF &&到这步时显示文件在使用
ENDIF
*这是TEXT1<>TEXT2时执行的,是一个时间段的统计
IF THISFORM.PAGEFRAME1.PAGE3.TEXT1.VALUE<>THISFORM.PAGEFRAME1.PAGE3.TEXT2.VALUE
SELE 职工档案
COPY TO ZJK3 FOR 年月>THISFORM.PAGEFRAME1.PAGE3.TEXT1.VALUE OR 年月=THISFORM.PAGEFRAME1.PAGE3.TEXT1.VALUE;
AND 年月<THISFORM.PAGEFRAME1.PAGE3.TEXT2.VALUE OR 年月=THISFORM.PAGEFRAME1.PAGE3.TEXT2.VALUE
SELE 0
USE zjk3 AGAIN
count to m_jls
GO TOP
for i=1 to m_jls
SELE 0
USE zjk3 AGAIN
go i
a1=工作编号
A2=姓名
A3=人事编号
A4=工种
A5=一级部门
AA5=二级部门
A6=是否绩效
A7=参与计件
A8=参与计件名
A9=计件序号
sele 0
USE Y2 AGAIN
loca for alltrim(人事编号)==alltrim(A3)
IF FOUND()
Repl 工种 with A4,一级部门 WITH A5,二级部门 WITH AA5,工作编号 WITH A1,人事编号 WITH A3,是否绩效 WITH A6,;
参与计件 WITH A7,参与计件名 WITH A8,计件序号 WITH A9 for alltrim(人事编号)==alltrim(A3) AND;
年月>THISFORM.PAGEFRAME1.PAGE3.TEXT1.VALUE OR 年月=THISFORM.PAGEFRAME1.PAGE3.TEXT1.VALUE;
AND 年月<THISFORM.PAGEFRAME1.PAGE3.TEXT2.VALUE OR 年月=THISFORM.PAGEFRAME1.PAGE3.TEXT2.VALUE
dele
endiF
endfor
=messagebox('核入完毕。',48,'警告')
select 一级部门,是否绩效,参与计件,COUNT(工种),SUM(岗位工资),SUM(年功工资),sum(技术津贴),SUM(绩效工资),SUM(计件工资),SUM(二次分配),;
SUM(其他工资),SUM(加班费),SUM(夜餐费),SUM(零星计件),SUM(特殊津贴),SUM(金额1),SUM(金额2),SUM(金额3),SUM(金额4),SUM(金额5),SUM(金额6),;
SUM(金额7),SUM(金额8) from gz!Y2 ;
INTO cursor HZA TO SCREEN group by 一级部门,是否绩效,参与计件 where y2.年月=THISFORM.PAGEFRAME1.PAGE3.TEXT1.VALUE;
AND 年月<THISFORM.PAGEFRAME1.PAGE3.TEXT2.VALUE OR 年月=THISFORM.PAGEFRAME1.PAGE3.TEXT2.VALUE
thisform.pageframe1.page3.grid1.recordsource="HZA"
thisform.pageframe1.page3.grid1.refresh
canchu=MESSAGEBOX('是否导出?',292,'警告')
if canchu=6
ok=getfile('xls')
if empty(ok)
return
endif
nn=at('.',ok)
if nn#0
ok=left(ok,nn-1)
endif
sele hza
export to &ok xls
=messagebox('数据转换结束')
ENDIF
DELE FILE ZJK3.DBF &&到这步时显示文件在使用
ENDIF
表单图1:
执行上述代码后最后出现如下图:

都市夜猫 2016-06-30
  • 打赏
  • 举报
回复
看不出你和我代码逻辑上有什么不同,
把你不能删除临时文件的那段代码运行的结果(就是你的代码插入到 Y2 中记录)贴出来
我比较下你要的结果是什么样的
yyuuu2003 2016-06-30
  • 打赏
  • 举报
回复
我使用ZJK2的目的是想程序搜索变快,是一个临时用来传递内容的,用完就删除,如果不这样而是直接搜,当数据表中记录多后搜索变很慢
yyuuu2003 2016-06-30
  • 打赏
  • 举报
回复
我在这写的代码是"职工收入1级汇总"按钮的代码
yyuuu2003 2016-06-30
  • 打赏
  • 举报
回复
Y2是一个数据库里面的表,ZJK2是临时用的表,用完后再删除.如果我不用AGAIN打开Y2都显示不存在.DELE 的目的是让记录下跳一个.
老师,我用你这段语言试过了,从ZJK2传递给Y2数据表后的内容,所有的人都是同一样的内容,就相当于所有的记录都用一条记录的字段内容更新了.
我的程序的用意是:有一个人事档案表,有一个收入表,因为工种每月都有人变化,所以可以按想要的月份统计收入,就是当我选择年月时,用相对应月份的人事档案表的工种写进收入表中(收入表中是没有工种部门等这些文字内容的,所以要将人事档案的相关文字内容传递进相对应的年月中,以便统计出想要月份的各部门各工种的收入情况,
图1:
图2:
图1是我表中的各按钮
图2是按你写的运行的结果,每个人都变成一样的内容了
再有,就是图1中我设的金额1.........金额11,由于我的收入表Y2金额的名称不能预先知道,我想在这表单中输入每月发放的名称,用输入的名称替代金额1......金额11,能达到这目的吗?这样导出来后才知这些金额是什么名称

2,727

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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