以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  合并数据问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=73224)

--  作者:ccbbdlzj
--  发布时间:2015/8/14 15:22:00
--  合并数据问题

求老师帮助!

 

产品销售记录表,在datacolchenged事件中写入了如下代码:

Select Case e.DataCol.name

    Case "销售日期","三级产品_编号","客户名称","客户编号","推荐人","销售执行人","交易人"

        Dim dr As DataRow = e.DataRow

        If dr.IsNull("客户编号") = False Then

            If dr.IsNull("销售日期") = False AndAlso dr.IsNull("三级产品_编号") = False AndAlso dr.IsNull("客户名称")= False AndAlso dr.IsNull("客户编号")=False AndAlso dr.IsNull("推荐人")= False AndAlso dr.IsNull("销售执行人")=False AndAlso dr.IsNull("交易人")=False Then

                If e.DataTable.Compute("Count([_Identify])","销售日期 = \'" & dr("销售日期") & "\' And 三级产品_编号 = \'" & dr("三级产品_编号") & "\'And 客户名称 = \'" & dr("客户名称") & "\' And 客户编号 = \'"& dr("客户编号") & "\' And 推荐人 = \'" & dr("推荐人") & "\'And 销售执行人 = \'" & dr("销售执行人") & "\'And 交易人 = \'" & dr("交易人") & "\'") > 1 Then

                    MessageBox.Show("已经存在相同的产品销售记录,请核实后录入!","提示",MessageBoxButtons.OKCancel,MessageBoxIcon.Information)

                    e.DataRow(e.DataCol.Name) = e.OldValue \'取消输入

                    e.Cancel = True

                    \'Tables("产品销售记录表").Current.Delete

                End If

            End If

        Else

            If dr.IsNull("销售日期") = False AndAlso dr.IsNull("三级产品_编号") = False AndAlso dr.IsNull("客户名称") = False AndAlso dr.IsNull("推荐人")= False AndAlso dr.IsNull("销售执行人")=False AndAlso dr.IsNull("交易人")=False Then

                If e.DataTable.Compute("Count([_Identify])","销售日期 = \'" & dr("销售日期") & "\' And 三级产品_编号 = \'" & dr("三级产品_编号") & "\'And 客户名称 = \'" & dr("客户名称") & "\' And 推荐人 = \'" & dr("推荐人") & "\'And 销售执行人 = \'" & dr("销售执行人") & "\'And 交易人 = \'" & dr("交易人") & "\'") > 1 Then

                    MessageBox.Show("已经存在相同的产品销售记录,请核实后录入!","提示",MessageBoxButtons.OKCancel,MessageBoxIcon.Information)

                    e.DataRow(e.DataCol.Name) = e.OldValue \'取消输入

                    e.Cancel = True

                    \'Tables("产品销售记录表").Current.Delete

                End If

            End If

        End If

End Select

 

 

用于控制不准输入:“销售日期","三级产品_编号","客户名称","客户编号","推荐人","销售执行人","交易人"  相同的记录。

用如下代码编码合并数据时,总是提示“已经存在相同记录”,求问题在哪?如何解决?谢谢!

 

 

Dim dlg As New OpenFileDialog

\'dlg.Filter= "Excel文件|*.xlsx"

If dlg.ShowDialog = DialogResult.OK Then

    Dim strs As String = dlg.FileName

    Forms("数据导入进度").Open

    Dim khq As Integer

    khq = e.Form.Controls("khq").Value

    Dim dt1 As New Date(khq, 1, 1)

    Dim dt2 As New Date(khq, 12, 31)

    e.Form.close

Dim Book As New XLS.Book(strs) 

Dim  Sheet As XLS.Sheet = Book.Sheets(0)

    \'Tables("产品销售记录表").StopRedraw()

    \'注意以下数组中列名称的顺序,必须和Excel表中的列顺序一致

    Dim nms() As  String = { "销售日期","客户名称","客户编号","销售数量","推荐人","销售执行人","交易人","激活人" ,"激活日期" }

    \'注意下面的循环变量从1开始,而不是从0开始,因为Excel表的第一行是标题

    For  n  As  Integer =  1  To  Sheet.Rows.Count -1

        Dim cpbh  As  String =  "107"  \'sheet(n,1).Text

        Dim khbh As  String = sheet(n,2).Text

        Dim jhr As String = sheet(n,7).Text

        Dim dr As DataRow = DataTables("产品销售记录表").Find("一级产品_编号 = \'" & cpbh & "\' and 客户编号 = \'" & khbh & "\' And 销售日期 >= #" &  dt1 & "# And 销售日期 <= #" &  dt2 & "# ")

        If dr Is Nothing Then \'如果存在同编号的订单

            dr =  DataTables("产品销售记录表").AddNew()

        End If

        If jhr =""  Then

            dr("三级产品_编号") = "107202001"

        Else

            dr("三级产品_编号") = "107201001"

        End If

        For m As Integer = 0 To nms.Length - 1

            dr(nms(m)) = Sheet(n,m).Value

        Next

       

    Next

End If

\'Tables("产品销售记录表").ResumeRedraw()

DataTables("产品销售记录表").DataCols("三级产品_编号").RaiseDataColChanged()

DataTables("产品销售记录表").Save()

Forms("数据导入进度").close

MessageBox.Show("导入成功!")

 


--  作者:大红袍
--  发布时间:2015/8/14 15:59:00
--  

导入数据的时候,如果有重复数据,肯定会提示,这很正常。

 

如果有其它问题做例子上来说明


--  作者:ccbbdlzj
--  发布时间:2015/8/14 16:10:00
--  
可是提示窗口一直存在,不能关闭掉?咋整?
--  作者:大红袍
--  发布时间:2015/8/14 16:16:00
--  

 e.DataRow(e.DataCol.Name) = e.OldValue \'取消输入

 

你把这句代码改成这样

 

SystemReady = False

 e.DataRow(e.DataCol.Name) = e.OldValue \'取消输入

SystemReady = True


--  作者:ccbbdlzj
--  发布时间:2015/8/14 16:38:00
--  
还是不成啊?提示窗口不能关闭!
--  作者:大红袍
--  发布时间:2015/8/14 17:10:00
--  
上传实例。