ciao Andrea,
[...]
Almeno, se capisco il codice, le prossime volte spero di essere autonomo e non scocciarvi più.
[...]
non tu scocci mai, anzi...l'approccio di capire il codice non è da tutti e lo apprezzo molto ed è l'unico vero modo per imparare altrimenti il tutto si riduce ad un infruttuoso ed inutile copia/incolla.
quindi così hai non porte ma portoni spalancati :-)
[...]
- con with me.recordsetclone si inizia un ciclo che fa riferimento all'origine dei dati;
[...]
non proprio. un ciclo è tipico delle istruzioni for...next....for each ...next...do while....loop ...oppure do... loop until.
qui usiamo il costrutto with...end with per riferirci al recordsetclone della form, che è appunto un clone del recordset della form stessa.
il costrutto with...end with permette di rendere il codice ( mio parere) più chiaro e lineare e scorrevole ed inoltre di evitere di ripetere sempre in modo ridondate la variabile oggetto.
ad esempio supponi di dichiarare un recordset
dim rst as dao.recorset
set rst=dbengine(0)(0).openRecordset("tuaTabella",dbopneDynaset)
e di aggiungere un riga, è meglio procedere così :
with rst
.addnew
.fields("mioCampo")=mioValore
.fields("mioCampo2")=mioValore2
.fields("mioCampo3")=mioValore3
.update
end with
oppure
rst.addnew
rst.fields("mioCampo")=mioValore
rst.fields("mioCampo2")=mioValore2
rst.fields("mioCampo3")=mioValore3
rst.update
entrambe corrette ma la prima è certamente migliore.
Il costrutto può essere anche nidificato.
Lo stesso uso e stessa logica per quanto alla proprietà recordsetClone del post precedente.
[...]
- con .FindFirst "nz(importo)=''" cerchiamo il primo record con importo null;
[...]
utilizziamo il metodo findFirst alla ricerca del primo record che soddisfa la condizione impostata rendendo quel record se individuato il record corrente.
[...]
con If Not .NoMatch Then se non viene rispettata la condizione precedente allora;
[...]
E' sempre bene verificare la proprietà noMatch per determinare che la ricerca abbia dato esito positivo.
NoMatch rende vero se non viene trovata alcuna corrispondenza quindi falso se ne trova:
invochiamo if not .noMatch per identificare il soddisfacimento della condizione precedentemente impostata.
mi dirai tu....non era più facile chiamarla match ed evitare la doppia negazione....? si, ma MSFT così ha deciso.
[...]
con Me.Bookmark = .Bookmark non ho la più pallida idea
[...]
bookmark significa segnalibro, quell'istruzione non fa altro che sincronizzare il recordset della form con il recorsetClone, in pratica è l'esecuzione di questa istruzione che sposta il puntatore sul record che soddisfa la condizione ed li successivo setFocus
sposta il cursore sul controllo scelto.
[...]
Ho provato ad impostare dopo "end with" come "setfocus" un altro campo, ma mi da errore: perché ?
[...]
end with non lo devi spostare lascialo li, ma se sposti il focus su un altro controllo ( controlli propri di forms e reports campi di tabelle e queries) dovresti vedere lo spostamento.
il setFocus messo alla fine permette di spostare il cursore sul record nuovo nel momento in cui la condizione settata in findFirst non è soddisfatta.
Ciao, Sandro.