Newsgroup: it.comp.appl.access
Titolo: Dopo Aggiornamento

Ciao , 
 
Ho questa Routine " DopoAggiornamento "  che mi trova il record  corrispondente 
ma non riesco a  fare in modo che 
se il record non viene trovato  mi dia un messaggio e  rimetta il focus  su   TXTOrdineEbay 
 
mi date una mano ? 
 
 
 
Private Sub TXTOrdineEbay_AfterUpdate()
 
    ' Trova il record corrispondente al controllo
    Dim rs As Object
 
    Set rs = Me.Recordset.Clone
        rs.FindFirst "[NordineEbay] = '" & Me![TXTOrdineEbay] & "'"
            Me.Bookmark = rs.Bookmark
 
 
 If Not IsNull(Me.NDocumentoSpedizione & vbNullString) Then
 
                Select Case Left(Me.NDocumentoSpedizione, 2)
 
                        Case "CB"
                                Me.NDocumentoSpedizione.SetFocus
 
                        Case "EB"
                                 Me.NDocumentoSpedizione.SetFocus
 
                        Case "RA"
                                 Me.PesoLordoRAC.SetFocus
 
                        Case "RC"
                                 Me.PesoLordoRAC.SetFocus
 
                        Case "VD"
                                 Me.PesoLordoRAC.SetFocus
 
                        Case Else
                                 Me.PesoLordo.SetFocus
 
 
                        End Select
 
End If
 
End Sub
 
 
Saluti  Giuseppe

Manca un pezzo ed io eviterei il Clone del Recordset dal momemnto che esiste l'oggetto apposta... RecordSetclone...
 
Private Sub TXTOrdineEbay_AfterUpdate()
 
	With Me.RecordsetClone
		.FindFirst "[NordineEbay] = '" & Me![TXTOrdineEbay] & "'"
		If .NoMatch Then
			Msgbox "NON TROVATO"
		Else
			MsgBox "TROVATO"
            Me.Bookmark = .Bookmark
		End If
	End With
 
	If Not IsNull(Me.NDocumentoSpedizione & vbNullString) Then
 
		Select Case Left(Me.NDocumentoSpedizione, 2)
			Case "CB":	Me.NDocumentoSpedizione.SetFocus
			Case "EB":	Me.NDocumentoSpedizione.SetFocus      
			Case "RA":	Me.PesoLordoRAC.SetFocus
			Case "RC":	Me.PesoLordoRAC.SetFocus 
			Case "VD":	Me.PesoLordoRAC.SetFocus
			Case Else:      Me.PesoLordo.SetFocus                           
		End Select
 
	End If
 
End Sub 
 
@Alex

Grazie Alex 
 
il messaggio TROVATO  non mi serve , ho modificato così  e funziona 
 
Dim rs As Object
 
    Set rs = Me.RecordsetClone
        rs.FindFirst "[NordineEbay] = '" & Me![TXTOrdineEbay] & "'"
            Me.Bookmark = rs.Bookmark
 
            If rs.NoMatch Then
 
                        MsgBox " Numero Ordine Inesistente "
 
                     End If
 
Solo vorrei  che dopo il messaggio il focus torni sul controllo 
TXTOrdineEbay per inserire il numero giusto , 
mentre invece l'istruzione prosegue   
 
Come dovrei fare 
 
Giuseppe        


Poi non dire che sono io indisponente... 
 
Ti ho inserito il codice pulito e tu lo hai risporcato con cose intutili...
Hai messo l'uguagliamento del BOOMARK dove NON VA senza nemmenno chiederti perchè io l'ho messo dopo...!
Se non trova il Record l'uguagliazione del BOOKMARK secondo te funziona o restituisce ERORRE che nemmeno hai gestito...? 
 
Quindi io che sono preciso, e la programmazione richiede precisione, quando vedo queste cose ... mi incazzo...
 
IL CODICE GIUSTO E' QUESTO, se ho capito bene:
 
Private Sub TXTOrdineEbay_AfterUpdate()
 
	With Me.RecordsetClone
		.FindFirst "[NordineEbay] = '" & Me![TXTOrdineEbay] & "'"
		If .NoMatch Then
			MsgBox " Numero Ordine Inesistente "
                        Me.TXTOrdineEbay.SetFocus
                        Exit Sub
		Else
                        Me.Bookmark = .Bookmark
		End If
	End With
 
	If Not IsNull(Me.NDocumentoSpedizione & vbNullString) Then
 
		Select Case Left(Me.NDocumentoSpedizione, 2)
			Case "CB":	Me.NDocumentoSpedizione.SetFocus
			Case "EB":	Me.NDocumentoSpedizione.SetFocus      
			Case "RA":	Me.PesoLordoRAC.SetFocus
			Case "RC":	Me.PesoLordoRAC.SetFocus 
			Case "VD":	Me.PesoLordoRAC.SetFocus
			Case Else:      Me.PesoLordo.SetFocus                           
		End Select
 
	End If
End Sub
 
 
Ora vedi tu...
 
@Alex

on 21-02-19, 
amrri...@hotmail.com
 supposed :

====================================
Private Sub Command3_Click()
 
RecordsetClone.FindFirst "[NordineEbay] = '" & [TextOrdineEbay] & "'"
If RecordsetClone.NoMatch Then
    MsgBox "Numero Ordine Inesistente"
    [TextOrdineEbay].SetFocus
Else
    Bookmark = RecordsetClone.Bookmark
End If
 
End Sub
====================================
 
Bruno

Bruno.... mah...
 
@Alex

 @Alex
 
Sì, ma qual è il vantaggio?
 
Bruno

Imparare.
 
@Alex


Ma no!
Il vantaggio, seppur limitato e poco significativo nel
contesto in esame, è che ti risparmi il Refresh
dell'oggetto, laddove fosse necessario.
 
Bruno

 @Alex
 
Non credo di aver mai detto che sei indisponente,
se l'ho detto chiedo scusa ,
Ho modificato le istruzioni solo per provare senza chiedermi perchè e per come , poi avrei cercato di capire la modifica .
 
ora ho rimesso il tuo codice 
With Me.RecordsetClone
 		.FindFirst "[NordineEbay] = '" & Me![TXTOrdineEbay] & "'"
 		If .NoMatch Then
 			MsgBox " Numero Ordine Inesistente "
                         Me.TXTOrdineEbay.SetFocus
                         Exit Sub
 		Else
                         Me.Bookmark = .Bookmark
 		End If
 	End With
 
e funziona solo che non riesco a far tornare il focus sulla casella combinata TXTOrdineEbay , ho controllato l'ordine tabulazione ed è ok , può essere perchè viene cercato sulla casella testo [NordineEbay]  con Abilitato a NO  ?
 
e non ti incazzare con me, non vale la pena.
 
Ciao  Giuseppe

Premesso che mi infastidisco perché non ti ritengo uno stupido, ed al semplice fornire pappa pronta preferisco un commento brusco ma con le spiegazioni... poi posso sbagliare...
 
Di fatto non capisco operativamente quando e dove deve tornare il focus...
 
@Alex


Senti Alex ma che cazzo dici ? 
Io non ho chiesto nessuna pappa pronta , poi questo termine pappa pronta può essere usato con uno che è esperto in programmazione e lo fa per professione o studia per farlo . 
A me non interessa fare il programmatore , non ho ne le basi , non ho mai studiato informatica e tanto meno ne ho il tempo , mi DILETTO soltanto a fare qualche applicazione ( come cataloghi e database per le ricerche prodotti ) per la mia azienda .
Quello che ho fatto da semplice autodidatta mi soddisfa e mi funziona , cerco di perfezionarlo come posso , cercando nei manuali, nella rete e nei libri acquistati e dedicati ad access fin dal 1994 Access 1. 
 
Detto ciò qui su questo  forum ho trovato tantissime soluzione e chiesto tante volte aiuto , che mi è sempre stato dato , tu ti incazzi per 
" la pappa pronta " ma è ovvio che se io ricevo una istruzione completa 
sono più contento e mi semplifica la vita , non devo lucrare sopra quelle informazioni , perché allora avresti ragione ad incazzarti,e dovrei studiare ed impegnarmi senza aspettare che altri facciano il lavoro per me , sono molto d'accordo e avresti maggior ragione se fossimo su un forum per soli programmatori o esperti , ma qui ci sono tanti "ignoranti" come me , dei discreti interlocutori e poi ci sono quelli bravi come te .
 
Scusa per questo pippone  , ma a proposito del focus , se apro la casella riepilogo e clicco sulla prima righa che è vuota allora va tutto bene esce il messaggio e il focus torna sulla casella riepilogo , se invece  come mi accade spesso digito un numero ordine inesistente e premo invio allora il focus non torna .
 
Ciao  e buona domenica 

Sei certo di aver compreso il mio messaggio...?
Non aggiungo nulla... ti invito solo a rileggerlo... con la speranza tu possa comprenderne meglio il senso, perché forse il mio intento era l'opposto.
 
Detto ciò... la comunicazione è fatta in 2... devo aver sbagliato... a rispondere.
 
Per il resto... ora defonisci che è il controllo chiamato TXTpippone, dal prefisso era una textbox, su cui vuoi il focus in realtà pare essere una casella di riepilogo poi dici che quando digiti un ordine non esistente... dove digiti in una casella di riepilogo...? Non sarà magari una Combobox o Casella Combinata...?
 
Mi fermo.
 
Saluti
@Alex

 Sei certo di aver compreso il mio messaggio...?
 
Credo di averlo capito molto bene , comunque non ci sono problemi e spero che tu abbia compreso le mie parole, io "ignorante" in materia  chiedo, poi se qualcuno mi da delle risposte per quello che può, le sono grato . 
Chiuso.
 
A proposito della mia richiesta , ho fatto senza dubbio confusione tra  casella di testo e casella combinata e mi scuso per questo , 
mi spiego meglio , ho un controllo chiamato "TXTOrdineEbay" ma è una ComboBox( nata casella di testo cambiata in ComboBox ) dove come origine ho il numero ordine della tabella Ordini , a questo punto digito un numero ordine premo invio e mi viene restituito il record completo corrispondente al numero ordine, tutto ok . 
 
Il problema è se il numero digitato non esiste , ora con le istruzioni che mi hai dato si apre il messaggio per informarmi che il numero è errato , gli do ok però il focus non torna su  TXTOrdineEbay  per digitare un numero esatto . 
 
Il problema è solo questo . 
 
Se invece opero con il mouse , apro la ComboBox e clicco sulla prima riga che è vuota allora esci il messaggio e dopo l'ok il focus torna sulla ComboBox .
 
Solo che così facendo posso solo scegliere quello che propone la ComboBox e ovviamente la lista è molto lunga , mentre io vorrei digitare il numero ordine , la cosa è molto più rapida .
 
Se riesco a risolvere questo problema ok, altrimenti pazienza niente di compromesso 
 
Cordialmente 
Giuseppe

 Giuseppe
 
Detto ciò... hai dato proprio il massimo per fare confusione, io lo definisco proprio "PRESSAPOCHISMO"... e non ha nulla a che vedere con il fatto di non essere un professionista.
 
La gestione delle ComboBox, se tu lo avessi detto subito..., si fanno in modo diverso... 
La combo puo essere abilitata per accettare valori SOLO in elenco.
 
Questo consente di attivare ed operare su EVENTO NOTINLIST.
    Private Sub NomeCombo_NotInList(NewData As String, Response As Integer)
        ....
    End Sub
 
 
Puoi anche intercettare, al posto del NOTINLIST, l'evento FormError con codice
ERR_ITEMNOTINLIST1 = 2237
 
    Private Sub Form_Error(DataErr As Integer, Response As Integer)
        ....
    End Sub
 
Come vedrai entrambi gli eventi hanno 2 parametri e tu devi obbligatoriamente gestirli in particolare RESPONSE....! 
 
In entrambi i casi dovrai mettere Response=acDataErrContinue per evitare l'errore di sistema ed annullerai l'immissione...!
 
Me.NomeControlloComboBox.Undo
 
Facendo così il Focus rimane sulla combo e non hai bisogno di tutto quello che avevi pensato prima... 
 
Non ho altro da aggiungere.
 
@Alex

 Facendo così il Focus rimane sulla combo e non hai bisogno di tutto quello che avevi pensato prima... 
 
 
le tue spiegazioni  sono molto interessanti e fruttuose sono sicuro 
di riuscire a raggiungere lo scopo prefissato 
 
Ciao e Grazie 
Giuseppe

 
 
Perfetto eseguito funziona :
 
Private Sub TXTOrdineEbay_NotInList(NewData As String, Response As Integer)
 
    Dim intResponse As Integer
 
    MsgBox (" Numero ordine inesistente  "), vbExclamation, ("  Immettere codice esatto   ")
 
    Response = acDataErrContinue
 
    Me.TXTOrdineEbay.Undo
 
 
 
End Sub