在VFP表单中的新增,保存按钮的代码如何写
答案:3 悬赏:0
解决时间 2021-02-10 00:06
- 提问者网友:wodetian
- 2021-02-09 18:38
在VFP表单中的新增,保存按钮的代码如何写
最佳答案
- 二级知识专家网友:劳资的心禁止访问
- 2021-02-09 18:45
这是我的一个程序里用到的"添加/保存"和"编辑/还原"按钮的代码,仅供参考。
“添加/保存”:
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="保存(\
this.parent.cmdadd.Picture ='&mainpath\icon\wzsave01.bmp'
this.Parent.cmdedit.Caption="还原(\
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="保存(\
thisformset.form1.mycmdbtns_shortcuts1.cmdadd.Picture ='&mainpath\icon\wzsave01.bmp'
thisformset.form1.mycmdbtns_shortcuts1.cmdedit.Caption="还原(\
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="添加(\0
GOTO nPRecNoEdit
ENDIF
WAIT WINDOW '记录已还原!' AT 20,50 NOWAIT TIMEOUT 0.5 && 开始还原记录
cmdEdited=.F.
thisformset.form1.Refresh
ENDIF
“添加/保存”:
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="保存(\
this.Parent.cmdedit.Caption="还原(\
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="保存(\
thisformset.form1.mycmdbtns_shortcuts1.cmdedit.Caption="还原(\
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="添加(\0
GOTO nPRecNoEdit
ENDIF
WAIT WINDOW '记录已还原!' AT 20,50 NOWAIT TIMEOUT 0.5 && 开始还原记录
cmdEdited=.F.
thisformset.form1.Refresh
ENDIF
全部回答
- 1楼网友:万千宠爱
- 2021-02-09 20:24
在表单设计窗口,双击安钮就会出现代码窗口查看。
- 2楼网友:木子香沫兮
- 2021-02-09 19:52
新增按钮大致的写法是这样的
select 表名
go bott
apend blank 增加空白记录
thisform.text1.setfoucs 设置光标处在文本框1中
保存按钮
判断输入资料是否完整
if empty(thisform.text1.value)
messagebox("不能为空")
return
endif
messagebox("保存成功")
...
代码输入不是一成不变的,还要根据实际情况变动
如有的文本框不与表字段绑定、使用表缓冲等
具体可以与我交流[email protected]
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯