Foxtable(狐表)用户栏目专家坐堂 → 隔行保存?


  共有2511人关注过本帖树形打印复制链接

主题:隔行保存?

帅哥哟,离线,有人找我吗?
czy66ds
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1691 积分:16460 威望:0 精华:0 注册:2013/7/31 13:03:00
隔行保存?  发帖心情 Post By:2016/6/4 9:16:00 [只看该作者]

发一个项目文件:
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:隔行保存.foxdb


窗口1为录入窗口,想实现的功能是不保存空行。假如新增7行,前六行非空,保存后竟然只保存了1、3、5行,不知何故?

 回到顶部
帅哥哟,离线,有人找我吗?
Hyphen
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:5015 积分:25363 威望:0 精华:0 注册:2015/8/18 9:21:00
  发帖心情 Post By:2016/6/4 10:59:00 [只看该作者]

Dim tbl As Table = e.Form.Controls("Table3").Table
Dim r As Row
For Each r In tbl.Rows
    Dim isnull As Boolean = True
    For Each c As Col In tbl.Cols
        If r.IsNull(c.name) = False  Then
            isNull = False
            Exit For
        End If
    Next
    If isnull Then
        r.Delete
    End If
Next
tbl.DataTable.Save
tbl.DataTable.RemoveFor("")

 回到顶部
帅哥哟,离线,有人找我吗?
czy66ds
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1691 积分:16460 威望:0 精华:0 注册:2013/7/31 13:03:00
  发帖心情 Post By:2016/6/4 11:33:00 [只看该作者]

谢谢,测试通过。
我的代码有什么毛病?

 回到顶部
帅哥哟,离线,有人找我吗?
jspta
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1732 积分:11266 威望:0 精华:0 注册:2011/12/15 22:06:00
  发帖心情 Post By:2016/6/4 11:35:00 [只看该作者]

Dim tbl As Table = e.Form.Controls("Table3").Table
Dim r As Row
For intA as integer = tbl.rows.count-1 to 0 step -1
    dim r as row = tbl.rows(intA)
    Dim isnull As Boolean = True
    For Each c As Col In tbl.Cols
        If r.IsNull(c.name) = False  Then
            isNull = False
            Exit For
        End If
    Next
    If isnull Then
        r.Delete
    End If
Next
tbl.DataTable.Save
tbl.DataTable.RemoveFor("")

 回到顶部
帅哥哟,离线,有人找我吗?
Hyphen
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:5015 积分:25363 威望:0 精华:0 注册:2015/8/18 9:21:00
  发帖心情 Post By:2016/6/4 15:02:00 [只看该作者]

二个解决方法,一是循环改为DataTable的DataRow,二是窗口表的sel ect语句加上_SortKey,如sel ect [_Identify],[_SortKey],第一列,第二列 from {表A} where 1=2

窗口表没有_SortKey,table是属于排序表,默认是按照_SortKey排序的,如果没有_SortKey则按照_Identify排序,保存时由于_Identify会更新为数据库实际的最大值,导致保存后的这行跑到了table表的最后,因此for each 的顺序就乱了,所以双数行就保存不到。而 DataTable顺序不会改变,因此不会有这个问题。测试中去掉这句代码CurrentTable.DataTable.RemoveFor("")就可以看到效果了

Dim tbl As Table = e.Form.Controls("Table3").Table
Dim r As DataRow
For Each r In tbl.DataTable.DataRows
    Dim isnull As Boolean = True
    For Each c As Col In tbl.Cols
        If r.IsNull(c.name) = False  Then
            isNull = False
            Exit For
        End If
    Next
    If isnull = False  Then
        r.Save
    End If    
Next

'CurrentTable.DataTable.Save
CurrentTable.DataTable.RemoveFor("")

 回到顶部