主题:如何在表的中间某一行前面或后面插入一条新记录?
sdn193551
[专家分:10] 发布于 2009-12-01 10:34:00
请教各位老师:
使用 APPEND BLANK 或者 INSERT 命令可以在表的底部添加新记录。如何在表的中间某一行前面或后面插入一条新记录?请指教!
回复列表 (共8个回复)
沙发
sywzs [专家分:5650] 发布于 2009-12-01 14:03:00
insert blank before &&在当前行之前插入一空行
insert blank after &&在当前行之后插入一空行
板凳
sdn193551 [专家分:10] 发布于 2009-12-01 19:18:00
sywzs 老师:
我试操作一下,一个表以独占方式打开的简单情况下,是可以的;在多个表打开的情况下,就有问题了,错误提示“在启用行缓冲或表缓冲,或者使用完整性约束时,不能执行 INSERT操作!“
我查了一下vfp9的帮助,insert命令没有这样的用法。是不是早期版本的命令?在程序中使用应该注意些什么,要有什么样的环境?
谢谢指教!
3 楼
liupeisong [专家分:2340] 发布于 2009-12-02 00:46:00
VFP命令有两种:1、传统的;2、SQL
碰巧的是两种中都有insert命令,估计楼主只查到后者了,1楼说的是前者!
传统insert命令支持所有VFP版本的,VFP9也支持
另外,从数据库的基本定义看,不建议依赖记录的位置来定位,而应该条件来定位,最典型的就是所谓主键了
4 楼
sdn193551 [专家分:10] 发布于 2009-12-02 16:39:00
3 楼老师:谢谢提示!
insert 的这种用法在那里能查到?
“从数据库的基本定义看,不建议依赖记录的位置来定位,而应该条件来定位,最典型的就是所谓主键了“这句话没有搞懂,请展开说明一下。
5 楼
liupeisong [专家分:2340] 发布于 2009-12-02 18:50:00
看起来你多半是个初学者
关于1、梅子论坛有人汉化了VFP9的帮助,是一个CHM,可以搜索到INSERT的用法
http://www.meizvfp.com/bbs/dispbbs.asp?boardID=81&ID=67625&page=1
(好象本论坛也有人发过同样的东东)
注意:如果搜到的是SQL命令,则后面都会跟一个SQL字样
关于2、任何一本关于关系型数据库的书都会告诉你,数据所在的行是无关紧要的,所以去研究在某个位置插入一条记录是没有意义的愚蠢问题!访问数据时应该是根据条件去查是否有满足的记录,若没有能够知道,若有则能获得满足条件的记录集合。产生结果时(比如生成报表),可以根据指定的条件对结果记录集合进行排序,比如成绩库可以根据总分排序,但是原始数据并不需要排序(设想一下你可能偶而又需要以姓名来排列了,难道你要保存两顺序的库各一份吗?)。
只有一种情况是需要在指定位置插入记录的,就是做为学生却又使用那种很旧的、外行编写的教材、老师也不懂数据库的真正原理时
最后的PS:作为初学者,如果只是为了应付考试,请忽略第2条
6 楼
sdn193551 [专家分:10] 发布于 2009-12-03 07:57:00
5 楼的老师 :
你说对了,我学vfp半年多,没有经验。你推荐的资料我有,像这样的命令insert blank after没有发现,vfp9的命令提示中也没有。
虽然使用数据库的数据表时可以使用SQL的方法处理,不需要知道记录放在那里,这并不能说明“...去研究在某个位置插入一条记录是没有意义的愚蠢问题!” 因为有它的实际需要。例如,在销售明细表里,记录是按照日期自然排列的,一旦发现某日忘记了一笔账目,这就需要插入记录修整。又如在表单上的销售明细表里,都希望在表底部有一项合计栏;这可以做到,但要始终保持在表底部就要费一番功夫,因为添加新记录的时候它变成底项,解决的方法之一是把添加的新记录插入合计栏的上边。
谢谢你的指教!
7 楼
花间刺00 [专家分:0] 发布于 2010-01-07 17:37:00
谢谢你们的讨论!
8 楼
liupeisong [专家分:2340] 发布于 2010-01-16 02:38:00
[quote]5 楼的老师 :
你说对了,我学vfp半年多,没有经验。你推荐的资料我有,像这样的命令insert blank after没有发现,vfp9的命令提示中也没有。
虽然使用数据库的数据表时可以使用SQL的方法处理,不需要知道记录放在那里,这并不能说明“...去研究在某个位置插入一条记录是没有意义的愚蠢问题!” 因为有它的实际需要。例如,在销售明细表里,记录是按照日期自然排列的,一旦发现某日忘记了一笔账目,这就需要插入记录修整。又如在表单上的销售明细表里,都希望在表底部有一项合计栏;这可以做到,但要始终保持在表底部就要费一番功夫,因为添加新记录的时候它变成底项,解决的方法之一是把添加的新记录插入合计栏的上边。
谢谢你的指教!
[/quote]
我们只是需要得到的结果集合是有某种顺序,而不是原始的数据一定要那种顺序,这个概念一定要建立起来!
如果我们非要原始的数据有某种顺序,那么假如我们需要多种结果时,只有根据需要的顺序保存多份。比如:我们有一个班级的各科成绩,可能用到的顺序分别有语文、数学、外语等的正反顺序,姓名、学号等的正反顺序,还有他们的各种组合。那么好了,我们只有用多个表分别存储多种顺序的数据,这样有两个问题:1、冗余太多,特别是数据量很大时无法实现,比如磁盘为300G,数据为仅50G,才几种顺序就超出硬盘容量了;2、修改维护无法保证,比如修改某学生的语文成绩,就必须在多个表中同时修改数据,如何保证所有的表中的数据都全部正确修改呢?
正因为有以上问题,在数据库中是规定各行数据是没有顺序关系的。但是,在产生报表这样的结果时,可以得到某种特定顺序的结果,从而生成某种顺序的报表。
其实楼主的问题很简单就可以搞定,就是增加一个编号之类的列(字段),结果就以这个编号来排序,那么原始数据的各行就可以不考虑其位置了。
PS:原始数据如果一定要有某种顺序,还有一个问题:修改的效率,比如插入或删除一行,那么其后的数据都要移动,而这个移动全部要反映在磁盘上,比如一共有1亿零1行,删除第1行,那么在VFP中后面的1亿行全部需要在磁盘上移动,这是什么概念!
所以,学习一点数据库的知识,学会使用数据库的方式去思考问题是非常重要的,不要保留太多的习惯性思维!
再补充一句,楼主的思路是用大脑判定新记录应当插入到哪个位置,实际上如果记录很多的时候根本就不可能实现!
我来回复