《Foxpro入门手册》中的几处不足或错误
闲暇之余,花了二天时间认真阅读了该书。总体来说,该书还不错,读后有不少收获,但也发现了几处不足或错误,如下:
1. 第15页,作者建议“字符型数据全部使用Varchar型,这样可避免再使用Alltrim()函数消除多余的尾部空格”。根据本人的开发体验,在VFP下Varchar型并不比Character有优势。一是Varchar并不比Character节省空间,二是Varchar仍然会存储手工录入的空格。VFP提供该字段类型只是为了兼容SQL Server。
2. 第22页,作者建议在命令窗口中输入较长命令时,在行尾输入分号后按Ctrl_Enter来换行,不能直接按回车。但经上机验证,直接回车也可以。
3. 第38页,在介绍REPLACE命令时,作者认为“有 FOR/WHILE短语时,默认范围是ALL”,应该纠正为:有FOR短语时,默认范围是ALL,有WHILE短语时默认范围是REST,同时有FOR短语和WHILE短语时,默认范围是REST,即WHILE优先。
4. 第42页例3,“skip 记录号-RECNO()”有错误。比如,当前记录号是8,要切换到记录号3时,skip 3-8 则将记录切换到了第2条记录,显然错误。应该修改为:
go 记录号
if dele()
skip
if eof() and !bof()
skip -1
endif
endif
5. 第74页,关于掩码“9”的作用,作者表述为“只允许输入数字和+-号”,应纠正为“对字符型字段只允许输入数字,对于数值型字段只允许输入数字和+-号”。
6. 第111页例3,其中的“having avg(英语)>=85”改为“having 英语平均分>=85”更好一些
7. 第142页,其中的“where ... and 成绩=(select ...)”改为“where ... and 成绩 in (select ...)”更好一些,因为若子查询返回多条记录,程序会出错,使用 in 则不会。
8. SQL的例子中,一个查询语句中出现多个子查询,甚至出现重复的子查询,使程序的可读性很差。其实,在编写SQL语句时,先将子查询输出到一个游标,再对游标进行操作,有时也很好,特别是需要重复引用子查询中的记录时。
9. 第168页第2行,在介绍Between函数时,作者表述为“该函数不区分大小写”,这个表述是错误的。只所以between('B','a','C')返回.f.,是因为Set Collate to "PinYin"引起的,输入Set Collate to "Machine"后,返回.t.。在PinYin排序方式下,不是按字符的Ascii码值进行比较的,而是按其拼音的先后比较,这可能与我们的习惯不同,在本人开发的系统中,指定Set collate to "machine"。
10.第196页倒数第6行,在介绍EndScan时,作者专门强调“在Endscan前切换到原工作区”。其实,根本没有必要,在执行Endscan时系统会自动切换到原工作区。
11.第208页倒数第7行中的“skip -reccount()”语句令人费解,应该改为“go top”更容易理解。
12.第247页,第1行,将“THISFORM.backcolor.value=255+255*256+0*65536”改为“thisform.backcolor.value=rgb(255,255,0)”更简单。
13.第268页,在记录导航条的代码中有大量的重复代码,使用自定义方法可能更好。
14.第283页,将Dakai.Click中使用低级文件函数读出文本文件内容的语句改为:THISFORM.源文本区.Value = FileToStr(文件名)。
15.第293页第4行开始的代码段有问题:若备选列表允许多选,则其中的“THISFORM.已选.additem(this.value)”应改为“THISFORM.已选.additem(this.list(i))”;若备选列表不允许多选,则仅需先清除已选列表,再执行“THISFORM.已选.additem(this.value)”一条语句即可。
……
还有很多,由于时间的关系我要下班回家了!
[
本帖最后由 liuxingang28 于 2014-2-18 09:55 编辑 ]
收到的鲜花