Foxtable(狐表)用户栏目专家坐堂 → [求助]无法在 System.Double 和 System.String 上执行“=”操作。


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

主题:[求助]无法在 System.Double 和 System.String 上执行“=”操作。

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


加好友 发短信
等级:一尾狐 帖子:476 积分:4039 威望:0 精华:0 注册:2011/11/2 8:55:00
[求助]无法在 System.Double 和 System.String 上执行“=”操作。  发帖心情 Post By:2012/11/12 11:32:00 [只看该作者]

我仿造帮助文档的内容,做了一个筛选目录树,代码如下:

Dim trv As WinForm.TreeView = e.Sender
Dim flt As String
For Each nd As WinForm.TreeNode In e.node.Nodes '同步子节点选中状态
    nd.Checked = e.Node.Checked
Next
If e.node.ParentNode IsNot Nothing Then '去掉父节点选中状态
    e.node.ParentNode.Checked = False
End If
For Each nd As WinForm.TreeNode In trv.AllNodes
    If nd.Level > 0 AndAlso nd.ParentNode.Checked Then '如果父节点选中
        Continue For '跳过此节点,处理下一结点
    End If
    If nd.Checked Then
        If flt > "" Then
            flt = flt & " Or "  '注意用or而不是And
        End If
        If nd.Level = 0 Then '注意下面的条件都要用括号括起来
            flt = flt & "( 入职年份 = '" & nd.Text & "')"
        Else
            flt = flt & "( 入职年份 = '" & nd.ParentNode.Text & "' And 部门 = '" & nd.Text & "' And 办公室 = '" & nd.Text & "')"
        End If
    End If   
Next
Tables("职工表").Filter = flt

 

结果,筛选入职年份和部门都能成功,但选择办公室时却出现“无法在 System.Double 和 System.String 上执行“=”操作。”的字样

 

因为示例只有2个筛选条件,我则想增加更多的筛选的目录,是不是 这一段And 办公室 = '" & nd.Text & "'有问题呢?我该怎么表述呢?

 

求教……非常感谢!


 回到顶部
帅哥,在线噢!
狐狸爸爸
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2012/11/12 11:42:00 [只看该作者]

你要注意里的类型,例如:

 

flt = flt & "( 入职年份 = '" & nd.Text & "')"

 

如果入职年份是数值型,应该改为:

 

 

flt = flt & "( 入职年份 = " & nd.Text & ")"

 

其他同理。

 

 

建议看看:

http://www.foxtable.com/help/topics/1284.htm

http://www.foxtable.com/help/topics/1647.htm

 


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


加好友 发短信
等级:一尾狐 帖子:476 积分:4039 威望:0 精华:0 注册:2011/11/2 8:55:00
  发帖心情 Post By:2012/11/12 11:43:00 [只看该作者]

呃,我又把代码改为了

 If nd.Level = 0 Then '注意下面的条件都要用括号括起来
            flt = flt & "( 入职年份 = '" & nd.Text & "')"
        Else
            flt = flt & "( 入职年份 = '" & nd.ParentNode.Text & "' And 部门 = '" & nd.Text & "' )"
        End If

 If nd.Level = 1 Then '注意下面的条件都要用括号括起来
            flt = flt & "( 部门 = '" & nd.Text & "')"
        Else
            flt = flt & "( 部门 = '" & nd.ParentNode.Text & "' And 办公室 = '" & nd.Text & "')"
        End If
结果单选入职年份,显示窗口,主界面,目录名,afterchecknode未将对象引用到对象设置的实例

选择里面的部门,又显示语法有问题……我该怎么改呢?


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


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By:2012/11/12 11:48:00 [只看该作者]

 楼主,有木有例子呢?能把项目上传一下不?

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


加好友 发短信
等级:一尾狐 帖子:476 积分:4039 威望:0 精华:0 注册:2011/11/2 8:55:00
  发帖心情 Post By:2012/11/12 11:48:00 [只看该作者]

以下是引用狐狸爸爸在2012-11-12 11:42:00的发言:

你要注意里的类型,例如:

 

flt = flt & "( 入职年份 = '" & nd.Text & "')"

 

如果入职年份是数值型,应该改为:

 

 

flt = flt & "( 入职年份 = " & nd.Text & ")"

 

其他同理。

 

 

建议看看:

http://www.foxtable.com/help/topics/1284.htm

http://www.foxtable.com/help/topics/1647.htm

 

呃,刚刚看到回复,很谢谢!可是我的入职年份是字符型的……


 回到顶部
帅哥,在线噢!
狐狸爸爸
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2012/11/12 11:48:00 [只看该作者]

纸上不谈兵,做个例子发上说话,几分钟就可以帮你搞定。

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


加好友 发短信
等级:一尾狐 帖子:476 积分:4039 威望:0 精华:0 注册:2011/11/2 8:55:00
  发帖心情 Post By:2012/11/12 13:09:00 [只看该作者]

以下是引用狐狸爸爸在2012-11-12 11:48:00的发言:
纸上不谈兵,做个例子发上说话,几分钟就可以帮你搞定。

好的,非常感谢!我做好了一个例子!

这个例子中,除了上面的问题外,还有这样2个问题(有1个以前请教过,但也是来不及做例子,所以在这里补上……)

1.我做了一个主窗口,但显示出来,却总是在右边留有空白(明明窗口的位置是占满了),不知道该怎么处理。还有窗口里的内容如果太多,就会显示不出来。所以我想设置一个滑动条,想要拖动显示原本不能显示的部分,但我发现控件里面,只有横向的滑动条……这个……我该怎么办(我是要竖向的滑动)

2.上次在狐爸的指导下,有了一个外能筛选组合框。可以在窗口中输入条件类别(比如姓名),在第二个窗口输入条件的值,自由地在不同情况下筛选。但我还想再进一步,将这个两个筛选组合框变得更为万能,即在不增加筛选组合框的情况下,筛选一次后,再使用同样的两个组合框,设定第二个筛选条件,在第一次筛选的基础上作第二次筛选。这样可能么?而帮助文件里的撤销筛选代码,是不是能改成撤销前一次筛选的效果呢?

 

问题一下增多了,对不起!我本来是想分别发帖询问的,但在做例子的时候,这些问题都涌上心头,就在一个例子里一个贴里提出来了。

有些贪心,抱歉!

不管如何,感谢各位指导!

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:试验新.zip


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


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By:2012/11/12 14:40:00 [只看该作者]

 楼主,我看不懂你的代码,楼主你要实现的筛选是怎样的?具体说一下吧。

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


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By:2012/11/12 14:45:00 [只看该作者]

问题一个一个解决吧。

第一个问题,你要善于使用容器,然后善于使用控件的描定和停靠,就基本可以实现满屏显示了。

第二个问题,可以做到这样的筛选,但是要存储起你筛选过的所有的条件,才可能一次一次的完成。

 回到顶部
帅哥,在线噢!
狐狸爸爸
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2012/11/12 15:00:00 [只看该作者]

筛选的问题,代码改为:

 

Dim trv As WinForm.TreeView = e.Sender
Dim flt As String
For Each nd As WinForm.TreeNode In trv.AllNodes
    Dim pd As WinForm.TreeNode = nd.ParentNode
    Do
        If pd Is Nothing Then
            Exit Do
        End If
        If pd.Checked Then
            Continue For
        Else
            pd = pd.ParentNode
        End If
   Loop
    If nd.Checked Then
        If flt > "" Then
            flt = flt & " Or "  '注意用or而不是And
        End If
        If nd.Level = 0 Then '注意下面的条件都要用括号括起来
            flt = flt & "( 入职年份 = '" & nd.Text & "')"
        ElseIf nd.level = 1 Then
            flt = flt & "( 入职年份 = '" & nd.ParentNode.Text & "' And 部门 = '" & nd.Text & "')"
        ElseIf nd.level = 2 Then
            flt = flt & "( 入职年份 = '" & nd.parentNode.ParentNode.Text & "' And 部门 = '" & nd.ParentNode.Text & "' And 办公室 = '" & nd.Text & "')"
        ElseIf nd.level = 3
            flt = flt & "( 入职年份 = '" & nd.parentNode.parentNode.ParentNode.Text & "' And 部门 = '" & nd.parentNode.ParentNode.Text & "' And 办公室 = '" & nd.parentNode.Text & "' And 性别 = '" & nd.Text &  "')"
        End If
    End If
Next
Tables("表A").Filter = flt

 

你搞得也太复杂了,太多层的最好不要多选,单选就行:

http://www.foxtable.com/help/topics/0917.htm

 

 

 


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