| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1747 人关注过本帖, 2 人收藏
标题:VFP 学习、开发漫谈 (25)
只看楼主 加入收藏
liuxingang28
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:山东济南
等 级:贵宾
威 望:47
帖 子:658
专家分:2180
注 册:2014-2-7
收藏
得分:0 
我仔细拜读过您的《VFP入门指南》,我前后仔仔细细读过 3 篇,对其中关于Varchar数据类型的论述印象深刻。我在 9 楼表达的意思您可能理解上有偏差。我的意思,不是说系统在存储时会自动使用TRIM()函数过滤字符串,而是说,若要实现对字符串比较时不再使用TRIM()函数,对Varchar字段类型也必须人工使用TRIM()函数对字符串进行过滤。

泉城飞狐
2014-07-04 10:22
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:0 
以下是引用liuxingang28在2014-7-4 10:22:25的发言:

我仔细拜读过您的《VFP入门指南》,我前后仔仔细细读过 3 篇,对其中关于Varchar数据类型的论述印象深刻。我在 9 楼表达的意思您可能理解上有偏差。我的意思,不是说系统在存储时会自动使用TRIM()函数过滤字符串,而是说,若要实现对字符串比较时不再使用TRIM()函数,对Varchar字段类型也必须人工使用TRIM()函数对字符串进行过滤
飞狐兄弟,红字部分我没理解,能否请你举个具体的例子详细说明一下?我只知道原本为C型的字段在改为Varchar后,需要用REPLACE ALL命令清一下尾部的空格。原生设置为Varchar类型的字段是不需要额外人工处理的。
2014-07-04 14:34
liuxingang28
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:山东济南
等 级:贵宾
威 望:47
帖 子:658
专家分:2180
注 册:2014-2-7
收藏
得分:0 
比如,表单上有一个txtName文本框,用于输入或修改“姓名”字段,该字段是 Varchar类型,则在保存记录时,需执行 replace with trim(thisform.txtName.Value)。

泉城飞狐
2014-07-04 19:53
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:0 
以下是引用liuxingang28在2014-7-4 19:53:03的发言:

比如,表单上有一个txtName文本框,用于输入或修改“姓名”字段,该字段是 Varchar类型,则在保存记录时,需执行 replace with trim(thisform.txtName.Value)。

我觉得这个不是问题,可在保存时一次性解决,只需要用一次TRIM()函数;但是字符串的运算在程序中,尤其在规模比较大的程序中是不止一次的,可能是保存操作的好几倍,或者几十倍,甚至更多。显然,两者不能相提并论。与其在每处字符串运算时都套个TRIM()函数,不如在保存时用一次。当然,这种利弊问题,各人想法不同。我是崇尚在不损失代码清晰度的情况下,程序越短越好,而且我比较喜欢追新。
2014-07-05 14:57
小主板
Rank: 2
等 级:论坛游民
帖 子:187
专家分:21
注 册:2009-6-28
收藏
得分:0 
谢谢楼主的分享!!!!
2014-07-05 20:08
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
2. 对 Top 语句的影响


在 9.0版本下,SELECT * TOP 1 FROM employee ORDER BY salary,仅列出员工表中工资最少的其中 1 名员工,也就是说,对于 Top n,返回的记录不会多于 n。但在 8.0 和 7.0 版本下,若拥有最低工资的员工有多名,则 SELECT * TOP 1 FROM employee ORDER BY salary 返回多名员工。

比如,现在我要查询工资最低的员工信息,在 VFP 9.0默认数据引擎下,不能使用 SELECT * TOP 1 FROM employee ORDER BY salary,而应该采用如下语句:SELECT * FROM employee WHERE salary = (SELECT MIN(salary) FROM employee)
对VFP9 帮助文件中,关于这部分的内容又认真的看了一遍,假如取 语文 成绩排名前N位的,可用下面方法解决
Select 语文,班级 From cj Where 语文 in (Select Top N 语文 From Cj Order By 1 Desc) Order By 1 Desc

坚守VFP最后的阵地
2014-07-08 13:33
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
以下是引用taifu945在2014-7-3 15:01:29的发言:

楼主写得非常好,很多细节在各种教科书或使用说明中都没提到过。不过,对于在LIKE比较符中使用下划线的区别,我经过实验,觉得与楼主的说法略有出入:
假设表文件T1.DBF有两个字段:姓名、分数,记录有三条:
姓名            分数
张三             60
张(一个空格)     30
               20
在7.0版本下,用“SELECT * FROM T1 WHERE 姓名 LIKE "张_"”命令,只输出第一条60分的记录;在8.0、9.0版本下,用相同的命令会输出60分和30分的两条记录;三个版本下,都无法输出20分的那条记录,也就是姓名只有一个“张”字的记录。
根据以上实验,可以得出:在7.0版本中,下划线仅代表有实际意义的字符;在8.0、9.0版本中,下划线可以包含空格了;在VFP所有版本中,下划线都不能代表空字符(注意:空字符不是空格字符),即,下划线必须要对应一个字符。而使用“%”通配符,在VFP任何版本中都可以包含空字符。
可改为
SELECT * FROM T1 WHERE LEFT(ALLTRIM(姓名),2)=="张"

坚守VFP最后的阵地
2014-07-08 13:46
ILoveVFD
Rank: 3Rank: 3
等 级:论坛游侠
威 望:3
帖 子:218
专家分:147
注 册:2015-5-2
收藏
得分:0 
篇篇精彩!
2015-05-02 12:17
快速回复:VFP 学习、开发漫谈 (25)
数据加载中...
 
   



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

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