[ MatezYU @ 12.02.2007. 12:54 ] @
Dakle ovako, radim u delphi7 sa ado komponentama. Problem je sto imam jednu tabelu sa 20000 rekorda.. Kada otvorim sa append treba joj 1-2 sekunde da se otvore polja za nov unos.. Isto tako kada i postujem treba toliko puno vremena.. Da li zna neko kako mogu to da ubrzam?
[ Vic @ 12.02.2007. 13:49 ] @
Nisi rekao da li radis sa tabelom ili sa query-jem. U svakom slucaju bolja varijanta je da koristis ili INSERT SQL ili da otvaras query koji ne ucitava sve podatke (recimo select * from tabela where id is null)
[ priki @ 19.02.2007. 21:05 ] @
možeš da uradiš na sledeći način
dodaš jedan dataset sa istom strukturom polja na formu
gde radiš unos i preko njega vršiš unos
a u njemu ćeš imati upit
"select <spisak polja> from tabela where sifra=:sifra"

dakle, "dižeš" samo jedan record u data set i stvari idu mnogo brže.
Kad radiš append, ADO radi iteraciju kroz sve slogove pa to potraje

drugo
prebaci se na dbExpress
Naime, sa ADO-om je sve u redu ali izgelda da ima lošu
implementaciju u Delphiju

Delphi native je dbExpress, probaj da to sve uradiš
sa dbExpress-om i videćeš razliku

treće
niko ne radi select na tolikom broju slogova, daj mu neki parametar
tipa " select ............ where datum between :dat1 and :dat2"

pozdrav
Srdjo
[ Miloš Baić @ 19.02.2007. 21:57 ] @
Pozdrav,

ne znam koja je baza u pitanju, ali ako radiš sa ado mogao bi možda ovako... Pretpostavimo da imaš formu na kojoj je TDBGrid (TADOQuery1 i TDataSource1) sa tih 20000 slogova ili kako si već odradio select upit, a pored toga imaš i još jednu formu sa koje unosiš podatke ili vršiš izmene. Na tu drugu formu postavi TADOQuery2, poveži je sa TADOConnection. Dakle, na toj TForm2, unos - izmene, sa TADOQuery2 odradiš:
Code:
ADOQuery2.Close;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add('insert into tabela (atribut1, atribut2) values (:atribut1, :atribut2)')
ADOQuery2.Parameters.ParamByName('atribut1').Value:= Edit1.Text;
ADOQuery2.Parameters.ParamByName('atribut2').Value:= Edit2.Text;
ADOQuery2.Prepared:= true;
ADOQuery2.ExecSQL;

Posle toga odradiš refresh TADOQuery sa TForm1. Znači, ne vučeš slogove iz one tabele a dodaješ joj, posle toga samo refrešuješ data set i dobiješ taj uneti slog ako pripada tom select upitu.

BTW, pišem iz glave, možda ima neka greška u kodu.

Od native komponenti preporučujem ZEOSLib.