以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  为什么偶尔会出现增加记录为空值?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=51096)

--  作者:michaelyu
--  发布时间:2014/5/19 21:06:00
--  为什么偶尔会出现增加记录为空值?

我设计了一个码单输入窗口,控件采取不绑定表字段的方式,在输入最后一个控件值经校验确认后执行addnew()增添记录命令。

同时将本日流水表以及总流水表增加一行记录,然后给每个字段分别赋上对应控件的值。同时,命令打印机输出打印标签。

目前基本运行正常。

但是,突然今天发现,有一次出现本日流水表出现了空白记录而与之对应的总流水是正常记录,而另一次是本日流水表是正常记录,而总流水对应了一条空白记录。

 

对此,我想请教大师:

 

1. 是否需要在代码中加入校验程序,以确保每次addnew()后再给每个字段赋值的行为获得了成功?

 

2. 到底是什么原因造成了这种情况?

 

3. 改用INSERT INTO这样的SQL语句是否能保证不出错?

 


--  作者:有点甜
--  发布时间:2014/5/19 21:13:00
--  

 偶尔出现?你的是网络环境?如果是网络环境,有可能是记录没有被及时的保存进去。

 

 如果是网络环境,建议你新增一行的时候,马上save这一行,确保数据保存了。

 

 又或者你用insert into,这样直接新增会好一些,记得加上事务 http://www.foxtable.com/help/topics/2933.htm

 


--  作者:michaelyu
--  发布时间:2014/5/19 21:32:00
--  

我还只是先用的单机环境。

 

我现在重新审查了如下代码:

       Dim r As Row = Tables("lot").addnew()
       Dim r1 As Row = Tables("newline").addnew()

            r("orderno")=Ord1
            r("net")=e.Form.controls("numericcombobox1").value
            r("loss")=e.Form.controls("numericcombobox2").value
            r("gross")=r("net")+r("loss")
            r("dyelot")=e.Form.controls("textbox1").value
            r("lot")=e.Form.controls("textbox15").value
            r("art_no")=art1
            r("art_name")=artname
            r("color_no")=Col1
            r("inspdate")=Date.Today
            r("bar") = barcd
            r("roll")=rollnum
            r("inspector")="A"
            r1("orderno")=Ord1
            r1("net")=e.Form.controls("numericcombobox1").value
            r1("loss")=e.Form.controls("numericcombobox2").value
            r1("gross")=r("net")+r("loss")
            r1("dyelot")=e.Form.controls("textbox1").value
            r1("lot")=e.Form.controls("textbox15").value
            r1("art_no")=art1
            r1("art_name")=artname
            r1("color_no")=Col1
            r1("inspdate")=Date.Today
            r1("bar") = barcd
            r1("roll")=rollnum
            r1("inspector")="A"
            DataTables("newline").save()
            DataTables("lot").save()

 可能是应该分别增加和赋值并存盘,而不是像现在这样一起增加,赋值,再存盘。

当然我可能应增加记录检查代码。

  



--  作者:有点甜
--  发布时间:2014/5/19 21:36:00
--  
代码应该是没什么错的。看看是不是对应的事件印象了,比如 datacolchanged 事件,赋值的时候影响到也不一定。