以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  隔行保存?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=85868)

--  作者:czy66ds
--  发布时间:2016/6/4 9:16:00
--  隔行保存?
发一个项目文件:
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:隔行保存.foxdb


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

--  作者:Hyphen
--  发布时间: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
--  发布时间:2016/6/4 11:33:00
--  
谢谢,测试通过。
我的代码有什么毛病?

--  作者:jspta
--  发布时间: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
--  发布时间: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("")