以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  数据源手动合并问题  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=162080)

--  作者:ycs5801
--  发布时间:2021/4/5 0:46:00
--  数据源手动合并问题

例如项目中有一个员工表,要从一个外部文件中合并数据到这个员工表中,希望在合并过程中检查身份证号码,如果员工表已经存在相同身份证号码的行,则跳过此行。
假定被合并的表和员工表的结构相同,代码如下:

Dim cmd As New SQLCommand
Dim
dt As DataTable
cmd.ConnectionName =
"数据源名称"
cmd.CommandText =
"SEL ECT * From {员工}"
dt = cmd.ExecuteReader()

For
Each dr As DataRow In dt.DataRows
    If
DataTables("员工").Find("身份证号码 = \'" & dr("身份证号码") & "\'") Is Nothing Then
        Dim
nr As DataRow = DataTables("员工").AddNew()
        For
Each dc As DataCol In dt.DataCols
            nr(dc.name) = dr(dc.name)

        Next
    End
If
Next


以上是帮助中摘抄一段,目的是手动合并数据库文件,问题是:如果在局域网操作,代码的第三行中的"数据源名称",是不是应该改为带有ip地址的那种相对路径就可以了?


--  作者:有点蓝
--  发布时间:2021/4/5 21:06:00
--  
不是的,这个"数据源名称"指的是菜单外部数据源设置中添加的数据源名称。如果没有在外部数据源设置中添加,也可以临时添加一个数据源,参考:http://www.foxtable.com/webhelp/topics/1944.htm
--  作者:ycs5801
--  发布时间:2021/4/5 22:24:00
--  
如果是这样我有个问题,假如我的客户端在外边采集数据之后,关闭了软件,再打开之后可能没有把采集的数据加载进来,这样再把数据库改为新的数据库,最后会不会造成采集的数据没有正确上传?
--  作者:有点蓝
--  发布时间:2021/4/5 22:56:00
--  
既然知道那就在打开的时候把数据加载进来呀
--  作者:ycs5801
--  发布时间:2021/4/6 13:33:00
--  

Dim cmd As New SQLCommand

Dim dt As DataTable
cmd.ConnectionName = "数据源名称"
cmd.CommandText = "SEL ECT * From {主表} where 1=2"
dt = cmd.ExecuteReader(True)
For Each dr As DataRow In DataTables("主表").DataRows
    If dt.Find("主表编号= \'" & dr("主表编号") & "\'") Is Nothing Then
        Dim nr As DataRow = dt.AddNew()
        For Each dc As DataCol In DataTables("主表").DataCols
            nr(dc.name) = dr(dc.name)
        Next
    End If
Next
dt.save


以上代码为将本地数据合并到外部数据源中的操作,现在如果通过主表编号又关联了一个关联表B,关联表B又关联了一个关联表C,怎样设计成将主表数据汇总上去后,同时将关联表B、C中对应的关联行也同时汇总到对应的B、C中。


--  作者:有点蓝
--  发布时间:2021/4/6 14:13:00
--  
同样的方法,根据编号获取B、C的数据

Dim cmd As New SQLCommand

Dim dt As DataTable
cmd.ConnectionName = "数据源名称"
cmd.CommandText = "SEL ECT * From {主表} where 1=2"
dt = cmd.ExecuteReader(True)

cmd.CommandText = "SEL ECT * From {表B} where 1=2"
Dim dt2 As DataTable = cmd.ExecuteReader(True)

For Each dr As DataRow In DataTables("主表").DataRows
    If dt.Find("主表编号= \'" & dr("主表编号") & "\'") Is Nothing Then
        Dim nr As DataRow = dt.AddNew()
        For Each dc As DataCol In DataTables("主表").DataCols
            nr(dc.name) = dr(dc.name)
        Next
For Each dr2 As DataRow In DataTables("表B").select("主表编号= \'" & dr("主表编号") & "\'")
        Dim nr2 As DataRow = dt2.AddNew()
        For Each dc2 As DataCol In DataTables("表B").DataCols
            nr2(dc2.name) = dr2(dc.name)
        Next
next
    End If
Next

--  作者:ycs5801
--  发布时间:2021/4/6 21:42:00
--  
Connections.Add("test","Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\data.mdb;Persist Security Info=False")




Dim cmd As New SQLCommand
Dim dt As DataTable
cmd.Connecti
cmd.CommandText = "SEL ECT * From {主表} where 1=2"
dt = cmd.ExecuteReader(True)
cmd.CommandText = "SEL ECT * From {操作表} where 1=2"
Dim dt2 As DataTable = cmd.ExecuteReader(True)
cmd.CommandText = "SEL ECT * From {压舱水} where 1=2"
Dim dt3 As DataTable = cmd.ExecuteReader(True)
cmd.CommandText = "SEL ECT * From {淡水} where 1=2"
Dim dt4 As DataTable = cmd.ExecuteReader(True)

For Each dr As DataRow In DataTables("主表").DataRows
    If dt.Find("sureyid= \'" & dr("sureyid") & "\'") Is Nothing Then
        Dim nr As DataRow = dt.AddNew()
        For Each dc As DataCol In DataTables("主表").DataCols
            nr(dc.name) = dr(dc.name)
        Next
        
        For Each dr2 As DataRow In DataTables("操作表").Select("sureyid= \'" & dr("sureyid") & "\'")
            Dim nr2 As DataRow = dt2.AddNew()
            For Each dc2 As DataCol In DataTables("操作表").DataCols
                nr2(dc2.name) = dr2(dc2.name)
            Next
            For Each dr3 As DataRow In DataTables("压舱水").Select("sureyidtimes= \'" & dr2("sureyidtimes") & "\'")
                Dim nr3 As DataRow = dt3.AddNew()
                For Each dc3 As DataCol In DataTables("压舱水").DataCols
                    nr3(dc3.name) = dr3(dc3.name)
                Next
            Next
            For Each dr4 As DataRow In DataTables("淡水").Select("sureyidtimes= \'" & dr2("sureyidtimes") & "\'")
                Dim nr4 As DataRow = dt4.AddNew()
                For Each dc4 As DataCol In DataTables("淡水").DataCols
                    nr4(dc4.name) = dr4(dc4.name)
                Next
            Next
        Next
    End If
Next

按照老师的思路做了一个按钮公式,点击后提示“test”链接已经存在,哪里需要修改呢?
[此贴子已经被作者于2021/4/6 21:44:38编辑过]

--  作者:ycs5801
--  发布时间:2021/4/6 21:45:00
--  

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

[此贴子已经被作者于2021/4/6 21:47:33编辑过]

--  作者:有点蓝
--  发布时间:2021/4/6 21:58:00
--  
if Connections.Contains("test") = false
Connections.Add("test","Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\data.mdb;Persist Security Info=False")
end if

--  作者:ycs5801
--  发布时间:2021/4/6 22:19:00
--  
又报错了,我的数据库中的表名,为什么自动变了?老师以前遇到过吗?我记得我从来没改过啊。
图片点击可在新窗口打开查看此主题相关图片如下:qq图片20210327092138.png
图片点击可在新窗口打开查看