Newsgroup: it.comp.appl.access
Titolo: annulla inserimento e sposta il focus

Salve a tutti, ho un piccolo problema da sottoporre alla vs. attenzione per
il quale ormai sono in loop...
ho una maschera continua in A97 nella
quale, sull'evento BeforeUpdate dei controlli, eseguo la verifica di
congruità dei dati immessi (verifica del tipo che non siano stati inseriti
spazi oppure valori nulli opp. ecc). A valle della verifica, in caso di
riscontro di errori, propongo o di correggere il dato immesso nel controllo
o di annullare l'inserimento (e fin qui tutto bene). Vorrei, in aggiunta
all'annullamento dell'inserimento, spostare il focus sul primo controllo
del record (in pratica nella sub BeforeUpdate ho scritto:
Private Sub
campo2_BeforeUpdate(Cancel As Integer)
.......
me.undo
me!campo1.setfocus
end sub
la cosa, però, non funziona in quanto il
messaggio di errore che viene fuori chiede di salvare il campo prima di
usare il comando setfocus.
Ho allora tentato modificando la sub in
Private Sub campo2_BeforeUpdate(Cancel As Integer)
.......
me.undo
DoCmd.DoMenuItem acFormBar, acEditMenu, acUndo, , acMenuVer70
me!campo1.setfocus
end sub
ma la cosa continua a non funzionare. Potete
darmi una dritta?
Grazie a tutti.
 
--------------------------------
Inviato via 
http://usenet.iol.it

 ha scritto nel messaggio
news:146Z133Z1Z30Y1...@usenet.iol.it...

Forse la cosa migliore è che le verifiche di conguità dei controlli tu le
faccia tutte in sieme alla fine a fronte dell'evento "Prima di aggiornare"
del record e non di ogni singolo controllo.
In caso che rilevi degli errori, annulla l'evento di registrazione del
record con Cancel = True, quindi sposti il fuoco dove vuoi: se lo ritieni
opportuno ripristina il vecchio valore del controllo inesatto usando la sua
proprietà OldValue (vedi help)
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------.

 ha scritto nel messaggio
news:m6Sv8.59726$m41.1...@twister2.libero.it...

Ti ringrazio Roberto per il suggerimento, con l'occasione vorrei una tua
valutazione sulla sequente fattibilità di eseguire comunque la verifica di
congruità per i singoli controlli prima di attivare l'evento "prima di
aggiornare" per il record (è una valutazione di fattibilità e non di
opportunità): dal messaggio di errore che viene fuori mi sembra di capire
che non posso spostare il focus dall'interno della sub BeforeUpdate e
pertanto penso di attivare l'evento su timer assegnando a Me.TimerInterval =
1 all'interno della sub BeforeUpdate.
In poche parole la sub  si modificherebbe in:
Private Sub campo2_BeforeUpdate(Cancel As Integer)
 .......
me.undo
Me.TimerInterval = 1
end sub
Private Sub Form_Timer()
Me.TimerInterval = 0
me!campo1.setfocus
End Sub
Premesso che non sono un esperto ma solo un appassionato, dalle prime prove
fatte sembra funzionare. Ti chiedo, con la tua esperienza ritieni che possa
funzionare sempre (in particolare con applicazioni divise in FE e BE e con
SO tipo NT o W2000) o ci sono delle controindicazioni?
Grazie e saluti, Max.

 ha scritto nel messaggio
news:lEzw8.68795$SR5.1...@twister1.libero.it...
[CUT]

Non vedo alcuna controindicazione alla tua soluzione, però mi devi togliere
una curiosità: che significato ha spostare il fuoco sul Controllo1 nel caso
in cui sia formalmente errato il Controllo2?
Nel caso che la verifica di congruità la effettui a fronte dell'evento
"Prima di aggiornare" di ogni controllo, non è più logico lasciare il fuoco
sul controllo risultato non esatto (quindi cavarsela con un Cancel = True)?


---------------------------------------------
Presto detto: intendo
spostare il focus sul Controllo1 quando, a fronte dell'inserimento di un
dato errato nel suddetto controllo, alla domanda se si intende correggere
il dato appena inserito o annullare la procedura di inserimento/modifica
sul controllo del record corrente, l'utente desidera annullare la procedura
di inserimento.
Il tutto è nato dalla seguente considerazione:
classico
db ordini
form ordine cliente con sub-form articoli ordinati
il campo
controllo1 identifica il codice degli articoli ordinati (il campo codice
articolo attivo è evidenziato. Questa disposizione, accompagnata dal fatto
che tutti i controlli hanno per defoult la proprietà locked = true ed
enabled = false tranne il solo controllo1 che ha locked = true ma enabled =
true, dovrebbe facilitare l'utente nella ricerca visiva in fase di
scorrimento dei record)
onde evitare inserimenti accidentali sul controllo
attivo, su evento doppio click sul controllo1 modifico le proprietà locked
ed enabled del record corrente in modo da consentire le modifiche (azione
intenzionale di modifica dati)
quando il campo controllo1 riceve il focus
(o perchè completo l'inserimento di tutti i controlli del record corrente o
perchè eseguo il comando salva o perchè annullo l'inserimento/modifica, si
ripristinano le condizioni locked ed enabled su tutti i controlli
E' tutta
qui la motivazione, probabilmente è possibile fare tutto questo con
soluzioni alternative molto più snelle e semplici ma come ti ho detto sono
semplicemente un appassionato e non un professionista per cui è facile che,
anzichè la scorciatoia, mi complichi da solo la vita.
Ti ringrazio per la
disponibilità e ti saluto, Max.
