紧急切磋,先付100分不够再加

rzh 2002-04-09 02:05:43
我用ado从一个大概二万五千条数据的表(sybase)中检索出一张符合条件的照片,共需13分半钟!!!正常吗??有何方法可以改进?
(注:而用PB则此过程不需一分钟!)
其代码为:
.....
adoquery1.sql.add('select xp from abc where code=''12345''');
adoquery1.execute;
adoquery1.active:=true;
......
...全文
91 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
firetoucher 2002-04-29
  • 打赏
  • 举报
回复
???
use stored procedure
rzh 2002-04-29
  • 打赏
  • 举报
回复
问题并未解决,不过,我接下来用query代替adoquery,算是解决了这个问题.
再等下去也没办法解决给分算了
rzh 2002-04-11
  • 打赏
  • 举报
回复
我用的是C/S结构,图片是用PB以OLE方法写入数据库,用PB还原没问题,但用Delphi就读不出来(报Bitmap image is not valiable).
FlyingQQ 2002-04-10
  • 打赏
  • 举报
回复
13分半,哥们,你的ADO一定是有问题了!
suvi 2002-04-10
  • 打赏
  • 举报
回复
主要的调整参数是 CursorLocation和LockType,其它参数相MarshelOptions和MaxRecord都可以试着调整一下,详细叙述请参阅李维的《高效率数据库应用》和一本《asp 经典》
suvi 2002-04-10
  • 打赏
  • 举报
回复
让我找找看
seekuface 2002-04-10
  • 打赏
  • 举报
回复
设置为服务端执行试一下。
hammer_shi 2002-04-10
  • 打赏
  • 举报
回复
时间太长了吧?除非你用图象作为条件。
我们不管是用两层还是三层,不管是用Sybase还是Oracle,数据差不多都有100万也不要那么长时间。要是两个那么大的表连立统计怎么办?
Carfield 2002-04-10
  • 打赏
  • 举报
回复
1.高版本的MDAC
2.DataSet的CursorLocation设为clUseClient
3.DataSet的CacheSize值为100~1000之间
4.使用存储过程
5.DataSet的LockType为BatchOptimistic或Optimistic,如果是纯浏览图片则设为ReadOnly效率会更加高
rzh 2002-04-10
  • 打赏
  • 举报
回复
To: Nizvoo(瓦匠泥〓过好每一天) :我就是这么写得可没用.
我用BDE联,速度是快了不少,但干即显示不出数据来(不管是用image,dbimage,还是另存为bmp文件,都没有用)
lws0472 2002-04-10
  • 打赏
  • 举报
回复
对code 加索引,或改为用存储过程,在数据库服务器端执行,这样速度会快一些
3cs 2002-04-10
  • 打赏
  • 举报
回复
用Tadotable 控件试一试吧!
Nizvoo 2002-04-10
  • 打赏
  • 举报
回复
with XXQuery do
begin
Close;
SQL.Clear;
SQL.Add('...............');
Prepare;
Open;
end;
......
rzh 2002-04-09
  • 打赏
  • 举报
回复
回复: suvi():你对这些参数熟吗?能不能给我们解释解释!!
hch_d 2002-04-09
  • 打赏
  • 举报
回复
好象是太长了点…………
suvi 2002-04-09
  • 打赏
  • 举报
回复
execsql 是用来执行这些 insert, update, delete的语句的,没有结果返回的,要结果集就用 open就可以了。

另外如果你在delphi中使用ado的话,记得adoconnection有很多参数可以调的,很影响性能的。

其次,pb+sybase本来就是最佳搭配,不太好对比呦
rzh 2002-04-09
  • 打赏
  • 举报
回复
1)先改正一个问题:用ADO需13秒多,用BDE约2秒但数据不能正确显示(dbimage,image都显示为空白),用PB约1秒且能正确显示。
2)修正一个语句:adoquery1.execute应该是adoquery1.execsql.
3)在执行adoquery1.execsql后,如不用adoquery1.active:=true,则不能从中读取如(adoquery1.FieldByName('xp') as TBlobField ).SaveToStream(ms);数据
rwdx 2002-04-09
  • 打赏
  • 举报
回复
ado不可能那么慢,肯定有问题
Kylixer 2002-04-09
  • 打赏
  • 举报
回复
你的“adoquery1.execute;”处是不是有问题,ADOQuery有此方法吗?是不是ExecSQL?如果是的话再加上“adoquery1.active:=true;岂不是执行了两次Select语句?
Kylixer 2002-04-09
  • 打赏
  • 举报
回复
两万多条数据还算多?应该是程序或库结构问题!
加载更多回复(13)

5,930

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧