以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]TrimEnd为什么删不掉后面的字符?  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=171417)

--  作者:chh2321
--  发布时间:2021/8/29 18:27:00
--  [求助]TrimEnd为什么删不掉后面的字符?
请教老师,代码如下:
Dim dt As Data Table = DataTables("tblInvReport")
For Each dr As DataRow In dt.DataRows
    Dim Filter As String
    For i As Integer = 1 To dt.DataCols.Count - 1
        Filter = Filter & "[" & dt.DataCols(i).Name & "]" & " = \'" & dr(dt.DataCols(i)) & "\' and "
    Next
    Filter = Filter.TrimEnd(" and ")
MessageBox.Show(Filter)
    Dim dr1 As DataRow = DataTables("表2").Find(Filter)
    If dr1 Is Nothing Then \'如果没有找到的话
        Dim tr = Tables("表2").AddNew()
        For Each dc As DataCol In DataTables("tblInvReport").DataCols
            tr(dc.Name) = dr(dc.Name)
        Next
    Else
        Continue For
    End If
Next

运行后出错

图片点击可在新窗口打开查看此主题相关图片如下:搜狗截图20210829181537.png
图片点击可在新窗口打开查看

两个问题:
1. 为什么TrimEnd不能删除Filter后面的字符——“ and ”,是因为语法问题还是Foxtable 2022 preview的bug? 我试了Filter = Filter.TrimEnd(" and "),Filter = Filter.TrimEnd(" ",“and”)都不行
2. 表中有日期格式字段,但是代码【Filter = Filter & "[" & dt.DataCols(i).Name & "]" & " = \'" & dr(dt.DataCols(i)) & "\' and "】会出现 [日期] = ‘2015-10-13’ 这样的问题,如何解决?

【备注说明】我现在用的是Foxtable 2022 preview

[此贴子已经被作者于2021/8/29 18:34:08编辑过]

--  作者:有点蓝
--  发布时间:2021/8/29 21:10:00
--  
TrimEnd只能支持单个字符的处理,如果确定是后面的字符。换种用法
Filter = Filter.substring(0,Filter.length - 4)

日期、数字和逻辑列要单独处理,判断列类型参考:
IsNumeric判断该列是否是数值型
IsString判断该列是否是字符串型
IsDate判断该列是否是日期型
IsBoolean判断该列是否是逻辑型

表达式中的日期用符号#括起来,数值则不需要任何符号括起来,这些和代码中的格式是一样的,唯一不同的是字符串用单引号括起来。

例如:

Tables("订单").Filter = "[产品] = \'PD01\'"  \'字符用单引号括起来
Tables("订单").Filter = "[日期] = #3/17/1999#"  \'日期用#括起来
Tables("订单").Filter = "[折扣] = 0.1"  \'数值直接使用


--  作者:chnfo
--  发布时间:2021/8/29 21:26:00
--  
Filter = Filter.TrimEnd(" and ")

这样写 filter = filter.trim("  ","a","n","d")

--  作者:chh2321
--  发布时间:2021/8/29 22:01:00
--  
表中字段很多,如果用Filter  = “字段1 = ‘字段1’ and 字段2 =‘字段2’ and .... and 字段n =‘字段n’” 会很麻烦,所以用Filter = Filter &  dt.DataCols(i).Name & " = \'" & dr(dt.DataCols(i)) & "\' and " 来替代,但是我不知道如果其中一个字段是日期型,该如果编写代码?
只能写成如下麻烦的形式吗?
Filter  = “字段1 = ‘字段1’ and 字段2 =‘字段2’ and .... and 日期 = #日期# ... ...and 字段n =‘字段n’” 
[此贴子已经被作者于2021/8/29 22:04:53编辑过]

--  作者:有点蓝
--  发布时间:2021/8/29 22:07:00
--  
    For i As Integer = 1 To dt.DataCols.Count - 1
if dt.DataCols(i).IsString
        Filter = Filter & "[" & dt.DataCols(i).Name & "]" & " = \'" & dr(dt.DataCols(i)) & "\' and "
elseif dt.DataCols(i).IsDate
        Filter = Filter & "[" & dt.DataCols(i).Name & "]" & " = #" & dr(dt.DataCols(i)) & "# and "
else
……
    Next