以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 有个奇怪的错误,请帮忙分析分析 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=140612) |
-- 作者:vimin -- 发布时间:2019/9/9 23:37:00 -- 有个奇怪的错误,请帮忙分析分析 我碰到个莫名其妙的错误,实在是测不出来哪里出的问题。因为比较复杂,很难发例子上来,看看我是否能描述清楚: 一个窗体,两个table控件,两个外部数据源的表。入库表,入库明细表,按需加载。 窗体beforeclose有代码,判断入库表或者明细表有haschange=true,则messagebox,提醒。 奇怪的是,我的确认保存按钮(add)一按,后台数据库一切正常运行,但关闭窗口便弹出以上的messagebox。 经测试是明细表的原因。但是不管是用历遍所有列的值,弹出一个个检查,还是后台sqlserver查看,都显示数据是没有任何更改的。 我的add按钮点击之后,会把add按钮本身enable设为false。只要把这句代码e.Form.Controls("add").Enabled = False,注释掉,beforeclose的弹窗居然就不弹了。 请老师帮忙分析一下,可能是什么原因呢。我实在是用来好多办法,都解决不了
|
-- 作者:有点蓝 -- 发布时间:2019/9/10 8:45:00 -- beforeclose和保存按钮全部代码发上来看看。 |
-- 作者:vimin -- 发布时间:2019/9/10 21:46:00 -- table1是明细表,table2是入库表 If DataTables("StockInN_Table2").HasChanges Or DataTables("StockInN_Table1").HasChanges Then Dim rst As Dialogresult rst = MessageBox.show("入库单未入库,是否直接退出? 如果要保存请按【确认入库】按钮","提示",MessageBoxButtons.YesNo,MessageBoxIcon.Question) Se/ect Case rst Case DialogResult.no e.cancel = True End Se/ect End If 确认入库按钮(add1),click事件: Dim tb1 As Table = Tables("StockInN_Table1") Dim tb2 As Table = Tables("StockInN_Table2") DataTables("StockInN_Table2").save() If DataTables("StockInN_Table2").HasChanges = True Then Return Else DataTables("StockInN_Table1").save() If DataTables("StockInN_Table1").HasChanges = True Then Return End If End If \'先保存,如果不能保存就不继续 Dim sql As new SQLCommand Dim lsb As DataTable sql.C sql.CommandText = "se/ect * fr om {产品库存信息} where 1 = 0" lsb = sql.ExecuteReader(True) \'生成临时表,设成True,库存信息可以保存 Dim ck As String = tb2.Rows(0)("仓库编号") Dim gys As String = tb2.Rows(0)("供应商编号") Dim bh As String = tb2.Rows(0)("对应编号") Dim hs As Integer = tb1.Rows.Count For i As Integer = 0 To hs -1 Dim hh As String = tb1.Rows(i)("基础货号") Dim gj As String = tb1.Rows(i)("产地国家码") Dim kcm As String = hh & gj & gys & ck \'生成产品库存码,基础货号+国家码+供应商码+仓库码 Dim h As DataRow h = lsb.SQLFind("产品库存码 = \'" & kcm & "\'") If h IsNot Nothing Then h("当前库存数量") = h("当前库存数量") + tb1.Rows(i)("数量") h.save() Else Dim xh As DataRow xh = lsb.AddNew() xh("产品库存码") = kcm xh("基础货号") = hh xh("产品基本名称") = tb1.Rows(i)("产品基本名称") xh("原产地国") = tb1.Rows(i)("原产地国") xh("产地国家码") = gj xh("供应商名称") = tb2.Rows(0)("供应商名称") xh("供应商编号") = gys xh("仓库名称") = tb2.Rows(0)("入库仓库") xh("仓库编号") = ck xh("当前库存数量") = tb1.Rows(i)("数量") End If Next lsb.save() If ancs = "cgrk" Then ‘这是全局变量,判断入库类型,会有不同的设置,也很奇怪,只有这个类型会出现我说的错误,其他类型就不出现。但是注释掉这整段还是一样会出现弹窗。 Dim sql3 As new SQLCommand sql3.C sql3.CommandText = "up d ate {采购下单表} se t 采购单状态 = \'已入库\' w here 采购编号 = \'" & bh & "\'" sql3.ExecuteNonQuery \'添加之后便到采购下单表标注一下单子已成功 End If e.Form.Controls("ad").Enabled = False e.Form.Controls("del").Enabled = False e.Form.Controls("beiz").Enabled = False e.Form.Controls("dybh").Enabled = False e.Form.Controls("rkck").Enabled = False e.Form.Controls("gys").Enabled = False e.Form.Controls("add1").Enabled = False ‘只要把这条注释掉就没弹窗了 e.Form.Controls("add").Enabled = True e.Form.Controls("bq").Enabled = True For Each l As Col In tb1.Cols MessageBox.show(tb1.Current(l.Name)) Next |
-- 作者:有点蓝 -- 发布时间:2019/9/10 21:56:00 -- 备份项目。把"add1"这个按钮删除,然后重新添加,按钮名不再使用"add1",换个名称。然后退出项目,删除bin目录,重启项目,再试试。 按钮还有没有其它事件代码?窗口全局事件有没有什么代码?
|
-- 作者:vimin -- 发布时间:2019/9/10 22:11:00 -- 按钮就这一个事件,全局代码就定义了几个变量,无其他。我用你的方法试试看 |
-- 作者:vimin -- 发布时间:2019/9/11 8:05:00 -- 完全按你的步骤操作,成功了。非常感谢! |