以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 动态组合表达式 语法错误:“null”运算符后缺少操作数 麻烦老师帮忙指导下 谢谢! (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=173142) |
-- 作者:cnsjroom -- 发布时间:2021/11/16 16:15:00 -- 动态组合表达式 语法错误:“null”运算符后缺少操作数 麻烦老师帮忙指导下 谢谢! 运行错误 当前代码如下:【红色部分为原来的正常使用代码】 Dim s As String Dim l As WinForm.CheckedListBox = e.Form.Controls("CheckedListBox1") For Each Index As Integer In l.CheckedIndices s = s & "," & l.Items(Index) Next s = s.trim(",") Dim cs As String = s Dim idx As String = "" Dim lst As new List(of String) Dim flag As Boolean Dim s1 As String = vars("不为空字段") & "is not null" MessageBox.Show(s1) Dim drs As List(Of DataRow) = DataTables("表A").Select("第一列 is not null", cs) Dim drs As List(Of DataRow) = DataTables(Vars("btname")).Select(s1, cs) MessageBox.Show("1") Dim pdr As DataRow = drs(0) Dim dr As DataRow For i As Integer = 1 To drs.count - 1 dr = drs(i) flag = False For Each c As String In cs.split(",") If pdr(c) <> dr(c) Then flag = True Exit For End If Next If flag = False Then If lst.Contains(pdr("_Identify")) = False lst.add( pdr("_Identify") ) End If lst.add( dr("_Identify") ) End If pdr = dr Next If lst.count > 0 Then idx = String.Join(",",lst.ToArray) Dim s2 As String = s1 & "And _Identify not In (" & idx.trim(",") & ")" MessageBox.Show(s2) Tables("表A").filter = "第一列 is not null and _Identify not in (" & idx.trim(",") & ") " Tables(Vars("btname")).filter = s2 Else MessageBox.Show("没有重复数据!") End If
|
-- 作者:有点蓝 -- 发布时间:2021/11/16 16:22:00 -- Dim s1 As String = vars("不为空字段") & " is not null " |
-- 作者:cnsjroom -- 发布时间:2021/11/16 16:37:00 -- 回复:(有点蓝)Dim s1 As String = vars("不为空字段... 谢谢 按照老师的提醒 修改后现在又提示未找到列 [_Identify]。 是采用如下代码导入的excel表数据 Dim dlg As New OpenFileDialog \'定义一个新的OpenFileDialog dlg.Filter= "Excel97文件|*.xls|Excel2007文件|*.xlsx" \'设置筛选器 If dlg.ShowDialog = DialogResult.Ok Then \'如果用户单击了确定按钮 Dim ip As New Importer ip.SourcePath = dlg.FileName \'指定数据文件\\ Dim Str1 As String = FileSys.GetName(dlg.FileName) \'从文件路劲中获取文件名称 Dim book As new XLS.Book(dlg.FileName) Dim c6 As WinForm.ComboBox = e.Form.Controls("ComboBox6") Dim a1 As Integer = c6.Value ip.SourceTableName = book.Sheets(a1).name \'指定要导入的表 ip.NewTableName =book.Sheets(a1).name \'s \'导入后的表名 If Str1 > "" AndAlso Str1.Contains("xlsx") Then ip.Format="Excel2007" Else If Str1 > "" AndAlso Str1.Contains("xls") Then ip.Format="Excel" End If ip.Import() Dim tb As WinForm.Table = e.Form.Controls("Table1") tb.Table.DataSource = DataTables(book.Sheets(0).name) End If 例子表中数据查询如下: 当前比对代码如下: Dim s As String Dim l As WinForm.CheckedListBox = e.Form.Controls("CheckedListBox1") For Each Index As Integer In l.CheckedIndices s = s & "," & l.Items(Index) Next s = s.trim(",") Dim cs As String = s Dim idx As String = "" Dim lst As new List(of String) Dim flag As Boolean Dim s1 As String = vars("不为空字段") & " is not null" Dim drs As List(Of DataRow) = DataTables(Vars("btname")).Select(s1, cs) Dim pdr As DataRow = drs(0) Dim dr As DataRow For i As Integer = 1 To drs.count - 1 dr = drs(i) flag = False For Each c As String In cs.split(",") If pdr(c) <> dr(c) Then flag = True Exit For End If Next If flag = False Then If lst.Contains(pdr("_Identify")) = False lst.add( pdr("_Identify") ) End If lst.add( dr("_Identify") ) End If pdr = dr Next If lst.count > 0 Then idx = String.Join(",",lst.ToArray) Dim s2 As String = s1 & " And _Identify not In (" & idx.trim(",") & ")" \'Tables(Vars("btname")).filter = s2 Dim dtb As New DataTableBuilder("比对表") Dim cnt As Integer = DataTables(Vars("btname")).DataCols.Count Dim nms(cnt-1) As String For i As Integer = 0 To cnt-1 nms(i) = DataTables(Vars("btname")).DataCols(i).name dtb.AddDef(nms(i), Gettype(String), 255) Next dtb.Build() Dim tb3 As WinForm.Table = e.Form.Controls("Table3") tb3.Table.DataSource = DataTables("比对表") tb3.Table.AutoSizeCols() \'自适应列宽 tb3.Table.filter = s2 Else MessageBox.Show("没有重复数据!") End If |
-- 作者:有点蓝 -- 发布时间:2021/11/16 16:39:00 -- execl表和临时表是不存在 [_Identify]列的 |
-- 作者:cnsjroom -- 发布时间:2021/11/16 16:49:00 -- 回复:(有点蓝)execl表和临时表是不存在 [_Ide... 经过sql数据查询语句查询到的表中是含这个主键的呢 相关excel表格数据是直接通过导入命令导入到狐表项目里的 不是excel作为数据源使用 Dim s As String Dim l As WinForm.CheckedListBox = e.Form.Controls("CheckedListBox1") For Each Index As Integer In l.CheckedIndices s = s & "," & l.Items(Index) Next s = s.trim(",") Dim cs As String = s Dim idx As String = "" Dim lst As new List(of String) Dim flag As Boolean Dim s1 As String = vars("不为空字段") & " is not null" Dim drs As List(Of DataRow) = DataTables(Vars("btname")).Select(s1, cs) Dim pdr As DataRow = drs(0) Dim dr As DataRow For i As Integer = 1 To drs.count - 1 dr = drs(i) flag = False For Each c As String In cs.split(",") If pdr(c) <> dr(c) Then flag = True Exit For End If Next If flag = False Then If lst.Contains(pdr("_Identify")) = False lst.add( pdr("_Identify") ) End If lst.add( dr("_Identify") ) End If pdr = dr Next If lst.count > 0 Then idx = String.Join(",",lst.ToArray) Dim s2 As String = s1 & " And _Identify not In (" & idx.trim(",") & ")" Tables(Vars("btname")).filter = s2 怎么将这里筛选出来的数据 赋值到下面的比对表里面呢? Dim dtb As New DataTableBuilder("比对表") Dim cnt As Integer = DataTables(Vars("btname")).DataCols.Count Dim nms(cnt-1) As String For i As Integer = 0 To cnt-1 nms(i) = DataTables(Vars("btname")).DataCols(i).name dtb.AddDef(nms(i), Gettype(String), 255) Next dtb.Build() Dim tb3 As WinForm.Table = e.Form.Controls("Table3") tb3.Table.DataSource = DataTables("比对表") tb3.Table.AutoSizeCols() \'自适应列宽 tb3.Table.filter = s2 \'以下代码怎么添加上述的S2这个筛选条件 让符合筛选条件的数据填充到比对表中 For Each a1 As DataRow In DataTables(Vars("btname")).datarows If a1 IsNot Nothing Then Dim r As Row = Tables("比对表").addnew For Each dc As DataCol In DataTables(Vars("btname")).DataCols r(dc.name) = a1(dc.name) Next End If Next Else MessageBox.Show("没有重复数据!") End If
|
-- 作者:有点蓝 -- 发布时间:2021/11/16 16:55:00 -- 遍历Tables(Vars("btname")),不要遍历DataTables(Vars("btname")) |
-- 作者:cnsjroom -- 发布时间:2021/11/16 18:08:00 -- 以下内容是专门发给有点蓝浏览 多行不同字段值比较 相同的时候 不弹出找不到主键的提示 不同的时候会提示找不到主键的提示 但是取消后依旧可以显示正常数据【老师有没有办法修正他】 当行选择多个列值比对相同或不同 结果都如图一样 没有数据 [此贴子已经被作者于2021/11/16 18:20:28编辑过]
|
-- 作者:cnsjroom -- 发布时间:2021/11/16 18:19:00 -- 回复:(有点蓝)遍历Tables(Vars("btname")),不要遍... 修正了筛选表之后 数据还是没有得到完美显示,楼上已附上项目列子 麻烦老师指导下 因加密狗到期,目前暂时不能使用新版本的开发版 还望老师直接贴出修改处的代码内容 谢谢! 比对单行数据数据不相同的代码 Dim s As String Dim l As WinForm.CheckedListBox = e.Form.Controls("CheckedListBox1") For Each Index As Integer In l.CheckedIndices s = s & "," & l.Items(Index) Next s = s.trim(",") Dim cs As String = s Dim filter As String = "1=2" Dim ss() As String = s.split(",") Dim s1 As String = ss(0) For i As Integer = 1 To ss.length - 1 filter = filter & " or " & s1 & " <> " & ss(i) Next msgbox(filter) Tables(Vars("btname")).filter = filter Dim dtb As New DataTableBuilder("比对表") Dim cnt As Integer = DataTables(Vars("btname")).DataCols.Count Dim nms(cnt-1) As String For i As Integer = 0 To cnt-1 nms(i) = DataTables(Vars("btname")).DataCols(i).name dtb.AddDef(nms(i), Gettype(String), 255) Next dtb.Build() For Each a1 As Row In Tables(Vars("btname")).rows If a1 IsNot Nothing Then Dim r As Row = Tables("比对表").addnew For Each dc As Col In Tables(Vars("btname")).Cols r(dc.name) = a1(dc.name) Next End If Next Dim tb3 As WinForm.Table = e.Form.Controls("Table3") tb3.Table.DataSource = DataTables("比对表") tb3.Table.AutoSizeCols() \'自适应列宽 比对单行数据相同的代码 Dim s As String Dim l As WinForm.CheckedListBox = e.Form.Controls("CheckedListBox1") For Each Index As Integer In l.CheckedIndices s = s & "," & l.Items(Index) Next s = s.trim(",") Dim cs As String = s Dim filter As String = "1=2" Dim ss() As String = s.split(",") Dim s1 As String = ss(0) For i As Integer = 1 To ss.length - 1 filter = filter & " and " & s1 & " = " & ss(i) Next msgbox(filter) Tables(Vars("btname")).filter = filter Dim dtb As New DataTableBuilder("比对表") Dim cnt As Integer = DataTables(Vars("btname")).DataCols.Count Dim nms(cnt-1) As String For i As Integer = 0 To cnt-1 nms(i) = DataTables(Vars("btname")).DataCols(i).name dtb.AddDef(nms(i), Gettype(String), 255) Next dtb.Build() For Each a1 As Row In Tables(Vars("btname")).rows If a1 IsNot Nothing Then Dim r As Row = Tables("比对表").addnew For Each dc As Col In Tables(Vars("btname")).Cols r(dc.name) = a1(dc.name) Next End If Next Dim tb3 As WinForm.Table = e.Form.Controls("Table3") tb3.Table.DataSource = DataTables("比对表") tb3.Table.AutoSizeCols() \'自适应列宽 比对多行数据不相同的代码 Dim s As String Dim l As WinForm.CheckedListBox = e.Form.Controls("CheckedListBox1") For Each Index As Integer In l.CheckedIndices s = s & "," & l.Items(Index) Next s = s.trim(",") Dim cs As String = s Dim idx As String = "" Dim lst As new List(of String) Dim flag As Boolean Dim s1 As String = vars("不为空字段") & " is not null" Dim drs As List(Of DataRow) = DataTables(Vars("btname")).Select(s1, cs) Dim pdr As DataRow = drs(0) Dim dr As DataRow For i As Integer = 1 To drs.count - 1 dr = drs(i) flag = False For Each c As String In cs.split(",") If pdr(c) <> dr(c) Then flag = True Exit For End If Next If flag = False Then If lst.Contains(pdr("_Identify")) = False lst.add( pdr("_Identify") ) End If lst.add( dr("_Identify") ) End If pdr = dr Next If lst.count > 0 Then idx = String.Join(",",lst.ToArray) Dim s2 As String = s1 & " And _Identify not In (" & idx.trim(",") & ")" Tables(Vars("btname")).filter = s2 msgbox(s2) Dim dtb As New DataTableBuilder("比对表") Dim cnt As Integer = DataTables(Vars("btname")).DataCols.Count Dim nms(cnt-1) As String For i As Integer = 0 To cnt-1 nms(i) = DataTables(Vars("btname")).DataCols(i).name dtb.AddDef(nms(i), Gettype(String), 255) Next dtb.Build() Dim tb3 As WinForm.Table = e.Form.Controls("Table3") tb3.Table.DataSource = DataTables("比对表") tb3.Table.AutoSizeCols() \'自适应列宽 tb3.Table.filter = s2 For Each a1 As Row In Tables(Vars("btname")).rows If a1 IsNot Nothing Then Dim r As Row = Tables("比对表").addnew For Each dc As Col In Tables(Vars("btname")).Cols r(dc.name) = a1(dc.name) Next End If Next Else MessageBox.Show("没有重复数据!") End If 比对多行数据相同的代码 Dim s As String Dim l As WinForm.CheckedListBox = e.Form.Controls("CheckedListBox1") For Each Index As Integer In l.CheckedIndices s = s & "," & l.Items(Index) Next s = s.trim(",") Dim cs As String = s Dim idx As String = "" Dim lst As new List(of String) Dim flag As Boolean Dim s1 As String = vars("不为空字段") & " is not null" Dim drs As List(Of DataRow) = DataTables(Vars("btname")).Select(s1, cs) Dim pdr As DataRow = drs(0) Dim dr As DataRow For i As Integer = 1 To drs.count - 1 dr = drs(i) flag = False For Each c As String In cs.split(",") If pdr(c) = dr(c) Then flag = True Exit For End If Next If flag = False Then If lst.Contains(pdr("_Identify")) = False lst.add( pdr("_Identify") ) End If lst.add( dr("_Identify") ) End If pdr = dr Next If lst.count > 0 Then idx = String.Join(",",lst.ToArray) \'Tables(Vars("btname")).filter = vars("不为空字段") & "is not null and _Identify not in (" & idx.trim(",") & ") " Dim s2 As String = s1 & " And _Identify not In (" & idx.trim(",") & ")" Tables(Vars("btname")).filter = s2 Dim dtb As New DataTableBuilder("比对表") Dim cnt As Integer = DataTables(Vars("btname")).DataCols.Count Dim nms(cnt-1) As String For i As Integer = 0 To cnt-1 nms(i) = DataTables(Vars("btname")).DataCols(i).name dtb.AddDef(nms(i), Gettype(String), 255) Next dtb.Build() Dim tb3 As WinForm.Table = e.Form.Controls("Table3") tb3.Table.DataSource = DataTables("比对表") tb3.Table.AutoSizeCols() \'自适应列宽 \'tb3.Table.filter = s2 For Each a1 As Row In Tables(Vars("btname")).rows If a1 IsNot Nothing Then Dim r As Row = Tables("比对表").addnew For Each dc As Col In Tables(Vars("btname")).Cols r(dc.name) = a1(dc.name) Next End If Next Else MessageBox.Show("没有重复数据!") End If [此贴子已经被作者于2021/11/16 18:34:51编辑过]
|
-- 作者:有点蓝 -- 发布时间:2021/11/16 21:34:00 -- 学会理解一下代码,只会抄是没有用的 比对单行数据相同的代码 Dim s As String Dim l As WinForm.CheckedListBox = e.Form.Controls("CheckedListBox1") For Each Index As Integer In l.CheckedIndices s = s & "," & l.Items(Index) Next s = s.trim(",") Dim cs As String = s Dim filter As String = "1=1" |
-- 作者:cnsjroom -- 发布时间:2021/11/16 21:56:00 -- 回复:(有点蓝)学会理解一下代码,只会抄是没有用的... 谢谢老师那么晚还在辛苦指导 对于这个地方我确实有点困惑 找不同的数据 还得麻烦老师指导下! Dim s As String Dim l As WinForm.CheckedListBox = e.Form.Controls("CheckedListBox1") For Each Index As Integer In l.CheckedIndices s = s & "," & l.Items(Index) Next s = s.trim(",") Dim cs As String = s Dim filter As String = "1=2" Dim ss() As String = s.split(",") Dim s1 As String = ss(0) For i As Integer = 1 To ss.length - 1 filter = filter & " or " & s1 & " <> " & ss(i) 如果<>换成=号 上述1=2时 也会找到相同值的数据行 Next msgbox(filter) Tables(Vars("btname")).filter = filter |