各位:
有没有碰到过Access查询效率很低的问题?
我的Access数据库中一个Company表,存有8000条左右的数据,在Delphi中将其Select出来,由于DataGrid不可能一次显示这么多数据,故每一次我只是选出8条,可以翻页,SQL语句中我采用 Select top n 做的,一切都好,可惜的是翻到100页时,就很慢很慢的,而翻到1000页时,这页显示居然不可思议的用了15分钟。
不知各位有没有好的办法?指点指点!
有没有碰到过Access查询效率很低的问题?
我的Access数据库中一个Company表,存有8000条左右的数据,在Delphi中将其Select出来,由于DataGrid不可能一次显示这么多数据,故每一次我只是选出8条,可以翻页,SQL语句中我采用 Select top n 做的,一切都好,可惜的是翻到100页时,就很慢很慢的,而翻到1000页时,这页显示居然不可思议的用了15分钟。
不知各位有没有好的办法?指点指点!
解决方案 »
- 两个公司,一个售后一个研发。。去哪个好?薪酬都一样
- Delphi 7 打开一个PAS文件后在左侧显示的函数列表面板怎么调出来?
- 特急!!!关于数据连接,和局域网中搜索服务器的问题
- 如何设计mdi+dll系统?
- 请问Report Machine报表中,如果给TrmGridReport动态添加列
- 外部程序提示功能
- 求Sql脚本
- 只有.dcu文件,没有其对应的.pas文件,能否放进工程中编译?怎样做?
- 怎么把buff的数据显示成图片啊?
- DELPHI是什么?
- sql server数据库中怎样写比较时间类型字段的sql查询语句啊?
- TdxTreeList如何实现间隔色(奇数行一种颜色,偶数行一种颜色。)
uses ADOInt;
...
aqStore: TADOQuery; {主数据集,一次取全部出来,用adsClone来显示分页数据}
dsStore: TDataSource; {连到DBGrid的数据源}
...
implementationvar
pCount: Integer;
curPage: Integer = 1;
adsClone: TADODataSet;
...procedure TfrmEhlib.FormShow(Sender: TObject);
begin
...
adsClone := TADODataSet.Create(self);
aqStore.Recordset.PageSize := 15;
pCount := aqStore.Recordset.PageCount;
ShowData(1);
end;
...
procedure TfrmEhlib.ShowData(iPage: Integer); {显示iPage页数据,主要过程}
procedure CreadeAdsField;
var
i: Integer;
begin
adsClone.Close;
adsClone.FieldDefs.Clear;
for i := 0 to aqStore.FieldCount - 1 do
begin
if i = 2 then Continue;
adsClone.FieldDefs.Add(aqStore.Fields[i].FieldName, aqStore.Fields[i].DataType, aqStore.Fields[i].Size);
end;
adsClone.CreateDataSet;
end;
var
i, j: Integer;
rs: ADOInt.RecordSet;
begin
aqStore.Recordset.AbsolutePage := iPage;
rs := aqStore.Recordset;
CreadeAdsField;
adsClone.DisableControls; for i := 0 to rs.PageSize - 1 do
begin
adsClone.append;
for j :=0 to rs.Fields.Count - 1 do
adsClone.Fields[j].Value := rs.Fields[j].Value;
rs.MoveNext;
if rs.EOF then Break;
end;
adsClone.EnableControls;
adsClone.First;
dsStore.DataSet := adsClone;
lblCount.Caption := '页次:' + IntToStr(iPage) + '/' + IntToStr(pCount);
end;
...
procedure TfrmEhlib.lblfPageClick(Sender: TObject);
begin
curPage := 1;
ShowData(curPage);
end;procedure TfrmEhlib.lblpPageClick(Sender: TObject);
begin
if curPage = 1 then
begin
MessageBox(self.Handle, '已到了首页!', '提示', mb_IconInformation + mb_Ok);
Exit;
end;
Dec(curPage);
ShowData(curPage);
end;procedure TfrmEhlib.lblnPageClick(Sender: TObject);
begin
if curPage = pCount then
begin
MessageBox(self.Handle, '已到了末页!', '提示', mb_IconInformation + mb_Ok);
Exit;
end;
Inc(curPage);
ShowData(curPage);
end;procedure TfrmEhlib.lbllPageClick(Sender: TObject);
begin
curPage := pCount;
ShowData(curPage);
end;
那个ADOInt是什么的东东啊?