Foxtable(狐表)用户栏目专家坐堂 → 两个表比对数据,想将找到的数据显示,不相同的数据不显示,代码运行:未将对象引用设置到对象的实例,麻烦老师帮忙看看!


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

主题:两个表比对数据,想将找到的数据显示,不相同的数据不显示,代码运行:未将对象引用设置到对象的实例,麻烦老师帮忙看看!

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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
两个表比对数据,想将找到的数据显示,不相同的数据不显示,代码运行:未将对象引用设置到对象的实例,麻烦老师帮忙看看!  发帖心情 Post By:2021/11/16 2:06:00 [只看该作者]


两个表比对数据,想将找到的数据显示,不相同的数据不显示,代码运行:未将对象引用设置到对象的实例,麻烦老师帮忙看看!谢谢图片点击可在新窗口打开查看图片点击可在新窗口打开查看

比对数据按钮代码:
Dim c1 As WinForm.ComboBox = e.Form.Controls("ComboBox1")
Dim c2 As WinForm.ComboBox = e.Form.Controls("ComboBox2")
Dim c3 As WinForm.ComboBox = e.Form.Controls("ComboBox3")
Dim c4 As WinForm.ComboBox = e.Form.Controls("ComboBox4")
Dim cm As WinForm.ComboBox = e.Form.Controls("ComboBox7")
Vars("btname2")=cm.Text
Tables("主窗体_Table3").DataSource = DataTables(Vars("btname2"))
vars("表名")=c1.Text
vars("获取值集合")=c2.Text
vars("表名1")=c3.Text
vars("获取值集合1")=c4.Text
Dim dr1 As DataRow
Dim s As String
Dim Products As List(Of String)
Products = DataTables(vars("表名")).GetValues(vars("获取值集合"))
For Each Product As String In Products
    s=  vars("获取值集合1") & "=" & "'" & Product & "'"

    dr1 = DataTables(vars("表名1")).Find(s)
    If dr1 IsNot Nothing Then '如果找到的话

    Else
        dr1.DataTable.DeleteFor(s)
    End If
Next

错误提示:
.NET Framework 版本:4.0.30319.42000
Foxtable 版本:2020.5.29.8
错误所在事件:窗口,主窗体,比对数据,Click
详细错误信息:
未将对象引用设置到对象的实例。

麻烦老师帮忙看看  上述代码是哪里有误呢?谢谢!
[此贴子已经被作者于2021/11/16 2:11:24编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111408 积分:567110 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/11/16 8:40:00 [只看该作者]

去掉Else

理解一下下面代码的区别

msgbox(dr1 IsNot Nothing)
msgbox(dr1 Is Nothing)

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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)去掉Else理解一下下面代码的区别msgb...  发帖心情 Post By:2021/11/16 9:57:00 [只看该作者]

去掉之后也是一样的提示

Dim c1 As WinForm.ComboBox = e.Form.Controls("ComboBox1")
Dim c2 As WinForm.ComboBox = e.Form.Controls("ComboBox2")
Dim c3 As WinForm.ComboBox = e.Form.Controls("ComboBox3")
Dim c4 As WinForm.ComboBox = e.Form.Controls("ComboBox4")
vars("表名")=c1.Text
vars("获取值集合")=c2.Text
vars("表名1")=c3.Text
vars("获取值集合1")=c4.Text
Dim dr1 As DataRow
Dim s As String
Dim Products As List(Of String)
Products = DataTables(vars("表名")).GetValues(vars("获取值集合"))
For Each Product As String In Products
    s=  vars("获取值集合1") & "=" & "'" & Product & "'"

    dr1 = DataTables(vars("表名1")).Find(s)
    If dr1 Is Nothing Then '如果找到的话

    'Else
        dr1.DataTable.DeleteFor(s)
    End If
Next

是不是红色部分代码没有写对呢?

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111408 积分:567110 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/11/16 10:13:00 [只看该作者]

神仙啊,让你去掉Else,没让你改其它代码啊。如果改成dr1 Is Nothing就不要去掉else。麻烦认真理解一下下面代码的区别好吗

msgbox(dr1 IsNot Nothing)
msgbox(dr1 Is Nothing)

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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)神仙啊,让你去掉Else,没让你改其它...  发帖心情 Post By:2021/11/16 11:49:00 [只看该作者]

谢谢老师   换个思路方式实现了对应的查找   如何就找到的数据进行新创建一个表 ,保持表结构一致,数据只显示找到的数据,代码怎么写呢?还得继续麻烦老师指导下!谢谢
当前的代码如下:
Dim c1 As WinForm.ComboBox = e.Form.Controls("ComboBox1")
Dim c2 As WinForm.ComboBox = e.Form.Controls("ComboBox2")
Dim c3 As WinForm.ComboBox = e.Form.Controls("ComboBox3")
Dim c4 As WinForm.ComboBox = e.Form.Controls("ComboBox4")
vars("表名")=c1.Text
vars("获取值集合")=c2.Text
vars("表名1")=c3.Text
vars("获取值集合1")=c4.Text
Dim dr1 As Integer
Dim s As String
Dim Products As List(Of String)
Products = DataTables(vars("表名")).GetValues(vars("获取值集合"),"","_Identify")
For Each Product As String In Products
    s=  vars("获取值集合1") & "=" & "'" & Product & "'"
    StatusBar.Message1 = "【" & vars("表名") & "】"& s  & "【" & vars("表名1") & "】"
    dr1 = Tables(vars("表名1")).FindRow(s)
    If dr1>0 Then '如果找到的话
        StatusBar.Message2 = "找到数据" & Product
        
        
        '如何新建一个临时表,让表结构与Tables(vars("表名1"))结构一样,新增当前找到的数据项内容
    Else
        StatusBar.Message3 = "没有找到数据" & Product
    End If
Next

 回到顶部
帅哥,在线噢!
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


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


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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)建表参考:http://www.foxtable.com/...  发帖心情 Post By:2021/11/16 12:58:00 [只看该作者]

Dim dtb As New DataTableBuilder("比对表")
Dim cnt As Integer = DataTables(vars("表名2")).DataCols.Count - 1
Dim cnt2 As Integer = DataTables(vars("表名")).DataCols.Count - 1
Dim nms(cnt-1) As String
Dim nms2(cnt2-1) As String
For i As Integer = 0 To cnt - 1
    nms(i) = DataTables(vars("表名2")).DataCols(i).name
    dtb.AddDef(nms(i), Gettype(String), 255)
    For i2 As Integer = 0 To cnt2 - 1
        nms2(i2) = DataTables(vars("表名")).DataCols(i2).name
        If nms2(i2).Contains(vars("获取值集合"))
        Else
            dtb.AddDef(nms2(i2), Gettype(String), 255)
        End If
    Next
Next
dtb.Build()

老师根据帮助指导  我想从表名和表名2中获取他们的所有列字段,组合成新的对比表这个临时表,上述红色代码总是提示表名中的字段已经存在,麻烦老师帮忙看看怎么修正呢,红色部分如果去掉,则会生成临时表,反之就提示字段已经存在,无法生成临时表

 回到顶部
帅哥,在线噢!
有点蓝
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111408 积分:567110 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/11/16 13:31:00 [只看该作者]

分开处理,先遍历第一个表生成列。在重新遍历第二个表,判断是否存在列参考:http://www.foxtable.com/webhelp/topics/1428.htm

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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)分开处理,先遍历第一个表生成列。在...  发帖心情 Post By:2021/11/16 14:24:00 [只看该作者]

    谢谢老师的思路  调整如下  顺利生成了临时表

    Dim dtb As New DataTableBuilder("比对表")
    Dim cnt As Integer = DataTables(vars("表名2")).DataCols.Count 
    Dim cnt2 As Integer = DataTables(vars("表名")).DataCols.Count 
    Dim nms(cnt-1) As String
    Dim nms2(cnt2-1) As String
    For i As Integer = 0 To cnt-1
        nms(i) = DataTables(vars("表名2")).DataCols(i).name
        dtb.AddDef(nms(i), Gettype(String), 255)
    Next
    For i2 As Integer = 0 To cnt2 - 1
        nms2(i2) = DataTables(vars("表名")).DataCols(i2).name
        dtb.AddDef(nms2(i2), Gettype(String), 255)
    Next
    dtb.Build()
    tb3.Table.DataSource = DataTables("比对表")

 回到顶部