ciao raga
ho un problemino stupido e sicuramente la soluzione è banale, ma non riesco a venirne a capo.
devo aprire un database (e qui ci siamo), poi posizionarmi su un record specifico
io apro il database in questo modo:
DIM sqlr AS String
DIM MyRSR AS Result
sqlr = "SELECT * FROM documenti order by iddocumento"
MyRSR = MODMain.MyConn.Exec(sqlr)
MyRSR.MoveNext
normalmente dopo l'apertura il recordset si posiziona sul primo record, oppure sull'ultimo con il comando movenext che ho aggiunto.
ma se io volessi posizionarmi su un record specifico? tipo ho 250 record voglio posizionarmi sul 130.
attenzione non mi serve una query con WHERE e LIKE in quanto questo mi troverebbe il record, ma solo quello, io invece voglio che tutta la tabella rimanga caricata.
altro piccolo problema
moveto funziona solo per gli id in modalità integer.
e se io volessi posizionarmi su un testo?
tipo apro il database in questo modo
sqlr = "SELECT * FROM documenti order by idcognome"
e poi posizionarmi su un cognome tipo "rossi".
Avvertenza:
moveto non agisce sugli indici ma sull'index.
a prima vista sembra che non cambi nulla, ma c'è un'enorme differenza.
se create un database inserendo sempre nuovi record e non ne cancellate mai nessuno, noterete che moveto si posiziona sempre sul record successivo, basta fare un - 1 e risolve.
ma cosa succede se cominciate a cancellare qualche record? il caos.
la differenza sta nel fatto che l'id viene assegnato in modo incrementale ad ogni nuovo record, si comincia da 1 a salire, immaginate di avere nel database 30 record da 1 a 30, poi ne cancellate 2, i 28 che restano conserveranno i loro id.
l'index è diverso parte da 0 fino alla somma dei record, in questo caso avrete index massimo 27 e se cercherete di far caricare il record 30 moveto punterà sul nulla.
la soluzione? usare due variabili, una per gli id in modo da poter modificare sempre e solo il record che vorrete, l'altra per gli index, in moda da far muovere il database al record giusto.
tipo:
Dim MyId as string ' per le modifiche o l eliminazione record
Dim MyIndex as integer 'per muovere il recordset al record giusto
MyId = MRsR!idcliente
MyIndex = MrsR.index