以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 未能启用约束。一行或多行中包含违反非空、唯一或外键约束的值 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=124617) |
-- 作者:whx007 -- 发布时间:2018/9/10 18:16:00 -- 未能启用约束。一行或多行中包含违反非空、唯一或外键约束的值 click代码如下: Dim rq As String = e.Form.Controls("DateTimePicker1").Value 代码执行到MessageBox.Show(14)后出现如下错误信息:
订单出库明细表:
请帮忙看看,谢谢! |
-- 作者:有点甜 -- 发布时间:2018/9/10 18:17:00 -- 把关联设置删除,重新设置关联,即可。 |
-- 作者:whx007 -- 发布时间:2018/9/10 18:44:00 -- 全部删除关联,重新设置过了,问题依旧。如果把r1.Save() 屏蔽就不会。 这种错误经我测试,只是每天第一次新增订单的时候才会出现,后面的新增数据都不会出现该问题 |
-- 作者:whx007 -- 发布时间:2018/9/10 18:56:00 -- 把r1.save屏蔽后,保存按钮出现同样错误提示: If Tables("销售订单").Current.DataRow.RowState = DataRowState.Added AndAlso Tables("销售订单").Current IsNot Nothing Then 问题出在MessageBox.Show(4)后的Tables("销售订单").Current.Save,这句。 为什么都是保存按钮 |
-- 作者:有点蓝 -- 发布时间:2018/9/10 20:14:00 -- 有没有在后台数据库里设置表关联? Dim r As Row = Tables("销售订单").Current If r IsNot Nothing AndAlso r.DataRow.RowState = DataRowState.Added Then MessageBox.Show(1) If Tables("销售明细表").Current Is Nothing Then MessageBox.Show("No details cannot be saved 无订单明细,无法保存!", "Error 错误提示") r.Delete MessageBox.Show(2) Else r("客户名称") = e.Form.Controls("DropBox3").Text r("客户电话") = e.Form.Controls("DropBox1").Text r("折扣") = e.Form.Controls("TextBox3").Text r("备注") = r("备注") & vbcrlf & e.Form.Controls("TextBox4").Text MessageBox.Show(3) r.Save MessageBox.Show(5) Tables("销售订单").AllowEdit = False MessageBox.Show(7) Tables("销售明细表").save End If End If |
-- 作者:whx007 -- 发布时间:2018/9/10 22:11:00 -- 后台数据库没有设置表关联。 刚才发现问题所在: 销售订单和销售明细表通过订单号关联 销售订单和订单付款明细表通过订单号关联 销售明细表和订单出库明细表通过订单号、产品型号两个字段关联 订单号按照”网络环境下的复杂编号“生成而来,问题出在:当保存销售订单的时候,订单出库明细表的订单号从临时编号转变为正式编号的瞬间。 该怎么解决这个问题?
|
-- 作者:有点蓝 -- 发布时间:2018/9/10 22:39:00 -- 建议上传具体实例详细测试 2、不要在BeforeSaveDataRow事件生成编号,而是新增行后马上获取新编号,就是不使用临时编号,而是直接使用正式编号
|
-- 作者:whx007 -- 发布时间:2018/9/10 23:07:00 -- 1、采用模拟关联不能解决这个问题,因为还是要用订单号建立关联关系。 2、之前采用的是正式编号方法,但我需要在局域网多人使用,采用正式编号新增行后必须马上保存才能避免订单号重复的问题,立即保存新增行带来的问题是行的状态就无法判断是不是新增行,好几个地方需要用到新增行来做判断。所以采用了临时编号的方案。
3、问题会不会是因为销售明细表和订单出库明细表通过订单号关联,是二级关联了。销售订单—销售明细表—订单出库明细表,都是通过订单号关联。之前采用在DataColChanged写代码采用正式编号(没有用临时编号再转正式编号)没有出现这个问题,控件的代码写的都一样,也没有出现这个未能启用约束的错误提示。
[此贴子已经被作者于2018/9/10 23:20:38编辑过]
|
-- 作者:有点蓝 -- 发布时间:2018/9/10 23:19:00 -- 1、模拟关联肯定没有问题,因为不需要建立关联表 2、局域网多人使用一样可以使用正式编号,帮助仅仅是提供一种用法,不代表这种用法是上帝而不可侵犯。学习帮助最主要的还是学习帮助解决问题的逻辑,而不是完抄。 其实只需要保存更新[编号]表即可,业务表不保存也一样可以使用正式编号 |
-- 作者:whx007 -- 发布时间:2018/9/11 3:10:00 --
项目中的订单号有两种方案: 1、采用网络环境下的复杂编号:此方案目前遇到“未能启用约束”的错误提示,应该是订单出库明细表保存的时候订单号从临时编号转为正式编号的瞬间引起。 2、只采用正式编号方案:销售订单的datacolchanged里面有写代码(已屏蔽)。此方案的问题是销售订单新增行后必须立即保存新增行,否则多人使用会出现订单号重复的问题。立即保存新增行带来的问题是行的状态就不是DataRowState.Added状态,好几个地方需要用到DataRowState.Added来做判断。比如导航窗口的TopicLinkClick中的代码(当前窗口有数据未保存需要转到其他窗口时提醒数据的保存)。 希望老师们帮我看看怎么解决局域网多人使用订单号重复的问题(两个方案中的一个,或者有更好的方案)。
测试方法:
密码为888 [此贴子已经被作者于2018/9/11 14:44:50编辑过]
|