以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  AppendLoad报错  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=21212)

--  作者:飞
--  发布时间:2012/7/5 14:58:00
--  AppendLoad报错

今天在一个表中使用AppendLoad报错,提示框如下(使用Load时候正常)

 


图片点击可在新窗口打开查看此主题相关图片如下:appendload报错.png
图片点击可在新窗口打开查看

[此贴子已经被作者于2012-7-5 14:57:58编辑过]

--  作者:程兴刚
--  发布时间:2012/7/5 15:06:00
--  
把AppendLoad整段代码贴出来看看!
--  作者:飞
--  发布时间:2012/7/5 15:24:00
--  

Dim Dt1 As Date = DataTables(e.Form.Name & "_Tbl_Main").Compute("Max(时间)")

Dim Filter As String = "时间 > \'" & Dt1 & "\'"
msgbox(filter)
DataTables(e.Form.Name & "_Tbl_Main").AppendLoad(Filter ,False)


--  作者:程兴刚
--  发布时间:2012/7/5 15:45:00
--  

这样试一试:

 

Dim Dt1 As Date = DataTables(e.Form.Name & "_Tbl_Main").Compute("Max(时间)")

Dim Filter As String = "[时间] > \'" & Dt1 & "\'"
msgbox(filter)
DataTables(e.Form.Name & "_Tbl_Main").AppendLoad(Filter ,False)


--  作者:程兴刚
--  发布时间:2012/7/5 15:52:00
--  

或者这样:

 

Dim Dt1 As Date = DataTables(e.Form.Name & "_Tbl_Main").Compute("Max(时间)")

Dim Filter As String = "[时间] > \'" & Dt1 & "\'"
Dim
drs As List(Of DataRow)
drs = DataTables(e.Form.Name & "_Tbl_Main").Select(Filter)

if drs.Count > 0

   Messagebox.Show("数据已经存在于表中,不能追加!")

else

    DataTables(e.Form.Name & "_Tbl_Main").AppendLoad(Filter ,False)

end if


--  作者:狐狸爸爸
--  发布时间:2012/7/5 15:58:00
--  

必须把握一条原则: 新追载的数据在不存在于已经加载的数据中,才能追载。


--  作者:程兴刚
--  发布时间:2012/7/5 16:00:00
--  
哈哈,我好不容易抢一次先!
--  作者:程兴刚
--  发布时间:2012/7/5 16:19:00
--  

不过,建议贺老师改进,AppendLoad中自动判断这些符合条件的行是否已经存在于datatable中(存在不追载,均不存在则加载,部分存在,则忽略追载已经存在的行)!

 

由此可见,5楼的代码还不严谨,最好是先移除符合条件的行再追载,这样避免只存在部分行而不能追载的情况!

[此贴子已经被作者于2012-7-5 16:19:30编辑过]

--  作者:狐狸爸爸
--  发布时间:2012/7/6 8:00:00
--  
这样不是不可以,但是效率比较差,所以还是自己编程的时候,做得严谨一点比较好。
--  作者:飞
--  发布时间:2012/7/6 9:23:00
--  
找到原因了,原本是SQLQuery型Table不能使用AppendLoad,改成SQLTable就正常了