以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 保存完数据后,整个表变成空白的,是咋回事 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=143316) |
-- 作者:andy-1024 -- 发布时间:2019/11/20 21:34:00 -- 保存完数据后,整个表变成空白的,是咋回事 老师好,我的软件出了些问题。
窗口保存按钮用于保存数据行及一些数据处理功能,数据行写入表之后,需要先保存这个数据行,然后对这个数据行进行下一步处理。
但是问题是,数据行写入后,这个表变成空白表,后续代码需要查找这一数据行的时候找不到,所以报错。这个表不管怎么刷新,数据都不显示,只有卸载掉这个表,重新加载,才能看到数据,这个时候,可以发现刚才保存的数据行是已经保存完了的。
我在代码中插一个判断语句,来看是否存在刚才写入的行,提示也是未发现。不知道是什么原因。
代码片段如下,见注释:
\'写入R_GoodsInfo表 Dim nr_Goods As DataRow = dt_Goods.AddNew() \'写入数据的代码
nr_Goods.Save()
\'写入R_StockFlow表 \'其它无关代码 \'-------------->出问题部分:
dtSFlow.SQLDeleteFor("sys_Done Is Null")
For Each drFlow As DataRow In dtSFlow.SQLSelect("sys_D") Dim drGoods As DataRow = DataTables("R_GoodsInfo").SQLFind("ID = \'" & drFlow("BarCode") & "\'") If drGoods IsNot Nothing \'——加判断语句验证,提示未找到drGoods数据行
MessageBox.Show("yes") Else MessageBox.Show("no") End If \'------此后代码无法进行下去了
drGoods("Stock") = IIF(drGoods.IsNull("Stock"),0,drGoods("Stock")) + drFlow("Qty")
drGoods.Save() Dim drSList As DataRow = dtSList.SQLFind("BarCode = \'" & drFlow("BarCode") & "\' and Shop = \'" & drFlow("Shop") & "\'") If drSList IsNot Nothing Then drSList.SQLSetValue("Qty",drSList("Qty") + drFlow("Qty")) Else Dim nrSList As DataRow = dtSList.SQLAddNew() nrSList("Shop") = drFlow("Shop") nrSList("BarCode") = drFlow("BarCode") nrSList("Qty") = drFlow("Qty") nrSList.Save() End If drFlow.SQLSetValue("sys_Done","D") Next End If 见图
保存完数据行后,整个表变成空白的,而后用于验证的判断语句给出了不存在刚才保存的行的判断:
点击No的确定按钮后,开始报错。
而后不管怎么刷新页面和数据,都无法显示任何数据
只有先卸载数据表,而后重新加载数据表,数据才能再次显示,可以发现,刚才写入的数据行确实已经保存完成。 (只能上传3个文件,这个看不到了)
然而,虽然表是空白表,但是数据似乎都隐身了,鼠标点击之处还是可以选中数据行,双击某处,还能弹出此处对应的数据的编辑窗口,好像数据表全都透明了一样。 不知道是怎么回事? [此贴子已经被作者于2019/11/20 22:16:07编辑过]
|
-- 作者:程兴刚 -- 发布时间:2019/11/20 21:59:00 -- …… If drGoods IsNot Nothing \'——加判断语句验证,提示未找到drGoods数据行MessageBox.Show("yes") Else MessageBox.Show("no") Return End If …… 既然没有找到符合条件的行,drGoods为空 ,没必要再继续执行下去!
|
-- 作者:andy-1024 -- 发布时间:2019/11/20 22:04:00 -- 以下是引用程兴刚在2019/11/20 21:59:00的发言:
…… If drGoods IsNot Nothing \'——加判断语句验证,提示未找到drGoods数据行MessageBox.Show("yes") Else MessageBox.Show("no") Return
End If ……
既然没有找到符合条件的行,drGoods为空 ,没必要再继续执行下去!
你没明白我的意思,我保存完这个新的数据行后是一定要使用它的,但是保存完后整个表变成空白表了,这个数据行也看不见,所以后续代码执行不下去了。但是后续代码是一定要执行的,而不是数据行存在则执行,不存在则不执行。 |
-- 作者:程兴刚 -- 发布时间:2019/11/20 22:54:00 -- 1、您只给了半截代码,前面的代码什么也看不到,我当然不知道保存数据后为什么表成了空白,也么有可测试文件! 2、严谨一点的代码就应该加上我给的那一行,您知道为什么吗?当条件不符合,该drGoods为空,不存在这个datarow,怎么引用单元格的值?这样就会报错,加上后这是当条件不成立时,暂停执行后续代码,要的就是杜绝您现在遇到的报错现象。
|
-- 作者:程兴刚 -- 发布时间:2019/11/20 22:59:00 -- 您写入的是nr_Goods ,您判断的是 drGoods,这两个datarow都不在一个表,怎么可能达到符合条件而不报错? 您这样的一些变量、表、列命名把您自己都要搅和晕了算!
|
-- 作者:andy-1024 -- 发布时间:2019/11/21 4:31:00 -- 出现这个问题是今天才发现的,这套软件我开发完,已经使用了一年多了,这个功能从没出现过问题。前几天我发现了系统的一个bug,然后修正了(其实就是在更新库存的时候加入了一个判断语句),并不涉及这个功能模块。然后今天使用这个功能的时候就出现了这个问题。我也搞不清楚到底是什么原因。 下面是添加商品窗口中保存商品信息按钮的完整代码,并做了备注:
这个保存功能涉及三个表:R_GoodsInfo(商品信息表),R_StockFlow(商品库存流动表),R_StockList(分店库存列表) 功能简介: 1.初始判断是否符合保存条件 2.保存数据行 3.将初始库存写入R_StockFlow表,并更新刚刚保存完的数据行的库存列的数值 4.完成后的界面处理
|
-- 作者:有点蓝 -- 发布时间:2019/11/21 9:07:00 -- 变成空白的原因很简单,因为调用了StopRedraw,却没有调用对应的ResumeRedraw:http://www.foxtable.com/webhelp/topics/0453.htm 注意return是不会执行后面的代码的,所以return后面的ResumeRedraw是没有用的,所以每一个return之前都应该调用ResumeRedraw。 另外如果中途代码出错也会导致出错后面的代码不会执行,想上面使用到的sqlfind,返回值没有做判断直接使用,如果返回值是空值肯定就会出错。
|
-- 作者:程兴刚 -- 发布时间:2019/11/21 9:36:00 -- 对,蓝版主说的对,每一个return前应该插入一行: t.ResumeRedraw 另外,如果真的想快速得到帮助,建议您:请不要将代码截图,直接贴上来,没人愿意为您去码那么多字。
|
-- 作者:andy-1024 -- 发布时间:2019/11/21 14:26:00 -- 以下是引用程兴刚在2019/11/21 9:36:00的发言:
对,蓝版主说的对,每一个return前应该插入一行: t.ResumeRedraw
另外,如果真的想快速得到帮助,建议您:请不要将代码截图,直接贴上来,没人愿意为您去码那么多字。 嗯,好的,谢谢,我昨天把代码复制进来,无法发表,所以无奈才截屏的。系统提示大概意思:请阅读论坛规则,查看是否具有权限之类的。 [此贴子已经被作者于2019/11/21 14:30:59编辑过]
|
-- 作者:有点蓝 -- 发布时间:2019/11/21 14:33:00 -- 可能内容太多,可以提到txt文件上传 |