Se nell'evento non inserisco altro codice va tutto bene.Se al
contrario ad esempio inserisco la chiusura della form
con Docmd.close a volte mi chiude la form salvando il
record.Praticamente e' come se saltasse il SendKeys.
Questo mi succede anche se in una Form ho inserito praticamente tutti
i record e voglio annullare l'inserimento.
Da cosa puo' dipendere.
Ho esigenza di crare questo controllo perche' disabilitando "ESC"
voglio dare lo stesso la possibilita' di annullare l'inserimento.
Grazie in anticipo
Dino
forse il sistema non riesce a gestire il tutto, prova cosi:
sendkeys "{esc}"
doevents
qui scrivi il codice per la chiusura della forma.
> Ho esigenza di crare questo controllo perche' disabilitando "ESC"
> voglio dare lo stesso la possibilita' di annullare l'inserimento.
>
> Grazie in anticipo
> Dino
--
Ciao
Geppo
Ciao Geppo e grazie per la risposta.Ho trovato dove nasce il
problema.Se io inserisco praticamente tutti i dati nei vari records
tranne l'importo finale cliccando sul pulsante dove ho impostato
l'emulazione "ESC" si annulla lìinserimento.Se invece aggiorno
l'importo noto (La famosa matita in alto alla sinistra del Form)che
per un istante sisalva il record e poi mi ritorna il simbolo del
record da salvare.Cliccando su lpulsante emulazione non fa altro che
confermare il salvataggio piuttosto che annullarlo.
L'aggiornamento di quell'importo avviene inserendo in alcuni campi dei
valori prelevati in automatico da una sottomaschera.Evento Dblclick
della sottoform ed vengono inseriti i valori.Vacendo così si aggiorna
l'importo famoso.E' prorpio nel momento del Dblclick che noto la
problematica che ti dicevo prima.
Di seguito se ti puo' servire ti riporto il codice dell'evento
Dblclick della sottoform:
If IsNull([Nome_listino]) Then
MsgBox "ATTENZIONE!!!!LISTINO MANCANTE"
ElseIf IsNull(Forms!Ins_articoli![Data listino]) Then
MsgBox "ATTENZIONE!!!!DATA LISTINO MANCANTE"
Forms!Ins_articoli![Data listino].SetFocus
Forms!Ins_articoli![Comando67].Visible = False
ElseIf IsNull(Forms!Ins_articoli![Prezzo listino]) Then
MsgBox "ATTENZIONE!!!!PREZZO LISTINO MANCANTE"
Forms!Ins_articoli![Prezzo listino].SetFocus
Forms!Ins_articoli![Comando67].Visible = False
Else
Forms!Ins_articoli!Sconto1 = Me.Sconto1
Forms!Ins_articoli!Sconto2 = Me.Sconto2
Forms!Ins_articoli!Sconto3 = Me.Sconto3
Forms!Ins_articoli![Incremento in %] = Me.Incremento_listino_in__
Forms!Ins_articoli![Decremento in %] = Me.Decremento_listino_in__
Forms!Ins_articoli![Comando67].Visible = False
End If
Grazie in anticipo Dino
Sendkey � pericoloso.....nn lo puoi controllare.....
Se proprio ti serve disabilitare ESC x l'eventuale cancellazione
dell'inserimento (immagino su form associate a questo punto), io mi farei una
funzione globale, una cosa del tipo
Public Function TastoESC(NomeForm, Azione) as integer
if Azione = Edit (guardi la sintassi....) then
TastoESC = 0
else
TastoESC = 69
end if
end function
se chiaramente si trova il modo di sapere se una Form � in edit o no.....
in ogni form sull'evento KeyDown (o KeyPress) metti KeyCode = TrovaESC cos�
diventa = 0 (nessuna azione) oppure il valore di esc. Cos� dove ti serve ce
l'hai (tipo il pulsante chiudi predefinito) e dove no lo blocchi con una riga
di codice
Non garantisco la funzionalit� xch� non uso mai form associate per inserire
nuovi record......
--
Questo articolo e` stato inviato dal sito web http://www.nonsolonews.it
Ciao e grazie per la risp.due domande
nella funzione Ok nome form ma per Azione cosa intendi (o per lo meno
quale azione)
Il significato di Tasto ESC=69
Grazie
Dino
>ascondi testo citato
>>
>> - Mostra testo citato -
>
>Ciao e grazie per la risp.due domande
>nella funzione Ok nome form ma per Azione cosa intendi (o per lo meno
>quale azione)
>Il significato di Tasto ESC=3D69
>Grazie
>Dino
Questo l'ho provato
Public Function TastoESC(NomeForm As Form) As Integer
If NomeForm.NewRecord Then
TastoESC = 0
Else
TastoESC = 118
End If
End Function
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Dim I As Integer
Select Case KeyCode
Case vbKeyEscape
I = TastoESC(Me.Form)
KeyCode = I
If KeyCode = 118 Then
MsgBox "!"
End If
Case Else
End Select
End Sub
Vedi se pu� esserti utile
Gentilissimo.Provo e ti faccio sapere.
Ancora super grazie
Dino
l'emulazione "ESC" si annulla l�inserimento.Se invece aggiorno
l'importo noto (La famosa matita in alto alla sinistra del Form)che
per un istante sisalva il record e poi mi ritorna il simbolo del
record da salvare.Cliccando su lpulsante emulazione non fa altro che
confermare il salvataggio piuttosto che annullarlo.
L'aggiornamento di quell'importo avviene inserendo in alcuni campi dei
valori prelevati in automatico da una sottomaschera.Evento Dblclick
della sottoform ed vengono inseriti i valori.Vacendo cos� si aggiorna
l'importo famoso.E' prorpio nel momento del Dblclick che noto la
problematica che ti dicevo prima.
Di seguito se ti puo' servire ti riporto il codice dell'evento
Dblclick della sottoform:
If IsNull([Nome_listino]) Then
MsgBox "ATTENZIONE!!!!LISTINO MANCANTE"
ElseIf IsNull(Forms!Ins_articoli![Data listino]) Then
MsgBox "ATTENZIONE!!!!DATA LISTINO MANCANTE"
Forms!Ins_articoli![Data listino].SetFocus
Forms!Ins_articoli![Comando67].Visible = False
ElseIf IsNull(Forms!Ins_articoli![Prezzo listino]) Then
MsgBox "ATTENZIONE!!!!PREZZO LISTINO MANCANTE"
Forms!Ins_articoli![Prezzo listino].SetFocus
Forms!Ins_articoli![Comando67].Visible = False
Else
Forms!Ins_articoli!Sconto1 = Me.Sconto1
Forms!Ins_articoli!Sconto2 = Me.Sconto2
Forms!Ins_articoli!Sconto3 = Me.Sconto3
Forms!Ins_articoli![Incremento in %] = Me.Incremento_listino_in__
Forms!Ins_articoli![Decremento in %] = Me.Decremento_listino_in__
Forms!Ins_articoli![Comando67].Visible = False
End If
Grazie in anticipo Dino
Ma per caso l'emulazione del tasto ESC la vuoi fare per effettuare una
specie di annullamento dei dati inseriti nella maschera ed in attesa di
essere scritti nella tabella ? Se � cos�, guarda che puoi ottenere quello
che desideri semplicemente gestendo l'evento form_beforeupdate.
Ciao
Antonio
Ciao Antonio e grazie per la risposta.Sì e' proprio così.intendi
utilizzare il sendkeys "{esc}" l'evento form_beforeupdate.
Grazie Dino
Ciao Antonio e grazie per la risposta.S� e' proprio cos�.intendi
utilizzare il sendkeys "{esc}" l'evento form_beforeupdate.
Grazie Dino
Appunto... evita di impelagarti nel lanciare un esc col sendkeys, quando
puoi ottenere lo stesso effetto impostando cancel = true nel beforeupdate.
Come sempre preciso e sintetico
Grazie mille.
NB:Mi permetto di approfittarne della tua pazienza.Volevo che mi dessi
un consiglio sul post appena sopra a questo a riguardo "la
segnalazione di campo gia' esistente" con campo a valore predefinito
"AB"
Grazie ancora e scusa se ne approfitto della tua disponibilita'
Dino
Eccomi qua' ancora .Ho provato ad impostare cancel = true nel
beforeupdate del form in esame ma non funziona.Prob. non ti ho capito.
Io ho disabilitato ESC da tastiera e vorrei creare un pulsante di
comando dove l'utente sia consapevole dell'annullamento
dell'inserimento.
Con il Sendkeys l'ho trovato,pero' non sempre funziona.Ma il Cancel =
True non posso inserirlo nel pulsante di controllo.Vero?
Grazie
Dino
Eccomi qua' ancora .Ho provato ad impostare cancel = true nel
beforeupdate del form in esame ma non funziona.Prob. non ti ho capito.
Io ho disabilitato ESC da tastiera e vorrei creare un pulsante di
comando dove l'utente sia consapevole dell'annullamento
dell'inserimento.
Con il Sendkeys l'ho trovato,pero' non sempre funziona.Ma il Cancel =
True non posso inserirlo nel pulsante di controllo.Vero?
Grazie
Dino
---------- RISPOSTA -------------
Non so bene cosa vorresti fare e mi sono limitato ad immaginare che tu
voglia simulare l'uso del tasto ESC, visto che battendo il tasto ESC si
riesce ad annullare il valore immesso in un controllo e, pigiandolo una
seconda volta, ad annullare anche lo stato della maschera, ovvero la
condizione di "aggiornamento in corso" che assume la maschera non appena
inizi a scrivere qualcosa in un qualsiasi controllo associato ad un campo di
tabella. Questa particolare condizione la si pu� capire quando sulla parte
sinistra della maschera vedi apparire una matita al posto del solito
triangolino nero. La matita sta ad indicare che � stato modificato qualcosa
e che quindi i dati valorizzati nei controlli della maschera sono in attesa
di essere scaricati sulla tabella (o query) associata.
Bene. A questo punto ci si pu� chiedere: ma se � presente o meno quella
specie di matitina lo posso sapere nel corso di una routine evento ? La
risposta � s�: la propriet� della maschera dirty ti indica proprio questa
cosa. Allora nel programma tu puoi inserire una routine di controllo di ogni
valore immesso nella maschera in un unico punto, all'evento beforeupdate
della maschera, e cos� scatenare l'aggiornamento oppure rifiutarlo se i dati
non sono coerenti.
Un banalissimo esempio:
sub form_beforeupdate (cancel as integer)
if not me.dirty then
msgbox "come sei arrivato qui se non c'� niente da aggiornare ?"
exit sub
end if
if trim (me.cognome) = "" then
msgbox "aggiornamento non permesso senza l'inserimento del cognome"
goto fattoerrore
end if
if non isdate (datanascita) then
msgbox "data di nascita non corretta"
goto fattoerrore
end if
... altre verifiche di contenuti...
' se non hai intercettato nessun errore l'exit sub successivo far�
aggiornare il record
exit sub
fattoerrore:
me.cognome.undo
me.datanascita.undo
me.undo
' ne puoi mettere anche degli altri
cancel = true
end sub
il cancel=true inserito qui sopra fa in modo che l'aggiornamento non venga
effettuato. Uno o due (a anche di pi�) me.undo servono a cancellare il
contenuto del controllo o dell'intera maschera. Giocando opportunamente con
queste propriet� tu puoi scatenare qualsiasi cosa, anche meglio che
simulando il tasto ESC.
Ciao
Antonio
"Alla faccia della sintesi"Complimenti per la spiegazione.Scherzi a
parte grazie per la risposta.Adesso non posso provare
Doamni provo e poi ti lascio il post di conferma omeno.
Grazie ancora Dino
Ciao Antonio.Ho provato ad impostare il tutto ma mi da una
problematica.Nel beforeupdate de form sono andato ad inserire per
prova alcuni campi con Undo.Il problema e' che non mi permette di
inserire il record.
Nell'eliminare tale impostazione funziona tutto.Sara' la neve che ho
spalato ma non mi funziona.
Grazie ancora Dino