[ mladenvasic @ 10.04.2006. 08:02 ] @
| Pozdrav svima, imam jedan problemcic.
Instalirao sam Visual Studio 2005.
U MFC aplikaciji sa MFC ODBC Consumerom kreirao sam CRecordest.
Problem je sledeci:
CRec m_rs;
// CRec mi je kreirana klasa CRecordset-a
m_rs.Open();
long count;
while (!m_rs.IsEOF())
m_rs.MoveNext();
count = m_rs.GetRecordCount();
if (!m_rs.IsBOF())
m_rs.MoveFirst();
//OVAJ DIO SA m_rs.MoveFirst() MI NE RADI ???????
//NECE DA MI SE POZICIONIRA NA PRVI REKORD, NE RADI MI NI m_rs.MovePrev()
|
[ Alex21 @ 10.04.2006. 09:42 ] @
Zato što u prethodnom dijelu koda ti je recordset otišao otišao do kraja (točnije iza zadnjeg),
a ti s if(!m_rs.IsBOF()) testiraš uvijet da li se recordset nalazi prije prvog.
[ mladenvasic @ 10.04.2006. 17:01 ] @
Isto mi se desava i bez provjere if (!m_rs.IsBOF())
stavim samo:
m_rs.MoveLast();
pa poslije toga:
m_rs.MoveFirst();
ili:
m_rs.MovePrev();
A sto se tice provjere "if(!m_rs.IsBOF())", zar ona ne znaci "ako je m_rs tj. pozicija trenutnog
rekorda razlicita od BOF", ILI GRIJESIM???
I jos nesto, ovaj mi primjer normalno radi u Visual C++ 6.0 i 7.0 ...
[ Alex21 @ 11.04.2006. 06:42 ] @
U pravu si. Moja greška.
Jedino "efikasno" što mi pada na pamet je to da pogledaš s kojim flagovima
otvaraš recordset, jer ukoliko je CRecordset::forwardOnly flag aktivan, tada niti ne možeš koristiti ništa drugo do MoveNext.
Pozdrav
[Ovu poruku je menjao Alex21 dana 11.04.2006. u 07:43 GMT+1]
[ mladenvasic @ 12.04.2006. 17:57 ] @
Sto se tice flagova, nisam nista konkretno postavljao.
Otvaram samo sa m_rs.Open(), rekordset mi je tipa snapshot
I jos kad sam kod tipa rekordseta, po vasem iskustvu koji je bolje kristiti i u kojim prilikama,
snapshot ili dynaset.
Ne shvatam u cemu je problem ovo mi se nije desavalo u VS6.0 i VS7.0
Mogu to rijesiti sa m_rs.Requery() ali ne znam koliko je to dobro ako se radi sa nekoliko hiljada rekorda.
MOZE LI MI NEKO OBJASNITI KAKO JE NAJBOLJE KREIRATI REKORDSET ZA RAD SA VISE HILJADA REKRDA,
KOJE FLAGOVE KORISTITI, KAKO UCITAVATI REKORDE ITD. I DA NEMAM PROBLEMA SA MoveFirst();
Hvala svima ...
[ Alex21 @ 13.04.2006. 12:29 ] @
Malo sam provjerio dokumentaciju:
IsBOF() testira da li se nalaziš prije prvog recorda, a IsEOF() testira da li se nalaziš nakon zadnjeg recorda.
Ono što bi tebe moglo mučiti jest podrška za scrolanje. Socrolanje je implementirano preko Move funkcija koje tebe i zezaju.
Da li će postojati podrška za scrolanje ovisi o ODBC driveru kojeg koristi tvoja aplikacija i da li je ODBC Cursor Library učitan u memoriju ( za snapshot tipove).
Moguće je da se je nešto promijenilo kod novog VS-2005.
Učitavanje Cursor Library kontroliraš s CDatabase::Open( ..., ..., ..., BOOL bUseCursorLib = TRUE).
Za dynaset tip se ne smije koristiti ovaj flag.
Nisam u tome, tako da sam svoje savjete ispucao.
Pozdrav
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.