呼唤高手,关于通过TQUERY修改表的问题,及其他。(200分)

  • 主题发起人 主题发起人 waterflow
  • 开始时间 开始时间
W

waterflow

Unregistered / Unconfirmed
GUEST, unregistred user!
想修改当前记录的某一些字段的值,利用SQL语句如何较方便的实现。
利用UPDATE好象有点不爽!update .... where...中的WHERE 在此种情况
下好象有点重复,没有利用指针已定位于此的优势,而重新定位,这对于数据
库很大的情况是否难于忍受。
还有一疑问?利用SELECT * 语句(无where 限制)将一个库打开时,当库
很大时,我怀疑可能引起内存不足的问题。例如有库有10万条记录,每一记录
占用400 byte.此种情况下是否会出现内存不足问题?(此处不考虑虚拟内存
的问题)若会出现内存不足问题,如何解决?若不会出现内存不足问题,为什么


 
1)不用update的sql,直接修改fields.value。
2)要看你是在什么数据库,键集在哪一方,但不管
怎样还想不出什么原因要SELECT * from 10万条记录的table.
一般这种需要在表中遍历的情况,完全可以直接用table控件,
而不要用sql查询。
 
(1) 想第一个问题, 你也可以使用ttable控件, 然后设定Filter 和 Filtered
选项(跟SQL中的Where条件意思一样). 这个时候可以使用 FieldByName来修改.
不过,记住使用ApplyUpdates来保存.
当然, TQuery也可以实现. 设RequestLive = True后, 这个时候使用上
述方法(跟ttable一样)处理.
(2)理论上是不会的, 因为不论是本地数据库或者网络数据库, 都是先申请一些内
容, 如果不足再继续申请.
 
呵呵, 又看到支持ttable的了,
各位请注意一点: TTable只是针对本地小数据库才有优势. 针对大型数据库
它只不过是将您的操作自动转成sql发送到server而已. 用TTable处理sql 数
据库, 那就表明您认为你自己写的sql绝对没有机器自动生成的好.
 
update .... where...
与指针定位完全是两个机制修改数据库。
你要混在一起用,一般是先通过指针定位,然后通过主键来用SQL修改数据库

--SELECT * 语句(无where 限制)将一个库打开时,当库
--很大时,我怀疑可能引起内存不足的问题。例如有库有10万条记录,每一记录
--占用400 byte.此种情况下是否会出现内存不足问题?
最好不要干这种事情,还是加条件好,即使内存足够也会导致速度很慢,Delphi的
BDE不像VB,PB,可以设置,先只返回几条纪录,然后当要使用的时候才又去服务器
去访问其它的纪录。不过你可以换用别的控件,绕过BDE。


 
千万不要用TTable,光active的延时就够你受的。
认真设计query吧。
 
用Query做查询,在修改时修为table,好像也不错啊(我从来都是这么干的)。
先:
Table1.setkey;
Table1.fieldbyname('').value:=query1.fieldbyname('').value;
gotokey;
然后再改。

是不是很傻?
 
修改数据利用update 性能是最佳的.对于一个10万条数据的表不带where条件查询是十分不好的,不过可以用过创建又游标来解决.
 
多人接受答案了。
 
后退
顶部