Foxtable(狐表)用户栏目专家坐堂 → 数据源手动合并问题


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

主题:数据源手动合并问题

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


加好友 发短信
等级:四尾狐 帖子:911 积分:6617 威望:0 精华:0 注册:2009/6/24 9:44:00
数据源手动合并问题  发帖心情 Post By: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地址的那种相对路径就可以了?


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


加好友 发短信
等级:超级版主 帖子:106356 积分:540921 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/4/5 21:06:00 [只看该作者]

不是的,这个"数据源名称"指的是菜单外部数据源设置中添加的数据源名称。如果没有在外部数据源设置中添加,也可以临时添加一个数据源,参考:http://www.foxtable.com/webhelp/topics/1944.htm

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


加好友 发短信
等级:四尾狐 帖子:911 积分:6617 威望:0 精华:0 注册:2009/6/24 9:44:00
  发帖心情 Post By:2021/4/5 22:24:00 [只看该作者]

如果是这样我有个问题,假如我的客户端在外边采集数据之后,关闭了软件,再打开之后可能没有把采集的数据加载进来,这样再把数据库改为新的数据库,最后会不会造成采集的数据没有正确上传?

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


加好友 发短信
等级:超级版主 帖子:106356 积分:540921 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/4/5 22:56:00 [只看该作者]

既然知道那就在打开的时候把数据加载进来呀

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


加好友 发短信
等级:四尾狐 帖子:911 积分:6617 威望:0 精华:0 注册:2009/6/24 9:44:00
  发帖心情 Post By: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中。


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


加好友 发短信
等级:超级版主 帖子:106356 积分:540921 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:911 积分:6617 威望:0 精华:0 注册:2009/6/24 9:44:00
  发帖心情 Post By: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
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:911 积分:6617 威望:0 精华:0 注册:2009/6/24 9:44:00
  发帖心情 Post By:2021/4/6 21:45:00 [只看该作者]


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

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

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


加好友 发短信
等级:超级版主 帖子:106356 积分:540921 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:911 积分:6617 威望:0 精华:0 注册:2009/6/24 9:44:00
  发帖心情 Post By:2021/4/6 22:19:00 [只看该作者]

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

 回到顶部
总数 24 1 2 3 下一页