以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 某条记录在DataTables能找到但是Tables找不到? (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=116137) |
-- 作者:huangxueyao -- 发布时间:2018/3/20 14:21:00 -- 某条记录在DataTables能找到但是Tables找不到? Dim Result As DialogResult Result = MessageBox.Show("导入的Excel必须是在系统中导出的,否则会出错!存在相同记录时将进行略过", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) If Result = DialogResult.ok Then Dim dlg As New OpenFileDialog \'定义一个新的OpenFileDialog dlg.Filter= "excel文件|*.xls|Excel2007文件|*.xlsx" \'设置筛选器 If dlg.ShowDialog = DialogResult.Ok Then \'如果用户单击了确定按钮 Dim Book As New XLS.Book(dlg.FileName) Dim Sheet As XLS.Sheet = Book.Sheets(0) Dim c As Integer = 0 Tables("订单表").StopRedraw() forms("独-正在更新").open \'注意以下数组中列名称的顺序,必须和Excel表中的列顺序一致 Dim nms() As String = {"下单日期","客户编码","客户名称","客户序号","物料编码","物料名称","规格","单位","需求量","分配量","实发量","实收量","物料备注","物料类别","订单状态","订单备注","订单编号","结算量","同步状态","分拣部","编辑者"} \'注意下面的循环变量从1开始,而不是从0开始,因为Excel表的第一行是标题 Dim k1 As String = "" Dim k2 As String = "" Dim st9 As String = "" For n As Integer = 1 To Sheet.Rows.Count -1 If sheet(n,16).value <> k2 Then Dim dr99 As DataRow dr99=DataTables("订单表").fi nd("订单编号= \'" & sheet(n,16).value & "\'") If dr99 Is Nothing Then Dim wz As Integer = Tables("订单表").FindRow(dr99) If wz >= 0 Then MessageBox.show(wz) Else MessageBox.show("没找到") End If k1 = "no" \'如果存在相同的单号,就设为否 k2 = sheet(n,16).value st9 = st9 & vbcrlf & sheet(n,16).value & "【此订单系统中已存在,无法重复导入】" Else k1 = "ok" k2 = sheet(n,16).value End If End If 实际上我们导入的excel表里面的单号是全新的,但是 dr99=DataTables("订单表").fi nd("订单编号= \'" & sheet(n,16).value & "\'") 在这一句的dr99都会存在, 这个是什么原因? 在BeforeLoadOuterTable中有设置: If e.DataTableName = "订单表" Then e.Se lectString = "Se lect * From {订单表} Where [结算量] Is Null" End If 会跟这个有关系?
|
-- 作者:有点甜 -- 发布时间:2018/3/20 15:25:00 -- 很正常,弹出你筛选条件看看
msgbox(Tables("订单表").Filter)
如果你订单表设置了filter,数据自然比DataTable的数据要少了。 |
-- 作者:huangxueyao -- 发布时间:2018/3/20 18:55:00 -- 关键是我非常确定我导入的数据中,是数据库中不存在的订单编号,也就是全新的订单编号 最奇怪的是下面这个测试,第一个消息框正常,第二个消息框就出错,显示对象错误了。
If sheet(n,16).value <> k2 Then Dim dr99 As DataRow dr99=DataTables("订单表").find("订单编号= \'" & sheet(n,16).value & "\'") If dr99 Is Nothing Then msgbox("1") msgbox(dr99("订单编号")) k1 = "no" \'如果存在相同的单号,就设为否 k2 = sheet(n,16).value st9 = st9 & vbcrlf & sheet(n,16).value & "【此订单系统中已存在,无法重复导入】" Else k1 = "ok" k2 = sheet(n,16).value End If End If |
-- 作者:有点甜 -- 发布时间:2018/3/20 19:07:00 -- If dr99 Is Nothing Then 这个判断,是判断不存在的,既然不存在,你怎么可以引用其编号列?你要AddNew一行吧? |