标题:字符串比较在问题
只看楼主
大树临风
Rank: 2
等 级:论坛游民
帖 子:128
专家分:14
注 册:2015-12-9
结帖率:80%
已结贴  问题点数:20 回复次数:7 
字符串比较在问题
我的程序上有个list控件,
rowsource="sele distinct 原料危害 from all3 where 项目编号=xmbh.and.alltrim(原料名称)=alltrim(ylmc) .and. len(alltrim(原料危害))>0.and. len(alltrim(原料名称))>0.and.len(alltrim(流程+工序+步骤))=0 into cursor tmpp4list13"

我发现:alltrim(原料名称)=alltrim(ylmc),这样比较的结果是“ab”=“abc”为真了,可是我已经设置SET EXACT ON了,为什么会这样?
搜索更多相关主题的帖子: 字符串 比较 and 名称 步骤 
2018-11-20 22:50
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
完全比较用==号
2018-11-21 04:19
liuxingang28
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:山东济南
等 级:贵宾
威 望:47
帖 子:649
专家分:2156
注 册:2014-2-7
得分:0 
不可能吧?无论是 Set exact off 还是 set exact on,"ab"="abc"的结果都是 .f.。
当 set exact off时,"abc"="ab"的值为.t.
当 set exact on时,"abc"="ab"的值为.f.

"="号两边的字符串不能颠倒

泉城飞狐
2018-11-21 08:12
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
多看看VFP的帮助文件,就不会犯如此低级的错误。

坚守VFP最后的阵地
2018-11-21 11:55
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:190
帖 子:3125
专家分:8340
注 册:2015-3-25
得分:0 
以下是引用liuxingang28在2018-11-21 08:12:35的发言:

不可能吧?无论是 Set exact off 还是 set exact on,"ab"="abc"的结果都是 .f.。
当 set exact off时,"abc"="ab"的值为.t.
当 set exact on时,"abc"="ab"的值为.f.

"="号两边的字符串不能颠倒

对的,"ab"="abc",ab比abc少,所以,这个肯定是 .f.
"abc"="ab",abc中含有ab,这个是.t.
2018-11-21 12:51
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:29
帖 子:484
专家分:1827
注 册:2018-3-13
得分:20 
确实是低级错误,但很多人都没搞清楚,包括一些号称VFP专家的人。
set exact 是用于 xBase 命令的规则,不适用于 sql 命令,sql 命令比较规则遵循 set ansi 的设置
当比较字符串时:
set ansi off: 这是默认值,仅比较到较短的字符串就结束
set ansi on: 先用空格填充到同样长度,再逐字符比较
所以,你应该 set ansi on 而不是 set exact on

另外,用 == 代替 =,确实也是精确比较,但性质不同,用 set 是改变比较规则,用 == 是改变操作符
== 是vfp的操作符,SQL86/92标准没有定义这种操作符,用 == 是非标的,在vfp中用 == 的好处是它不受 set 设置的影响

[此贴子已经被作者于2018-11-21 16:42编辑过]

2018-11-21 13:31
gs2536785678
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:45
帖 子:565
专家分:1668
注 册:2017-7-16
得分:0 
有道理!
2018-11-21 14:17
大树临风
Rank: 2
等 级:论坛游民
帖 子:128
专家分:14
注 册:2015-12-9
得分:0 
回复 6楼 csyx
说的很清楚,非常感谢!
确实,我也怀疑过,set exact on 可能不适用于SQL...
2018-11-21 22:11



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-491422-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.199359 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved