以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]数据验证  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=68186)

--  作者:blackzhu
--  发布时间:2015/5/12 8:53:00
--  [求助]数据验证
奇怪怎么发不了贴? 测试下

--  作者:blackzhu
--  发布时间:2015/5/12 8:55:00
--  
我在保存中写了一段代码,代码是在这样写的:

   Dim cmd As New SQLCommand
Dim dt As DataTable
Dim dr As DataRow = e.DataRow
cmd.C o n n e c ti
cmd.CommandText = "SELECT * F  rom {板材未采购数量} Where [板材设计ID] = " & dr("板材ID")
dt = cmd.ExecuteReader
If dt.DataRows.Count > 0 Then
  If dr("数量") > dt.DataRows(0)("未采购数量")
            If MessageBox.Show("板材ID为 :" & dr("板材ID") & " 现在的输入数量是: " & dr("数量") & " 未采购的数量是: " & dt.DataRows(0)("未采购数量") & "数量超出,是否保存?","提示",MessageBoxButtons.YesNo,MessageBoxIcon.Information) = DialogResult.No Then
                e.Cancel = True
            End If
        End If
    End If
End If

 就是说后台相同ID的未采购数量小于要输入的数量时 进行提示.

  但现在有一个问题就是该行数据如果保存了 那么该条数据就参与后台的计算了. 万一我再次修改了改行的数据,出来的提示数据就变成了不正确了,这个应该怎么比较好?

 我放在BeforeSaveDataRow 事件处理的

--  作者:Bin
--  发布时间:2015/5/12 9:00:00
--  
这样的话,你这表应该作为查询表,使用时随时刷新查询.
--  作者:blackzhu
--  发布时间:2015/5/12 9:04:00
--  
bin  你的意思这个输入表用查询表做?
--  作者:大红袍
--  发布时间:2015/5/12 9:05:00
--  

条件上排除当前行就行啊

 

"SELECT * F  rom {板材未采购数量} Where [板材设计ID] = " & dr("板材ID") & " And 主键 <> \'" & dr("主键") & "\'"


--  作者:blackzhu
--  发布时间:2015/5/12 9:10:00
--  
红袍 怎么可能 我判断的就是ID 要用ID做对比, {板材未采购数量} 是后台的一个无主键视图!
--  作者:blackzhu
--  发布时间:2015/5/12 9:21:00
--  
另外一个 我还写了修改状态和新增状态的判断  但是居然新增状态和修改状态会全部判断一次,这是怎么回事?
--  作者:blackzhu
--  发布时间:2015/5/12 9:29:00
--  
如果改个事件 是不是好一点?
--  作者:Bin
--  发布时间:2015/5/12 9:45:00
--  
你要什么时候都显示最新的,用查询表比较好.
--  作者:大红袍
--  发布时间:2015/5/12 10:07:00
--  
以下是引用blackzhu在2015/5/12 9:21:00的发言:
另外一个 我还写了修改状态和新增状态的判断  但是居然新增状态和修改状态会全部判断一次,这是怎么回事?

 

有这个判读不就好了?没什么问题啊。