我用Access外部数据源,表中有_SortKey列,每次加载表时只是按条件部分加载,向表中写数据是用一个窗口,窗口中控件没有与表中列关联,而是在“保存”按钮里写如下代码:
Dim s1 as Date =e.Form.Controls("DateTimePicker1").Value
……
Tables("表A").AddNew()
Dim dr as row =Tables("表A").Current
dr("列一“)=s1
……
Tables("表A").Save()
这样写结果是:每次新添一行并保存后,_SortKey值都是一样的。后来我把 Tables("表A").AddNew() 换成Syscmd.Row.AddNew()后_SortKey值又开始递增,不重复了。请问这是什么原因,难道Tables("表A").AddNew() 和Syscmd.Row.AddNew() 功能不相同。
[此贴子已经被作者于2010-4-23 20:01:38编辑过]
由于后来增加了插入行功能,估计导致了Tables("表A").addnew()出现bug,因为Tables("表A").addnew()无法事先判断没有加载的行,而导致_SortKey列在table新增的行和未加载的行的值重复。
建议贺老师改进,_SortKeytable生成值直接到后台比较,按需输入值。
我测试都是递增的,没有重复的_SortKey值,再说,_SortKey也不可能出现重复值吧。 不好意思我时在内部表测试的。
[此贴子已经被作者于2010-4-23 20:11:56编辑过]
以下是引用程兴刚在2010-4-23 20:14:00的发言:
只有部分加载才会出现。
哦,怪不得呢,昨日我新增行没有按我的意思增,原来是加载数据再新增会有bug.
应该将加载进来的最大_SortKey值,和数据源中最大的_SortKey值比较,增加行时取两者更大的值+1。
另外,如果经过排序后,在当前行插入行时,刚好碰上上一行是两者最大值时(或者当前行和上一行的_SortKey不是连续的),不知插入的行的_SortKey值怎么来确定了···