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


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

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

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


加好友 发短信
等级:四尾狐 帖子:966 积分:6938 威望: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地址的那种相对路径就可以了?


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


加好友 发短信
等级:四尾狐 帖子:966 积分:6938 威望:0 精华:0 注册:2009/6/24 9:44:00
  发帖心情 Post By:2021/4/5 22:24:00 [显示全部帖子]

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

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


加好友 发短信
等级:四尾狐 帖子:966 积分:6938 威望: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中。


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


加好友 发短信
等级:四尾狐 帖子:966 积分:6938 威望: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
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:966 积分:6938 威望: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编辑过]

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


加好友 发短信
等级:四尾狐 帖子:966 积分:6938 威望:0 精华:0 注册:2009/6/24 9:44:00
  发帖心情 Post By:2021/4/6 22:19:00 [显示全部帖子]

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

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


加好友 发短信
等级:四尾狐 帖子:966 积分:6938 威望:0 精华:0 注册:2009/6/24 9:44:00
  发帖心情 Post By:2021/4/6 22:55:00 [显示全部帖子]


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

图片点击可在新窗口打开查看此主题相关图片如下:qq图片20210327092138.png
图片点击可在新窗口打开查看
看了,我这边都是不带1的,只有数据库带1
图片点击可在新窗口打开查看此主题相关图片如下:11.png
图片点击可在新窗口打开查看

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


加好友 发短信
等级:四尾狐 帖子:966 积分:6938 威望:0 精华:0 注册:2009/6/24 9:44:00
  发帖心情 Post By:2021/4/6 23:14:00 [显示全部帖子]

那我现在为什么还能正常运行,我在数据库中直接改表名,再启动软件还说找不到表了

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


加好友 发短信
等级:四尾狐 帖子:966 积分:6938 威望:0 精华:0 注册:2009/6/24 9:44:00
  发帖心情 Post By:2021/4/6 23:25:00 [显示全部帖子]

主表这个已经被我改过来了,目前没问题。现在运行之前的代码,报错如下:.NET Framework 版本:4.0.30319.42000
Foxtable 版本:2020.5.29.8
错误所在事件:窗口,主表,Button3,Click
详细错误信息:
Exception has been thrown by the target of an invocation.
Object reference not set to an instance of an object.


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


加好友 发短信
等级:四尾狐 帖子:966 积分:6938 威望:0 精华:0 注册:2009/6/24 9:44:00
  发帖心情 Post By:2021/4/6 23:33:00 [显示全部帖子]

If Connections.Contains("test") = False
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.C
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
End If

我把end if放后边了,现在点按钮没反应,目标数据库里也没有应该增加的数据。

 回到顶部
总数 15 1 2 下一页