Foxtable(狐表)用户栏目专家坐堂 → [求助]TrimEnd为什么删不掉后面的字符?


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

主题:[求助]TrimEnd为什么删不掉后面的字符?

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


加好友 发短信
等级:童狐 帖子:253 积分:2573 威望:0 精华:0 注册:2016/8/8 9:50:00
[求助]TrimEnd为什么删不掉后面的字符?  发帖心情 Post By:2021/8/29 18:27:00 [只看该作者]

请教老师,代码如下:
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编辑过]

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


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


加好友 发短信
等级:九尾狐 帖子:2243 积分:18477 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By:2021/8/29 21:26:00 [只看该作者]

Filter = Filter.TrimEnd(" and ")

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

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


加好友 发短信
等级:童狐 帖子:253 积分:2573 威望:0 精华:0 注册:2016/8/8 9:50:00
  发帖心情 Post By: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编辑过]

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


加好友 发短信
等级:超级版主 帖子:110810 积分:563988 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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

 回到顶部