以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  重置列就死机  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=57826)

--  作者:hubin998
--  发布时间:2014/10/5 11:07:00
--  重置列就死机
老师好,节日愉快!
我有个表80000行数据,资产代码是从资产代码库中自动索引,我在datachanged中输入了代码,单个输入没有问题,我重置列就死机,请高手教我如何在命令窗口或直接用SQL语句学习,谢谢!
If e.DataCol.Name = "资产分类名称" Then  \'当前表  当前列的名字固定了
    For Each shujuyuan As Row In Tables("资产分类代码表").Rows   \'在【数据源】表的所有行中去找
        If e.DataRow("资产分类名称") = shujuyuan("资产分类") Then  \'如果当前行的某个值和数据源表的某个值相符合
            e.DataRow("资产分类代码") = shujuyuan("四级代码")  \'数据源的第一个赋值
            e.DataRow("卡片类型") = shujuyuan("一级代码名称")  \'数据源的第二个赋值
            Exit For  \'这个很关键,如果不结束,就会一直找到最后面,
Else
            e.DataRow("资产分类代码") = Nothing \'数据源的第一个赋值
            e.DataRow("卡片类型") = Nothing  \'数据源的第二个赋值
        End If
    Next
End If

--  作者:有点甜
--  发布时间:2014/10/5 11:10:00
--  
If e.DataCol.Name = "资产分类名称" Then  \'当前表  当前列的名字固定了
    Dim fdr As DataRow = DataTables("资产分类代码表").Find("资产分类 = \'" & e.DataRow("资产分类名称") & "\'")
    If fdr IsNot Nothing Then  \'如果当前行的某个值和数据源表的某个值相符合
        e.DataRow("资产分类代码") = fdr("四级代码")  \'数据源的第一个赋值
        e.DataRow("卡片类型") = fdr("一级代码名称")  \'数据源的第二个赋值
    Else
        e.DataRow("资产分类代码") = Nothing \'数据源的第一个赋值
        e.DataRow("卡片类型") = Nothing  \'数据源的第二个赋值
    End If
End If

--  作者:hubin998
--  发布时间:2014/10/6 11:17:00
--  
谢谢老师!国庆都帮我解决难题,为啥这样效率会提高?
--  作者:有点甜
--  发布时间:2014/10/6 11:18:00
--  
  这样不会重复查找,find函数的效率比自己循环的效率要高。