以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  后台新增  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=110410)

--  作者:刘林
--  发布时间:2017/12/2 11:29:00
--  后台新增
老师为提高保存速度,我用sqladdnew 保存后加载,但我感觉用户体验不好,能不能新增一行后就加载所新增的当前行
--  作者:有点蓝
--  发布时间:2017/12/2 11:31:00
--  
参考:http://www.foxtable.com/webhelp/scr/1933.htm

使用AppendLoad方法

--  作者:刘林
--  发布时间:2017/12/2 12:06:00
--  
If js.Contains("教务主任") Then
    Dim njdh As String
    Dim bjdh As String
    Dim dt As Table = Tables("初中报名_table2")
    If dt.Rows.count>0
        Dim p As WinForm.ProgressBar
        p = e.Form.Controls("ProgressBar1")
        p.Maximum = dt.Rows.Count \'设置最大值
        p.Minimum = 0 \'设置最小值
        p.Value = 0 \'设置当前值
        Dim dwmc As String = _usergroup
        Dim com4 As String =  e.Form.Controls("combobox4").text
        If  com4 > ""
            Dim Cols1() As String = {"学校名称","年级","班级","学生姓名","学生ID","身份证件号","学籍号","班级"}
            Dim Cols2() As String = {"单位名称","年级代码","班级","姓名","学生ID","身份证件号","学籍号","班级全称"}
            Dim su As Integer = 0
            Dim dr2 As DataRow
            For Each dr1 As Row In dt.Rows
                Dim Filter As String = ""
                If dr1.IsNull("身份证件号") Then
                    filter = "身份证件号 is Null and 姓名 = \'" & dr1("学生姓名") & "\' and 班级全称=\'" & dr1("班级") & "\'"
                Else
                    filter = "身份证件号 = \'" & dr1("身份证件号") & "\' and 姓名 =  \'" & dr1("学生姓名") & "\' and 班级全称= \'" & dr1("班级") & "\'"
                End If
                dr2 = DataTables("成绩").Find(filter)
                If dr2 Is Nothing Then dr2 = DataTables("成绩").sqlAddNew()
                For i As Integer = 0 To Cols1.Length -1
                    Select Case i
                        Case 0
                            dr2(Cols2(i)) = dr1(Cols1(i))
                        Case 1
                            dr2(Cols2(i)) = trim(str(val(dr1(Cols1(i)).Substring(4,2)+3)))
                            njdh =trim(str(val(dr1(Cols1(i)).Substring(4,2)+3)))
                        Case 3,4,5,6
                            dr2(Cols2(i)) = dr1(Cols1(i))
                        Case 7
                            dr2(Cols2(i)) = dr1(Cols1(i))
                            Dim c() As Char = {"级", "班"}
                            Dim str As String = dr1(Cols1(i))
                            If str > "" Then
                                Dim s1() As String = str.Split(c)
                                If s1.length >= 2 AndAlso s1(0).length >= 6 Then
                                    bjdh= s1(1) .PadLeft(2,"0")
                                End If
                            End If
                    End Select
                Next
                dr2("考试名称") = com4
                dr2("免统审核") = False
                dr2("学段")="初中"
                Dim dr As DataRow
                dr = DataTables("学校信息").Find("单位全称 = \'" & _usergroup & "\'and 学段 = \'初中\'" )
                If dr IsNot Nothing
                    dr2("学校")= dr("单位")
                    dr2("学校代码")= dr("学校代码")
                    dr2("类别") = dr("类别")
                    Dim year As String = trim(com4.Substring(0,2))
                    Dim v As Integer = cint(year)
                    Dim ji As String = com4.Substring(2,1)
                    Dim j As Integer
                    If ji = "春"
                        j = 0
                    End If
                    If ji = "秋"
                        j = 1
                    End If
                    dr2("年级") = trim(str(v - val(trim(njdh)) + j +9))
                    dr2("学校班级") = dr("学校班级用简称") & trim(str(v - val(trim(njdh)) + j +9)) & "." & bjdh
                End If
               dr2.save
                Dim id As Integer = DataTables("成绩").Compute("Max(_Identify)")
                Dim Filter1 As String = "[_Identify] > " & id
                DataTables("成绩").AppendLoad(Filter1)
                DataTables("成绩").load
                su = su +1
                p.Value = su
            Next
            
            \'  Dim sux As String = "本次新增或修改报名学生共计" & su & "人"
            \' MessageBox.show(sux,"导入总计",MessageBoxButtons.OK)
            \'   DataTables("成绩").loadfilter = "考试名称 =\'"& com4 &"\' and 单位名称 = \'"& _usergroup &"\' And 学段 =\'初中\'"
            \'DataTables("成绩").load
            
            p.Value = 0
            Dim dt2 As Table = Tables("初中报名_table1")
            e.Form.Controls("Label2").text = "初中考号表" & su & "个学生名单"
            Dim lbl1 As WinForm.Label = e.Form.Controls("Label1")
            Dim lbl2 As WinForm.Label = e.Form.Controls("Label2")
            If e.Form.Controls("table1").width > lbl1.Width
                lbl1.Left = (e.Form.Controls("table1").width - lbl1.Width ) / 2
            End If
            If e.Form.Controls("table2").width > lbl2.Width
                lbl2.Left = (e.Form.Controls("table2").width - lbl2.Width ) / 2
            End If
        Else
            MessageBox.show("考试名称不能为空","提示",MessageBoxButtons.OK)
        End If
    Else
        MessageBox.show("你没有选择好要报考的学生,请选择好参考学生学生","提示",MessageBoxButtons.OK)
        
    End If
Else
    MessageBox.show("业务主管方可办理","提示",MessageBoxButtons.OK)
End If
Dim dt1 As DataTable = DataTables("成绩")
Dim cb1 As WinForm.ComboBox = e.form.Controls("ComboBox1")
cb1.ComboList =" |" & dt1.GetComboListString("年级")


老师,用这个方式为什么要死机呢,是什么原因,该怎样写,我的想法是后台新增一条就加载一条


--  作者:有点蓝
--  发布时间:2017/12/2 12:20:00
--  
如果循环的次数多,使用sqladdnew 后台逐条新增,比在窗口编辑完毕然后一起保存(datatable.save)的效率还要低得多多多
--  作者:刘林
--  发布时间:2017/12/2 12:36:00
--  
我测试了更快,因为用datatable.save,记录少还好办,越多保存时间会几何倍增,用addnew是单条记录时间一定,现在就是想仿addnew效果,增加一条当前表就多显示一行
--  作者:有点蓝
--  发布时间:2017/12/2 14:13:00
--  
Dim id As Integer = DataTables("成绩").Compute("Max(_Identify)")
Dim Filter1 As String = "[_Identify] > " & id
DataTables("成绩").AppendLoad(Filter1)
DataTables("成绩").load

改为

DataTables("成绩").AppendLoad(filter)