vfp累加求和的代码

vfp累加求和的代码,第1张

VFP中累加求和的代码可以使用SUM函数来实现。例如,如果要对一个包含在表格中的字段进行求和,可以按照以下步骤 *** 作:

1. 打开需要进行求和计算的表格。

2. 在需要进行求和计算的字段下方添加一行,并在该行中输入“Total”等标识符。

3. 将光标移动到新添加的“Total”单元格内,并输入以下公式:`=SUM(FieldName)`(其中FieldName为需要进行求和计算的字段名)。

4. 按下回车键即可完成累加求和 *** 作。

除了以上方法外,还可以使用SQL语句或者自定义函数来实现复杂场景下的累加求和 *** 作。

这是我的一个程序里用到的"添加/保存"和"编辑/还原"按钮的代码,仅供参考。

“添加/保存”:

LOCAL OrderSave_no,Ord_Temp_no

STORE '' TO OrderSave_no,Ord_Temp_no

SELECT &cPtbl_M

OrderSave_no=ALLTRIM(&cPKeyfld) &&将当前bh赋值给 OrderSave_no

IF '添加'$this.Caption &&如果是添加记录

IF MESSAGEBOX('要添加新记录吗?',48+0+4,"确定")=6

WAIT WINDOW '正在添加新记录,请稍候...' AT 20,50 NOWAIT &&开始添加新记录

STORE RECNO() TO nPRecNoEdit &&为还原时恢复到当前记录

Ord_Temp_no='待编号'+RIGHT(TTOC(DATETIME()),8) &&临时为新bh,避免其它用户生成bh时发生冲突

* SET ORDER TO 流程编号 &&为加快搜索速度,以bh为索引

DO CASE

CASE FIELD('开单人')='开单人' AND FIELD('下单日期')='下单日期'

INSERT INTO &cPtbl_M (&cPKeyfld,录入,录入时间,开单人,下单日期) VALUES (Ord_Temp_no,salesname,DATETIME(),salesname,DATETIME())

CASE FIELD('开单人')='开单人' AND !FIELD('下单日期')='下单日期'

INSERT INTO &cPtbl_M (&cPKeyfld,录入,录入时间,开单人,下单日期) VALUES (Ord_Temp_no,salesname,DATETIME(),salesname,DATETIME())

OTHERWISE

INSERT INTO &cPtbl_M (&cPKeyfld,录入,录入时间) VALUES (Ord_Temp_no,salesname,DATETIME())

ENDCASE

* APPEND BLANK

* REPLACE 产品编号 WITH Ord_Temp_no,录入 WITH salesname, 录入时间 WITH DATETIME()

thisformset.form1.SetAll('backcolor',RGB(255,255,255),"mygrid")

this.Caption="保存(\<S)"

this.parent.cmdadd.Picture ='&mainpath\icon\wzsave01.bmp'

this.Parent.cmdedit.Caption="还原(\<R)"

this.Parent.cmdedit.Picture = '&mainpath\icon\wzundo01.bmp'

this.Parent.SetAll('ENABLED',.F.)

this.Enabled=.T.

this.Parent.cmdedit.Enabled = .T.

this.Parent.Refresh

&&将快捷键工具栏 mycmdbtns_shortcuts1 的可用状态调整为与本工具栏一致 2010.07.07

thisformset.form1.mycmdbtns_shortcuts1.cmdadd.Caption="保存(\<S)"

thisformset.form1.mycmdbtns_shortcuts1.cmdadd.Picture ='&mainpath\icon\wzsave01.bmp'

thisformset.form1.mycmdbtns_shortcuts1.cmdedit.Caption="还原(\<R)"

thisformset.form1.mycmdbtns_shortcuts1.cmdedit.Picture = '&mainpath\icon\wzundo01.bmp'

thisformset.form1.mycmdbtns_shortcuts1.SetAll('ENABLED',.F.)

thisformset.form1.mycmdbtns_shortcuts1.Enabled=.T.

thisformset.form1.mycmdbtns_shortcuts1.cmdedit.Enabled = .T.

thisformset.form1.mycmdbtns_shortcuts1.Refresh

&&将快捷键工具栏 mycmdbtns_shortcuts1 的可用状态调整为与本工具栏一致

thisformset.form1.SetAll('readonly',.F.,"mygrid")

thisformset.form1.SetAll('readonly',.F.,'mytxtbox')

thisformset.form1.SetAll('readonly',.F.,'mytxtbox_keyfld')

thisformset.form1.SetAll('readonly',.F.,'combobox')

thisformset.form1.SetAll('readonly',.F.,'myeditbox')

thisformset.form1.SetAll('readonly',.F.,'myspinner')

thisformset.form1.SetAll('readonly',.F.,'mycombobox')

* WAIT WINDOW '准备click。。。。' AT 20,50

* WAIT WINDOW '准备click。。。。Click结束...' AT 20,50

thisformset.form1.mygridcontainer1.MyGrid1.SetFocus

* thisformset.form1.refresh

WAIT WINDOW '新记录已添加,请继续编辑...' AT 20,50 NOWAIT TIMEOUT 0.5 &&准备编辑添加后的新记录

cmdEdited=.T.

* thisformset.form1.cmdAutono.click

ENDIF

ELSE &&如果是保存记录

WAIT WINDOW '正在保存记录,请稍候......' AT 23,50 NOWAIT &&在子表保存之前先将父表的保存,因行缓冲下,父表可能已被保存而没有保存到修改时间等信息

SELECT &cPtbl_M

IF '3'$GETFLDSTATE(-1)=.T. AND '4'$GETFLDSTATE(-1)=.F.&&若是新添加的记录且没有更改过,则询问是否放弃该记录

IF MESSAGEBOX('您添加了一条新记录,但未做过任何编辑!'+CHR(13)+CHR(13)+'是要放弃编辑该记录吗? 此记录将不会被保存!',32+4,"确定")=6

=TABLEREVERT(.t.)

cmdEdited=.F.

ELSE

RETURN &&若选择否跳出程序

ENDIF

ELSE &&若是新添加已更改过或非新添加的记录

* SELECT lc_lcb_zb &&准备保存子表 行缓冲下无法正确保存每行的录入及修改时间

* SET EXACT ON &&忽略尾部空格

SET COLLATE TO "PINYIN" &&update命令使用pinyin模式索引速度比使用machine模式索引快数百倍

UPDATE &cPtbl_D SET 录入=ALLTRIM(salesname),录入时间=DATETIME() WHERE '4'$GETFLDSTATE(-1)=.T. AND &cPKeyfld=OrderSave_no &&AND 流程编号=OrderSave_no

UPDATE &cPtbl_D SET 修改=ALLTRIM(salesname),修改时间=DATETIME() WHERE '2'$GETFLDSTATE(-1)=.T. AND !LEFT(GETFLDSTATE(-1),1)='2' AND &cPKeyfld=OrderSave_no &&AND 流程编号=OrderSave_no

=tableupdate(.T.,.T.,'&cPtbl_D')

unlock

* IF ALLTRIM(流程编号)=='' OR '待编号'$流程编号=.T. &&检查bh是否为空或待编号

* IF MESSAGEBOX('编号不能为空或待编号!'+CHR(13)+CHR(13)+'是要放弃编辑该记录吗? 此记录将不会被保存!',48+0+4,"确定")=6

*=TABLEREVERT(.t.)

* ELSE

*RETURN

* ENDIF

* ELSE &&检查过记录更改状态和bh后,开始保存数据

UPDATE &cPtbl_M SET 录入=ALLTRIM(salesname),录入时间=DATETIME() WHERE '4'$GETFLDSTATE(-1)=.T.&&新添加的记录

UPDATE &cPtbl_M SET 修改=ALLTRIM(salesname),修改时间=DATETIME() WHERE '2'$GETFLDSTATE(-1)=.T. AND !LEFT(GETFLDSTATE(-1),1)='2' &&如果不是新添加记录且更改过

*=TABLEUPDATE(.T.)

=tableupdate(.T.,.T.,'&cPtbl_M')

unlock

* ENDIF

ENDIF

&&保存后处理命令按钮及界面 Begin

this.Caption="添加(\<A)"

this.Picture ='&mainpath\icon\wznew01.bmp'

this.Parent.cmdedit.Caption="编辑(\<E)"

this.Parent.cmdedit.Picture ='&mainpath\icon\wzedit01.bmp'

this.Parent.SetAll('ENABLED',.T.)

&&将快捷键工具栏 mycmdbtns_shortcuts1 的可用状态调整为与本工具栏一致 2010.07.07

thisformset.form1.mycmdbtns_shortcuts1.cmdadd.Caption="添加(\<A)"

this.Picture ='&mainpath\icon\wznew01.bmp'

thisformset.form1.mycmdbtns_shortcuts1.cmdedit.Caption="编辑(\<E)"

thisformset.form1.mycmdbtns_shortcuts1.cmdedit.Picture ='&mainpath\icon\wzedit01.bmp'

thisformset.form1.mycmdbtns_shortcuts1.SetAll('ENABLED',.T.)

&&将快捷键工具栏 mycmdbtns_shortcuts1 的可用状态调整为与本工具栏一致 2010.07.07

thisformset.form1.SetAll('readonly',.t.,"mygrid")

thisformset.form1.SetAll('backcolor',RGB(245,244,235),"mygrid")

thisformset.form1.SetAll('readonly',.T.,'mytxtbox')

thisformset.form1.SetAll('readonly',.T.,'mytxtbox_keyfld')

thisformset.form1.SetAll('readonly',.T.,'combobox')

thisformset.form1.SetAll('readonly',.T.,'myeditbox')

thisformset.form1.SetAll('readonly',.T.,'myspinner')

thisformset.form1.SetAll('readonly',.T.,'mycombobox')

thisformset.form1.setall('fontbold',.F.,'mytxtbox')

this.Parent.Refresh

&&保存后处理命令按钮及界面 End

SELECT &cPtbl_M

* SET ORDER TO &cPKeyfld &&无此句Locat运行需要1.950秒,有此句则为8.561秒(共享情况下,单机运行速度飞快)

LOCATE FOR &cPKeyfld=OrderSave_no

WAIT WINDOW '记录已保存!' AT 23,50 NOWAIT TIMEOUT 0.8

cmdEdited=.F.

ENDIF

SELECT &cPtbl_M

thisformset.form1.refresh

"编辑/还原":

SELECT &cPtbl_M

IF RECCOUNT()<1 OR BOF()=.T. OR EOF()=.T.

RETURN

ENDIF

IF "编辑"$this.Caption

WAIT WINDOW '准备编辑记录,请稍候...' AT 20,50 NOWAIT &&开始添加新记录

SELECT &cPtbl_M &&避免在子表时,有时会出现锁定失败的情况

SET FILTER TO &&执行筛选后如果没有找到记录,则此时点编辑会提示"其它用户正在编辑记录" -- 2010.6.16

unlock

IF LOCK()=.f.

WAIT WINDOW '其它用户正在编辑该记录,请稍候再试!' AT 24,50 TIMEOUT 3

ELSE

SELECT &cPtbl_M

STORE RECNO() TO nPRecNoEdit

thisformset.form1.SetAll('backcolor',RGB(255,255,255),"mygrid")

this.Caption = "还原(\<R)"

this.Picture = '&mainpath\icon\wzundo01.bmp'

this.parent.cmdadd.Caption="保存(\<S)"

this.parent.cmdadd.Picture ='&mainpath\icon\wzsave01.bmp'

this.Parent.SetAll('ENABLED',.F.)

this.Enabled = .T.

this.Parent.cmdadd.Enabled = .T. &&2007.12.19

&&将快捷键工具栏 mycmdbtns_shortcuts1 的可用状态调整为与本工具栏一致 2010.07.07

thisformset.form1.mycmdbtns_shortcuts1.cmdedit.Caption = "还原(\<R)"

thisformset.form1.mycmdbtns_shortcuts1.cmdedit.Picture ='&mainpath\icon\wzundo01.bmp'

thisformset.form1.mycmdbtns_shortcuts1.cmdadd.Caption="保存(\<S)"

thisformset.form1.mycmdbtns_shortcuts1.cmdadd.Picture ='&mainpath\icon\wzsave01.bmp'

thisformset.form1.mycmdbtns_shortcuts1.SetAll('ENABLED',.F.)

thisformset.form1.mycmdbtns_shortcuts1.cmdedit.Enabled = .T.

thisformset.form1.mycmdbtns_shortcuts1.cmdadd.Enabled = .T.

&&将快捷键工具栏 mycmdbtns_shortcuts 的可用状态调整为与本工具栏一致 2010.07.07

thisformset.form1.SetAll('readonly',.F.,"mygrid")

thisformset.form1.SetAll('readonly',.F.,'mytxtbox')

thisformset.form1.SetAll('readonly',.F.,'mytxtbox_keyfld')

thisformset.form1.SetAll('readonly',.F.,'combobox')

thisformset.form1.SetAll('readonly',.F.,'myeditbox')

thisformset.form1.SetAll('readonly',.F.,'myspinner')

thisformset.form1.SetAll('readonly',.F.,'mycombobox')

WAIT WINDOW '已进入编辑状态,请继续...' AT 20,50 NOWAIT TIMEOUT 0.5 &&已进入编辑状态

cmdEdited=.T.

ENDIF

ELSE

WAIT WINDOW '正在还原记录,请稍候...' AT 20,50 NOWAIT &&开始还原记录

BEGIN TRANSACTION&&为使取消还原时恢复到初始状态

LOCAL cKeyValue

STORE '' TO cKeyValue

LOCAL isedited &&判断父子表是否被修改过

SELECT &cPtbl_M

LOCATE FOR '2'$GETFLDSTATE(-1)=.T. OR '4'$GETFLDSTATE(-1)=.T.

IF FOUND()=.T.

STORE .T. TO isedited

ELSE

STORE .F. TO isedited &&如果父表没有被修改过,再判断子表是否被修改

SELECT &cPtbl_D

LOCATE FOR '2'$GETFLDSTATE(-1)=.T. OR '4'$GETFLDSTATE(-1)=.T.

IF FOUND()=.T.

STORE .T. TO isedited

ELSE

STORE .F. TO isedited

ENDIF

ENDIF

IF "还原"$this.Caption=.t. AND isedited=.T. &&若记录修改过

IF MESSAGEBOX('确实要还原记录吗?刚才所录入的数据将不被保存!'+CHR(13)+CHR(13)+'Would you like to revert? Revised part will not be saved! '+CHR(13)+CHR(13)+'注: 因主编号唯一,仅能还原到主编号生成后的位置!',32+1,'确认还原 Warning')=1

WAIT WINDOW '正在还原记录,请稍候...' AT 20,50 NOWAIT &&开始还原记录

ELSE &&取消还原

ROLLBACK &&为使取消还原时恢复到初始状态

* SELECT &cPtbl_M

* LOCATE FOR '3'$GETFLDSTATE(-1)=.T. &&如果是有新添加但未做过任何修改的记录

* IF FOUND()=.T.

* =TABLEREVERT(.T.)

* ENDIF

* SELECT &cPtbl_D

* LOCATE FOR '3'$GETFLDSTATE(-1)=.T. &&如果是有新添加但未做过任何修改的记录

* IF FOUND()=.T.

*=TABLEREVERT(.T.)

* ENDIF

* SELECT &cPtbl_M

* LOCATE FOR &cPKeyfld=cKeyValue

* thisformset.myRefreshData &&通过表单集的自定义方法myRefreshData刷新数据

RETURN

ENDIF

ENDIF

END TRANSACTION &&为使取消还原时恢复到初始状态

SELECT &cPtbl_M

=TABLEREVERT(.t.)

UNLOCK

SELECT &cPtbl_D

=TABLEREVERT(.t.)

UNLOCK

this.parent.cmdadd.Caption="添加(\<A)"

this.parent.cmdadd.Picture ='&mainpath\icon\wznew01.bmp'

this.Caption="编辑(\<E)"

this.Picture ='&mainpath\icon\wzedit01.bmp'

this.Parent.SetAll('ENABLED',.T.)

&&将快捷键工具栏 mycmdbtns_shortcuts1 的可用状态调整为与本工具栏一致 2010.07.07

thisformset.form1.mycmdbtns_shortcuts1.cmdadd.Caption="添加(\<A)"

thisformset.form1.mycmdbtns_shortcuts1.cmdadd.Picture ='&mainpath\icon\wznew01.bmp'

thisformset.form1.mycmdbtns_shortcuts1.cmdedit.Caption="编辑(\<E)"

thisformset.form1.mycmdbtns_shortcuts1.cmdedit.Picture ='&mainpath\icon\wzedit01.bmp'

thisformset.form1.mycmdbtns_shortcuts1.SetAll('ENABLED',.T.)

&&将快捷键工具栏 mycmdbtns_shortcuts1 的可用状态调整为与本工具栏一致 2010.07.07

thisformset.form1.SetAll('backcolor',RGB(245,244,235),"mygrid")

thisformset.form1.SetAll('readonly',.T.,"mygrid")

thisformset.form1.SetAll('readonly',.T.,'mytxtbox')

thisformset.form1.SetAll('readonly',.T.,'mytxtbox_keyfld')

thisformset.form1.SetAll('readonly',.T.,'combobox')

thisformset.form1.SetAll('readonly',.T.,'myeditbox')

thisformset.form1.SetAll('readonly',.T.,'myspinner')

thisformset.form1.SetAll('readonly',.T.,'mycombobox')

thisformset.form1.setall('fontbold',.F.,'mytxtbox')

this.Parent.Refresh

SELECT &cPtbl_M

IF RECCOUNT()>0

GOTO nPRecNoEdit

ENDIF

WAIT WINDOW '记录已还原!' AT 20,50 NOWAIT TIMEOUT 0.5 &&开始还原记录

cmdEdited=.F.

thisformset.form1.Refresh

ENDIF

用replace * with 命令

给你举个例子

*----------表单中输入的信息添加到自由表

if allt(thisform.text1.value)#chr(32) &&判断文本框字符不为空

use 表1.dbf excl &&独占打开自由表

replace 表1.姓名 with thisform.text1.value &&将表单里文本框内容写入到表中

endif

*----------记录从表这调表单中来

use 表1.dbf excl &&独占打开自由表

thisform.text1.value=allt(表1.姓名) &&将表里内容写入到文本框中


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/7878216.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-10
下一篇 2023-04-10

发表评论

登录后才能评论

评论列表(0条)

保存