[ derrad @ 01.11.2002. 13:35 ] @
Sporo se ucitavanje dataset. Da bi se prikazala tabela od 10500 slogova na formi (baza-Access) treba jedan minut i 39 sekundi. Ako je baza MSSQL 7.0 ista tabela onda negde oko 15 sekundi. Da li je to sporo šta mislite ljudi.
[ degojs @ 01.11.2002. 17:25 ] @
Kako uspevas da prikazes 10 'iljada slogova na formi u isto vreme? :-)
Drugim recima, moras li da 'vuces' sve te slogove odjednom? Ima li uopste potrebe za drzanje 10K slogova u memoriji? Obicno je to greska.

Ne preporuca se citanje vise od nekoliko stotina slogova iz baze. Ili pokusaj da ogranicis SELECT izraz ili koristi 'citanje po stranicama'. Tada mozes da korisniku omogucis da se krece napred i nazad, kao da lista stranice.

Code:

‘ Procitaj 50 prvih:
Dim i As Integer = dataAdapter.Fill(dataSet, 0, 50, "Customers")


pozdrav
[ derrad @ 04.11.2002. 07:05 ] @
Kako da vrsim pretragu ako svih 10 hiljada slogova nisu na formi a ova tabele je nekakav sifarnik clanova.
Neka se prikazuje po 50 slogova na formi a kako da skocim na zadnji zapis u tabeli - skacem samo na 50 sto je za internet ok. Ali za win aplikaciju ?,mora to da odrađuje bez problema.
[ jc denton @ 04.11.2002. 21:03 ] @
Naravno da je presporo. VB 6.0 (DAO) procita 100 000 slogova za cas, i naravno, sve se to pregleda hyper brzinom - nema nikakvog zastoja. Do duse, ovo sam radio za Fox Pro 2.5 bazom.
[ Dragi Tata @ 04.11.2002. 21:48 ] @
Mislim da je u tvom slučaju rešenje da koristiš DataReader umesto DataSet-a.
[ degojs @ 05.11.2002. 06:02 ] @
Pa imas skroz krivi pristup problemu.

A sta da se u bazi nalazi 10 miliona zapisa i to svaki zapis da je gomila polja i to recimo duzih stringova? Neka biblioteka, sta znam..
Sve bi ih citao??? Sta kad klijent ispuni memoriju i swap fajl? Pojavi se famozno Out of memory i tu je kraj. Pukne aplikacija cak i ako ima Try.. Catch. Sta da ide preko mreze? I to je bespotrebno opterecenje.

Zasto uopste da prebacujes sve slogove u memoriju klijenta kad je upravo svrha postojanja baze da ONA drzi podatke i da vrsi operacije nad njima. Jednostavno, pretragu/promenu/dodavanje/itd vrsis tako sto nalozis bazi da izvrsi operaciju, a ona ti samo vrati odredjeni skup zapisa (u slucaju pretrage).

Kazes treba ti zadnje polje ili zadnjih 100 polja. Pa samo zatrazi iz baze upravo zadnjih 100 zapisa prosledjivanjem odredjenog SQL izraza itd, itd. Nedavno je bila tema u Database forumu o tome.
Citat:

.. a kako da skocim na zadnji zapis u tabeli - skacem samo na 50 ..

'Citanje po stranicama' radi bez problema za ovaj problem sto si ti naveo. Npr:
Dim i as Integer
i = dataAdapter.Fill(dataSet, 9990, 1000, "Table1")

Eto... citamo 1000 zapisa pocevsi od zapisa 9990.. problem resen. Mozda bi bilo dobro da pogledas uputstvo za Fill metod DataAdaptera.

Pozdrav
[ derrad @ 05.11.2002. 07:10 ] @
Mozda ja razmišljam u pogrešnom pravcu. Do sada sam radio u VFPro i tamo nisam imamo ovakvih problema. Mreza od 15 racunara, baza i exe (VFP50) se nalaze na jednoj(nazovimo je server) mašini. Pretraga i prikaz podataka iz baze radi sasvim solidno. U toj bazi nema nikavih kumulativa sve se obracunava. I na kraju godine na PI-166 zalihe magacina obracuna za 20-30 sekundi. Tako da mi nije jasno zasto prikaz i na lokalnom racunaru od 10 000 slogova iz access baze traje minut i 40 secundi.
Jer ako budem radio PC-aplikaciju šta da kazem musteriji cekaj, racunar ti je spor ili sta(da se vratim na VFP).
[ degojs @ 05.11.2002. 09:56 ] @
OK, sve to stoji. E sad, mozes li konacno stanje zaliha magacina da dobijes tako sto ces samoj bazi poslati odredjene SQL upite?
Da li vredi nesto poput:
SELECT (SUM(ulaz_na_magacin) - SUM(izlaz_iz_magacina)) AS trenutno FROM xxxx
(odnosno razne varijacije na tu temu :)

Drugim recima, moje pitanje od pocetka je, mozes li upotrebom SQL-a da izbegnes prevlacenje svih zapisa na klijent?

Odnosno, mozes li da predocis neki detalj o samoj bazi ako ti nijedno od resenja (citanje po stranicama, dataReader i povratak na VFP/VB6) nije bas primamljivo.

pozdrav