注册 登录
编程论坛 VFP论坛

课表调整表单运行出错

王咸美 发布于 2018-12-08 08:28, 3840 次点击
    运行表单“2018年秋学期课表调整”出错,(我想用表单中输入的内容替换掉kb20180920.dbf中字段内容,如年级:一年级  班级:(1)班 学科:队会 节次:zhou15),现将click事件代码贴出,恳请高手帮忙,万分感谢!

只有本站会员才能查看附件,请 登录


click事件代码:
SET TALK OFF
SET SAFETY OFF
SET COMPATIBLE OFF

cCurrentProcedure = SYS(16,1)
nPathStart = AT(":",cCurrentProcedure)- 1
nLenOfPath = RAT("\", cCurrentProcedure) - (nPathStart)
mypath=SUBSTR(cCurrentProcedure, nPathStart, nLenofPath)
SET Default TO (mypath)


PUBLIC cnj,cbj,cxk,cjc
cnj=ALLTRIM(thisform.text1.Value)
cbj=ALLTRIM(thisform.text2.Value)
cxk=ALLTRIM(thisform.text3.Value)
cjc=ALLTRIM(thisform.text4.Value)
use kb20180920
REPLACE cjc with cxk for nj=cnj .and. bj=cbj
browse
27 回复
#2
hu9jj2018-12-08 10:11
依我之见,下列的代码不应该出现在click()事件中,只能在程序开始时使用,否则很容易运行出错。
SET TALK OFF
SET SAFETY OFF
SET COMPATIBLE OFF

cCurrentProcedure = SYS(16,1)
nPathStart = AT(":",cCurrentProcedure)- 1
nLenOfPath = RAT("\", cCurrentProcedure) - (nPathStart)
mypath=SUBSTR(cCurrentProcedure, nPathStart, nLenofPath)
SET Default TO (mypath)


尤其是这句PUBLIC cnj,cbj,cxk,cjc,在第二次按键之后必定出错,因为重复定义变量了。定义全局变量只能在程序开始时或者不可能会重复执行的位置,例如表单的init事件、load事件等地方。建议楼主多借鉴别人成熟的代码。
#3
wengjl2018-12-08 10:24
以下是引用王咸美在2018-12-8 08:28:41的发言:

    运行表单“2018年秋学期课表调整”出错,(我想用表单中输入的内容替换掉kb20180920.dbf中字段内容,如年级:一年级  班级:(1)班 学科:队会 节次:zhou15),现将click事件代码贴出,恳请高手帮忙,万分感谢!



click事件代码:
SET TALK OFF
SET SAFETY OFF
SET COMPATIBLE OFF

cCurrentProcedure = SYS(16,1)
nPathStart = AT(":",cCurrentProcedure)- 1
nLenOfPath = RAT("\", cCurrentProcedure) - (nPathStart)
mypath=SUBSTR(cCurrentProcedure, nPathStart, nLenofPath)
SET Default TO (mypath)


PUBLIC cnj,cbj,cxk,cjc
cnj=ALLTRIM(thisform.text1.Value)
cbj=ALLTRIM(thisform.text2.Value)
cxk=ALLTRIM(thisform.text3.Value)
cjc=ALLTRIM(thisform.text4.Value)
use kb20180920
REPLACE cjc with cxk for nj=cnj .and. bj=cbj
browse


你的kb20180920.dbf表中,没有 cjc 这个字段。招待到 REPLACE…… 时肯定是出错了。
#4
wengjl2018-12-08 10:26
总课表名称中最好不要带日期。带了日期下一学年就不能用了。
#5
王咸美2018-12-08 10:29
如何修改代码,还请不吝赐教。
#6
wengjl2018-12-08 10:55
从表单上看不出实现的目标
#7
mywisdom882018-12-08 12:00
以下是引用王咸美在2018-12-8 10:29:24的发言:

如何修改代码,还请不吝赐教。

1.表设计非常不规范,Zhou11~16,Zhou21~26,Zhou31~36,Zhou41~46,Zhou51~56
是什么意思,课程表应该是每周都相同的吧,如果不相同,可以改的
我自己认为,可以这样,比较好,程序容易控制,
课程表(年间,班级,周1,周2,周3,周4,周5,周6,周,学年)
课程表(Nj C(10),Bj C(10),Zhou1 C(10),Zhou2 C(10),Zhou3 C(10),Zhou4 C(10),Zhou5 C(10),Zhou6 C(10),Zhou I,Xn C(10))
如果1个班没周课程都相同,就1个班1个学期只有1行记录,如
一年级,(1)班,数学,语文,美术,科学,班会,体育,1,2018-01
如果每周都不同的,如有23周,就有23行,
#8
mywisdom882018-12-08 12:07
以下是引用王咸美在2018-12-8 10:29:24的发言:

如何修改代码,还请不吝赐教。

就你问题来说,你cjc代表的是“节次”
cnj=ALLTRIM(thisform.text1.Value)
cbj=ALLTRIM(thisform.text2.Value)
cxk=ALLTRIM(thisform.text3.Value)
cjc=ALLTRIM(thisform.text4.Value)
use kb20180920
REPLACE cjc with cxk for nj=cnj .and. bj=cbj
下面这话的意思是,把字段 CJC 更新 为 变量 CXK 的值,条件是 nj=cnj .and. bj=cbj,但你表没有字段 CJC,把节次更新为学科,怪怪的。。
REPLACE cjc with cxk for nj=cnj .and. bj=cbj
楼主,看看命令
REPLACE FieldName1 WITH eExpression1 [ADDITIVE]
   [, FieldName2 WITH eExpression2 [ADDITIVE]] ... [Scope]
   [FOR lExpression1] [WHILE lExpression2] [IN nWorkArea | cTableAlias]
   [NOOPTIMIZE


[此贴子已经被作者于2018-12-8 12:11编辑过]

#9
mywisdom882018-12-08 13:40
对于固定课程的,固定地点的,固定老师的,课程表,还是比较容易,如小学,中学,高中
但对于,动态的课程表,就有点难度了,如大学的,大学城的。
那就设计到很多安排了。
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录
#10
王咸美2018-12-08 14:38
一周五天,每天六节课,zhou35表示周三第5节课.因为我是新手,还请各位高手帮忙写点代码,以解决问题,万分感谢!!!
#11
sdta2018-12-08 17:07
我想用表单中输入的内容替换掉kb20180920.dbf中字段内容
不知道楼主想如何替换


[此贴子已经被作者于2018-12-8 17:21编辑过]

#12
sdta2018-12-08 17:26
只有本站会员才能查看附件,请 登录

上面的截图中,TEXTBOX控件改为COMBOBOX控件,防止输入错误。
#13
王咸美2018-12-09 12:30
我想用表单中输入的内容替换掉kb20180920中一年级(1)班zhou15字段内容为队会(原为班会),请高手帮忙。万分感谢!!!
#14
mywisdom882018-12-09 13:12
以下是引用王咸美在2018-12-8 14:38:22的发言:

一周五天,每天六节课,zhou35表示周三第5节课.因为我是新手,还请各位高手帮忙写点代码,以解决问题,万分感谢!!!

都说,你表的结构设计有问题了,你后来会更加多问题,如果你刚开始,建议你换表的结构先。
#15
mywisdom882018-12-09 13:13
还有,就是,你的这个设计,是针对小学?中学?高中?还是不固定班级地点的大学?
#16
sdta2018-12-09 13:31
以下是引用王咸美在2018-12-9 12:30:23的发言:

我想用表单中输入的内容替换掉kb20180920中一年级(1)班zhou15字段内容为队会(原为班会),请高手帮忙。万分感谢!!!

队会与班会有何区别
#17
王咸美2018-12-09 14:52
小学
#18
mywisdom882018-12-09 15:24
以下是引用王咸美在2018-12-9 14:52:58的发言:

小学

只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录
#19
mywisdom882018-12-09 15:29
表结构是,星期一到星期日7个字段
只有本站会员才能查看附件,请 登录

还有的可能是星期一到星期日都是1个字段的,大概是这样
节次,星期,课程
1,星期一,语文
2,星期一,数学
这样的格式
#20
sdta2018-12-09 20:39
只有本站会员才能查看附件,请 登录




[此贴子已经被作者于2018-12-10 00:00编辑过]

#21
王咸美2018-12-10 20:47
请@sdta版主提供下代码好吗?万分感谢!!!
#22
sdta2018-12-10 21:37
只有本站会员才能查看附件,请 登录
#23
王咸美2018-12-11 09:27
@sdta非常感谢你提供的代码,值得学习借鉴。但在运行中会有一点小问题,能帮忙修改一下吗?
#24
sdta2018-12-11 11:45
以下是引用王咸美在2018-12-11 09:27:15的发言:

@sdta非常感谢你提供的代码,值得学习借鉴。但在运行中会有一点小问题,能帮忙修改一下吗?
你不说别人又如何知道是什么问题
#25
王咸美2018-12-11 13:22
只有本站会员才能查看附件,请 登录
#26
王咸美2018-12-11 13:26
表单运行后的错误页面已贴出,请@sdta帮忙修改一下代码,万分感谢!!!
#27
gs25367856782018-12-11 13:56
这位朋友,我来回答你:
ICASE语句,是VF9新功能,如果你没有用VF9,就会出现错误
#28
王咸美2018-12-11 14:12
明白了,我用的是vfp7.0
1