请教两个关于用表单增加记录的奇怪的问题!!

winsonruan 2004-09-19 09:53:13
问题1.我设计了一个在表中增加记录并输入数据的表单,在“开始”按钮click中输入以下代码:
THIS.CAPTION="继 续"
SELE CAILIAO
begin tran
APPE BLAN

THISFORM.cldm.value=""
THISFORM.CLM.VALUE=""
THISFORM.GZ.VALUE=""
THISFORM.KCSL.VALUE=0.00
THISFORM.DW.VALUE=""
THISFORM.CLDJ.VALUE=0.00
THISFORM.BZ.VALUE=""

THISFORM.CLDM.ENABLED=.T.
THISFORM.JHSDM.ENABLED=.T.
THISFORM.CLZL.ENABLED=.T.
THISFORM.CLM.ENABLED=.T.
THISFORM.GZ.ENABLED=.T.
THISFORM.KCSL.ENABLED=.T.
THISFORM.DW.ENABLED=.T.
THISFORM.CLDJ.ENABLED=.T.
THISFORM.BZ.ENABLED=.T.

THISFORM.CLDM.SETFOCUS

THISFORM.REFRESH
THIS.ENABLED=.F.
THISFORM.COMMAND2.ENABLED=.t.
THISFORM.COMMAND3.ENABLED=.T.
THISFORM.COMMAND4.ENABLED=.f.

奇怪的是,我在appe blan后面加上语句?recno()和wait""后,返回的记录值是-1,appe blan不是自动定位新增加的记录处的吗?为什么会这样?然后我又在这段程序的最后放这两条语句,显示的结果居然是3,我只有一条记录,appe blan后也只有两条记录,为什么指针会到了最后的呢??

问题2:
我的JHSDM和CLZL是组合框来的(其他都是文本框),我在输入CLDM的数据后,经过一段在valid的验证代码如下:
local r
r=recno()
cldm1=ALLTRIM(this.value)
if len(alltrim(this.value))=10
loca for alltrim(cailiao.cldm)==alltrim(this.value)
if not eof()
=messagebox("已经有此材料代码,请从新输入材料代码!",48+0+0,"警告")
return 0
else
go r
repl cailiao.cldm with cldm1
retu .t.
endi
else
=messagebox("请输入十位的材料代码!",48+0+0,"警告")
retu 0
endi

除了cldm文本框外,其他的文本框和组合框都用controlsource绑定了数据表的字段。

到go r处出错,原因是问题1,但是在我输入cldm的时候,JHSDM和CLZL是无效的!为什么会这样??我明明把它们的enabled至1了的啊!
...全文
101 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
winsonruan 2004-09-21
  • 打赏
  • 举报
回复
谢谢!问题已解决!发分!
十豆三 2004-09-21
  • 打赏
  • 举报
回复
还有就是问题1,因为我这个表单还有其他按钮的,在其他按钮还是属于这个事务,退出按钮才有end tran,如果这里end tran的话,会不会导致整个表单混乱??

---------------------------------
变通一下,像 yifanlxj(利建工作室)所说的,去掉事务处理。
yestoyes 2004-09-20
  • 打赏
  • 举报
回复
不好意思,我从来没有耐心看这么长的代码,就当我帮你顶吧
winsonruan 2004-09-20
  • 打赏
  • 举报
回复
有什么办法可以既用事务处理又让指针保持在原来的地方呢?请教!
YuyuanJian 2004-09-20
  • 打赏
  • 举报
回复
如果用了缓冲新增的记录号也是负数的
winsonruan 2004-09-20
  • 打赏
  • 举报
回复
apple_8180(十豆三) :loca for alltrim(cailiao.cldm)==alltrim(this.value)和loca for 字段1==alltrim(this.value) 有什么不同?不太明白!

还有就是问题1,因为我这个表单还有其他按钮的,在其他按钮还是属于这个事务,退出按钮才有end tran,如果这里end tran的话,会不会导致整个表单混乱??
十豆三 2004-09-20
  • 打赏
  • 举报
回复
问题1:
在最后加
END TRANSACTION
然后再加
?recno()
十豆三 2004-09-20
  • 打赏
  • 举报
回复
问题2:
你把
loca for alltrim(cailiao.cldm)==alltrim(this.value)
改为:
loca for 字段1==alltrim(this.value) &&字段1为表中的材料代码字段名。
试一试
winsonruan 2004-09-20
  • 打赏
  • 举报
回复
没有人知道?难道一用事务处理就没有办法定位记录了?虽然用LOCA能从新定位记录,但这毕竟不是科学的办法吧?有没有其他办法呢?请教各位高手了!
yifanlxj 2004-09-19
  • 打赏
  • 举报
回复
这是因为你使用事务处理,这时你所输入东西的记录号都会是
负数,直到你提交事务。问题是出现在这里,你可以去掉事务
处理来测试我的回复。

2,748

社区成员

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

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