Article View: borland.public.cppbuilder.database.ado
Article #1277Re: Slow performance with ADOQuery
From: Viatcheslav V. Vassiliev
Date: Fri, 10 Sep 2004 09:43
Date: Fri, 10 Sep 2004 09:43
121 lines
5261 bytes
5261 bytes
Client-side cursor caches all data in memory, so it is like copy recordset
to memory. You may try to scroll recordset and cache bookmarks, and instead
of RecNo use Bookmark. Also calling First(), then MoveBy(XX) may increase
speed because another mechanism is used.
DBGrid caches some data for visible rows and this could speed up displaying
data.
40 000 records could occupy quite much memory (RAM in case of client cursor)
if there are many columns or there are BLOBs. If this is the problem, you
may create temp Access db, copy data from SQL Server into this Access db
(with SELECT .. INTO from Access db) and use use data from this database
with server-side cursor (bookmarks are preffered over RecNo). This should
work if your data will be up to ~1 GB.
General recommendation is avoid using so large recordset with UI.
//------------------------------------------
Regards,
Vassiliev V. V.
http://www.managed-vcl.com - using .Net objects in Delphi for Win32 +
ADO.Net
http://www.oledbdirect.com - The fastest way to access MS SQL Server,
MS Jet (Access) and Interbase (through OLEDB)
"Vic" <victor@espainformatica.com> �������/�������� � �������� ���������:
news:4140ac2b@newsgroups.borland.com...
> > What is your DBMS?
> > > Info : I'm using builder 6 and sqlserver 2000 in windows xp sp1.
> SQL Server 2000 :)
>
> > What is cursor type (server or client)?
> Client.
>
> > Is db server on local computer or remote?
> db server is on a remote computer
>
> If you need more information ask me what you need?
>
> "Viatcheslav V. Vassiliev" <support@oledbdirect.com> escribi� en el
mensaje
> news:414095c6@newsgroups.borland.com...
> > What is your DBMS? What is cursor type (server or client)? Is db server
on
> > local computer or remote?
> >
> > //------------------------------------------
> > Regards,
> > Vassiliev V. V.
> > http://www.managed-vcl.com - using .Net objects in Delphi for Win32 +
> > ADO.Net
> > http://www.oledbdirect.com - The fastest way to access MS SQL Server,
> > MS Jet (Access) and Interbase (through OLEDB)
> >
> > "Vic" <victor@espainformatica.com> �������/�������� � ��������
���������:
> > news:414078e5@newsgroups.borland.com...
> > > I have a problem with the TADOQuery. In my project I need to read
> records
> > > ( about 40000 ) from some tables and show them in a list. For do it, I
> use
> > a
> > > virtual TListview (OwnerData = true) and the ADOQuery with a SQL
> statement
> > > to read from database. The process for reading records from the
database
> > to
> > > the query is fast, it gets about 3 sec., and I use the event OnData of
> the
> > > listview to show the records directly form the query.
> > > Here is the code :
> > >
> > > void __fastcall TForm1::ListView1Data(TObject *Sender, TListItem
*Item)
> > > {
> > > ADOQuery->RecNo = Item->Index + 1;
> > >
> > > for ( int i = 0; i < ListView1->Columns->Count; i++ )
> > > {
> > > if ( i == 0 )
> > > Item->Caption = ADOQuery->FieldByName("CODIGO")->Value;
> > > else
> > >
> > > Item->SubItems->Add(ADOQuery->FieldByName("NOMBREFISCAL")->Value);
> > > }
> > > }
> > >
> > > Before show the records directly from the query, I tried to copy the
> query
> > > to my own list, and show the records from the list, but that process
was
> > > very very very slow. Then I decide to avoid the 'QueryToMemory'
process.
> > >
> > > The problem that I have now is when I scroll the listview. While at
the
> > top
> > > of the listiew the scrolling is fast, when I go to
> > > the bottom of it the scrolling is much slower.
> > >
> > > I think that the problem should be here :
> > > ADOQuery->RecNo = Item->Index + 1;
> > > because if I comment this line, the scroll process returns to the
normal
> > > performance, but ofcourse I can't comment this line.
> > >
> > > How can I solve that problem ?
> > > Is it any other faster way to do what I need ?
> > >
> > > Thank you in advance.
> > >
> > > Info : I'm using builder 6 and sqlserver 2000 in windows xp sp1.
> > > --
> > > Victor
> > > ESPA Inform�tica.
> > >
> > >
> >
> >
>
>
Technical Details
Message-ID:
<41417741$1@newsgroups.borland.com>Path:
arc1-ca.pugleaf.net!g2news1.google.com!news1.google.com!news.glorb.com!newsfeed00.sul.t-online.de!t-online.de!newsfeeds.ihug.co.nz!ihug.co.nz!newsgroups.borland.com!not-for-mailReferences:
<414078e5@newsgroups.borland.com> <414095c6@newsgroups.borland.com> <4140ac2b@newsgroups.borland.com>Show Full Headers
Complete Article Headers
X-Google-Thread: 10698b,f914d51d26714f04 X-Google-Attributes: gid10698b,public X-Google-Language: ENGLISH,ASCII From: "Viatcheslav V. Vassiliev" <support@oledbdirect.com> Newsgroups: borland.public.cppbuilder.database.ado References: <414078e5@newsgroups.borland.com> <414095c6@newsgroups.borland.com> <4140ac2b@newsgroups.borland.com> Subject: Re: Slow performance with ADOQuery Date: Fri, 10 Sep 2004 13:43:29 +0400 Lines: 123 X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 6.00.2800.1437 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1441 NNTP-Posting-Host: 213.234.218.42 Message-ID: <41417741$1@newsgroups.borland.com> X-Trace: newsgroups.borland.com 1094809409 213.234.218.42 (10 Sep 2004 02:43:29 -0700) Path: arc1-ca.pugleaf.net!g2news1.google.com!news1.google.com!news.glorb.com!newsfeed00.sul.t-online.de!t-online.de!newsfeeds.ihug.co.nz!ihug.co.nz!newsgroups.borland.com!not-for-mail