如何得到查询的结果(100分)

  • 主题发起人 主题发起人 WHY&SONG
  • 开始时间 开始时间
W

WHY&SONG

Unregistered / Unconfirmed
GUEST, unregistred user!
一个查询
query.sql.add('select sum(['字段']) from 表名 where ... ');
查询的结果如何复制给变量.....20分.

delphi访问access数据库效率如何?
我用delphi 处理access 数据库内容 每天大约1万条纪录.
从4个相互无关的表中找出相应信息,处理后送到另外四个
相互无关的表中,每天要处理4个多小时.是不是太慢!!!
改进的方法主要有哪些?
另:
我几乎全部用query语句处理,
8个表中的纪录从 几十条到十几万条不等.
 
1.用Query1.Fields[0].AsString...
2.应有提高效率的方法,听听其它人的意见!
 
1.同menxin
2.几十万条以内速度没有问题,关键是操作很不方便,不支持StoredProc
 
你可以贴一些代码在这里(当然是最慢的那段了。)
 
要这么长时间,实在太太太慢了!

原因有三:
1.不要用Access数据库,为什么要用Access?Delphi连Access要经过
BDE+Jet3.5,或BDE+ODBC+DAO,即使用直接访问Access的控件也是很慢的.
关口太多,你要非用Access不可为什么不用VC.如用文件型数据库请用Paradox
效率会提升.或直接用Interbase,设计好了效率会更高.

2.相互无关的表,为什么要相互无关?这是效率低的根本原因.几十万条纪录的
表必须要使用索引,那就要是表建立起关系来,没有关系也要强行建立,关系数据
库吗!!建立好关系利用好索引,速度可能提高几十几百倍.

3.几乎全部用query语句处理,错错错!你没读过李维的书吗,query是留给SQL
数据库的,文件型数据库尽量别用query,用TTable,因为query要经过BDE的翻译
过程,翻译后使用TTable同样的方法处理数据,当然慢.




 
高!实在是高!
 
关于改进速度
建议1: 使用多线程
建议2: 使用DAO直接连接。 可去 http://programs.yesite.com/ 下载diamond
控件,直接连接ACCESS
建议3: 影响插入操作速度的很大部分是因为ACCESS要完成每一次插入后的索引排
序动作, 如果数据库很大,可以考虑在ACCESS 要进行插入前删除目标表
的索引, 然后插入你的上万条数据,插入完后再建立索引
这样要比你每插入一条就索引一次的行为效率高很多很多


 
不用找变量,用QUERY1。FIELDBYNAME(‘ASDFASDF’).VALUE.
我建议你尽量用TTABLE和索引,少用TQUERY。
等你到了SQL SERVER上再改吧
 
用本地数据库是没有前途的,劝你早日升级到SQL服务器.
 
同意rrs,必须建索引
 
获取值?不知道可不可以这样:
select sum([abc]) as abc where ...
var1:=fieldValues['abc']
 
我使用Dbi函数操作大型数据库,二十几万记录不超过五分钟.
 
谢谢各位
我想再问一下,我把tquery改为ttable 后,原来有大量的自动增量字段
我应如何添加纪录,我用appendrecond(),好像不行,可能哪儿错了?
至于改为大型组据库的问题,实际上我也是这样想的.但客户那边不行
delphi+access是死的.我说服不了他们.
 
为什么没有人回答,各位大侠帮帮忙吧.我再加50分.只剩这么多了.
 
autoincment字段是只读的,不需要手工赋值的。
~~~~
 
你可以试试看用odbc连接.

你要追加纪录?如果一条的话用insert.自增字段无需你维护的
很多条用batchmove
 
用Query是对的,可能你的数据库设计有问题。否则王寒松的方法绝对可行。
我也常用Access,可行。
 
* 建立更合理的索引,不论用Query或Table
* 建议改用Table控件,至于自动增加字段不要用AppendRecord,可用如下语句:
With tblXXX do
begin
Append;//Insert也可以
... //对自动增加字段之外的字段赋值
Post;
end;
* 如果一定要用Query,可以对SQL进行优化,尽可能成批的读取和更新记录,
同时查看Help关于TQuery的Prepare方法的说明,也许有用
 
我的系统同你处理的数据量差不多,但ACCESS数据库太慢了,其实现了
部分SQL数据库的功能,如CHECK,KEY等,但对文件型的数据库系统,完整性
应该是自己维护,要么用SQL数据库,所以不用ACCESS,用DBASE,FOXPRO,PARADOX
要么,和王坏人所说,删除索引,但有KEY值,还是快不了。
 
多人接受答案了。
 
后退
顶部