如何提高ADODC控件性能(数据量大的问题),300分!

wsdrex 2003-08-25 10:01:08
ADODC控件连接数据库,数据量很大,使用DataGrid显示数据,打开窗体是很慢,我设置了CacheSize属性,但是没用?请问各位如何解决?
...全文
63 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
wsdrex 2003-08-26
  • 打赏
  • 举报
回复
感觉现在人气不旺啊
wsdrex 2003-08-25
  • 打赏
  • 举报
回复
语句是复杂了些,这些条件是必要的啊。客户端工作的,需要网络传输

数据量快到十万条吧
lzj34 2003-08-25
  • 打赏
  • 举报
回复
查询太复杂了,速度肯定跟不上,将数据优化一下,最大程度减小查询嵌套深度也许会快一点
TechnoFantasy 2003-08-25
  • 打赏
  • 举报
回复
这个查询语句肯定影响速度,你先把语句放查询分析器里面执行一下,看看执行的速度如何,另外一个问题就是在网络数据库中查询结果数据量大从而导致传输速度慢,你可以设置一下最大的回传记录数。
wsdrex 2003-08-25
  • 打赏
  • 举报
回复
如何解决?
CacheSize设置100到1000之间有用么?我试了一下,没感觉阿,各位帮帮忙。
wsdrex 2003-08-25
  • 打赏
  • 举报
回复
1.原来用的ADODC控件,改为引用工作量不小;

2.窗体第一次打开时,是使用一个比较复杂的查询语句:
SELECT DISTINCT PlantCode, BPNo, BPCalID, BPType, OwnerID,
(SELECT StepDesp1
FROM epstep
WHERE Rectype = 'EPBPInfo' AND step =
(SELECT step
FROM EPTrackList
WHERE TrackListID =
(SELECT MAX(TrackListID)
FROM EPTrackList
WHERE rectype = 'EPBPInfo' AND RecNo = EPBPInfo.BPNo AND
((StepDate IS NOT NULL AND stepdate <> '') OR
(stepremark <> '' AND stepremark IS NOT NULL))) AND
RecNo = EPBPInfo.BPNo)) AS BPStatus, ForecastDate, FinalDate,
BPFinalQty, PTRNo,
(SELECT StepDesp1
FROM epstep
WHERE Rectype = 'EPPTRInfo' AND step =
(SELECT step
FROM EPTrackList
WHERE TrackListID =
(SELECT MAX(TrackListID)
FROM EPTrackList
WHERE rectype = 'EPPTRInfo' AND
RecNo = EPBPInfo.PTRNo AND ((StepDate IS NOT NULL AND
stepdate <> '') OR
(stepremark <> '' AND stepremark IS NOT NULL))) AND
RecNo = EPBPInfo.PTRNo)) AS PTRStatus, BPRemark,
SimpleBPFlag, AlarmInd, BPEWO, BPGroupID, BPNotice,
(SELECT StepDesp
FROM epstep
WHERE Rectype = 'EPBPInfo' AND step =
(SELECT step
FROM eptracklist
WHERE tracklistid =
(SELECT MAX(TrackListID)
FROM EPTrackList
WHERE rectype = 'EPBPInfo' AND RecNo = EPBPInfo.BPNo AND
((StepDate IS NOT NULL AND stepdate <> '') OR
(stepremark <> '' AND stepremark IS NOT NULL))) AND
RecNo = EPBPInfo.BPNo)) AS BPStep, IssuedBy, IssueDate
FROM EPBPInfo
ORDER BY bpno

3.看看有没有优化的地方
4.还有其他方法吗?
lihonggen0 2003-08-25
  • 打赏
  • 举报
回复
直接改用ado:

工程--->引用--->Microsoft ActiveX Data Object 2.x(版本号)

Dim CN As New ADODB.Connection '定义数据库的连接
Dim Rs As New ADODB.Recordset

CN.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\NWIND.MDB;Persist Security Info=False"
CN.Open

Rs.CursorLocation = adUseClient
Rs.Open "select * from employees", CN, adOpenDynamic, adLockBatchOptimistic

Set DataGrid1.DataSource = Rs
viena 2003-08-25
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/topic/2180/2180086.xml?temp=.3470117
PDK 2003-08-25
  • 打赏
  • 举报
回复
第一,你可以动态执行,这样窗体不会死掉。
第二,设置CacheSize等于100到1000间的值。
第三,优化你的数据库
wsdrex 2003-08-25
  • 打赏
  • 举报
回复
明天结帖,还望各位帮忙,多出主意,多谢!
wsdrex 2003-08-25
  • 打赏
  • 举报
回复
Jhzyz(Frank Feng黑名单上的人) :
有什么好的第三方显示控件?提个建议?

lihonggen0(李洪根,用.NET,标准答案来了):
优化查询语句是一个办法,但是使用它本省的CacheSize为什么没用呢?

lihonggen0 2003-08-25
  • 打赏
  • 举报
回复

这样是最快
adOpenForwardOnly, adLockReadOnly
只进,只读当然比可写快了

建议你还是优化你的查询语句吧
馮強 2003-08-25
  • 打赏
  • 举报
回复
DataGrid不太好,用用其它的第三方显示控件吧,你优化ADO是没用的。
wsdrex 2003-08-25
  • 打赏
  • 举报
回复
返回2000条以上吧。
wsdrex 2003-08-25
  • 打赏
  • 举报
回复
根据上面的语句查询的返回的数据量没有那么多,语句本身执行不是太慢,再返回数据到客户端

整个过程很慢,返回的数据是要修改的。数据表的列数有40多吧,其中修改的列不多。
aiur2000 2003-08-25
  • 打赏
  • 举报
回复
to lihonggen0(李洪根,用.NET,标准答案来了)
我不懂的是为什么用adOpenDynamic, adLockBatchOptimistic
而不用 adOpenForwardOnly, adLockReadOnly这个好像最快啊
TechnoFantasy 2003-08-25
  • 打赏
  • 举报
回复
你说的是数据库中的数据量10万还是取回的这么多?如果查询平均取回的数据在几百条的话没必要设置了。
wsdrex 2003-08-25
  • 打赏
  • 举报
回复
TechnoFantasy(www.applevb.com) :
设置了最大记录数,如何取下面的数据呢?

各位大虾,怎么样啊?
还有什么建议吗?分数不够可以加的。很急

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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