Newsgroup: it.comp.appl.access
Titolo: Problrma con riferimento ad oggetto che non ha stato attivo

Il seg. codice, che serve a chiedere all'utente se vuole annullare il
processo di inserimento dati nel caso clicchi su ESCI senza aver messo
neanche un dato, mi da un problema perchè mi viene detto che non può
essere fatto riferimento ad una proprietà o ad un metodo per un
controllo a meno che non abbia lo stato attivo:
Private Sub cmdEsci_Click()
On Error GoTo Err_cmdEsci_Click
Dim dbGenzano As DAO.Database
Dim rsUtenti As DAO.Recordset
Dim stDocName As String
Dim stLinkCriteria As String
If (Nome.Text = "") And (Cognome.Text = "") Then
    If MsgBox("Annullare l'inserimento del nuovo utente?", vbQuestion +
vbYesNo, ATTENZIONE) = vbYes Then
        Exit Sub
    Else
        If DCount("*", "tblUtenti") > 0 Then
            Set dbGenzano = CurrentDb
            Set rsUtenti = dbGenzano.OpenRecordset("tblUtenti")
            Me.Requery
            dbGenzano.Close
            stDocName = "frmSchedaPrimoContatto"
            DoCmd.OpenForm stDocName, , , stLinkCriteria
            Forms!frmSchedaPrimoContatto.SetFocus
            Forms!frmSchedaPrimoContatto.Requery
            DoCmd.Close acForm, "frmAggiungiUtente"
        Else
            If MsgBox("Nessun contatto presente nel database." &
Chr(13) & Chr(10) & "Cliccare su OK per mantenere aperta la finestra
corrente ed inserire un nuovo contatto" & Chr(13) & Chr(10) & "oppure
su ANNULLA per annullare e tornare al Pannello Comandi", vbOKCancel,
"ATTENZIONE - DATABASE VUOTO") = vbOK Then
                Exit Sub
            Else
                DoCmd.OpenForm "frmPannelloComandi"
                DoCmd.Close acForm, "frmAggiungiUtente"
            End If
        End If
    End If
Else
Exit Sub
End If
Exit_cmdEsci_Click:
    Exit Sub
Err_cmdEsci_Click:
    MsgBox Err.Description
    Resume Exit_cmdEsci_Click
End Sub
ho provato a scrivere dopo la dichiarazione delle variabili
Nome.SetFocus
Cognome.SetFocus
ma da lo stesso errore.
Dove sbaglio?
Grazie.

 ha scritto nel messaggio 
news:1117469451.6...@g44g2000cwa.googlegroups.com...






            stDocName = "frmSchedaPrimoContatto"

Exit_cmdEsci_Click:
    Exit Sub

End Sub

Nome.SetFocus
Cognome.SetFocus

Grazie.
NomeFom.NomeControllo.SetFocus 

Ciao Gaspare senti ma due controlli possono avere contemporaneamente il
focus?
No perchè io ho bisogno di fare un controllo sia sul nome sia sul
cognome e a questo punto tutti e due devono avere il focus!
Grazie :)

 ha scritto nel messaggio 
news:1117479956.4...@z14g2000cwz.googlegroups.com...

Non mi sono mai posto il problema: perchè non provi direttamente? 

Sto in un internet  point ora vado su casa :)
Ma se non dovesse essere possibile che altra soluzione avrei?
Grazie :P


La troveremo...non preoccuparti ;-) 

 If (Nome.Text = "") And (Cognome.Text = "") Then
E' la proprietà Text che, come da F1, non può essere richiamata se il
controllo non ha lo stato attivo. Usa la proprietà Value, che è la
predefinita per le textbox quindi puoi anche ometterla.
  If (Nome = "") And (Cognome = "") Then
E non fare confusione tra la stringa vuota e i Null. Quel test non
funzionerebbe perchè se non scrivi niente in una casella questa
risulterà contenere un Null e non una stringa vuota.
  If isnull(Nome) And isnull(Cognome) Then
Messa così ti consente di salvare il record se inserisci anche uno
solo dei due dati, se li vuoi rendere entrambi obbligatori dovrai
cambiare l'And con un Or.
Namor

Grazie Namor, cmq per la cronaca non si possono avere due focus
contemporaneamente.
Ecco il pezzo di codice che mi è venuto fuori ieri sera:
Private Sub cmdEsci_Click()
On Error GoTo Err_cmdEsci_Click
Dim dbMIODB As DAO.Database
Dim rsUtenti As DAO.Recordset
Dim stDocName As String
Dim stLinkCriteria As String
Forms![frmAggiungiUtente]![Nome].SetFocus
If Not (Nome.Text = "") Then
    GoTo insCognome
Else
    If MsgBox("Annullare l'inserimento del nuovo utente?", vbQuestion +
vbYesNo, "ATTENZIONE") = vbNo Then
       GoTo Exit_cmdEsci_Click
    End If
End If
insCognome:
Forms![frmAggiungiUtente]![Cognome].SetFocus
If (Cognome.Text = "") Then
    MsgBox "Inserire un valore valido per il campo 'Cognome'",
vbExclamation + vbOKOnly, "ATTENZIONE"
End If
            If DCount("*", "tblUtenti") > 0 Then
                Set dbMIODB = CurrentDb
                Set rsUtenti = dbMIODB.OpenRecordset("tblUtenti")
                Me.Requery
                dbMIODB.Close
                stDocName = "frmSchedaPrimoContatto"
                DoCmd.OpenForm stDocName, , , stLinkCriteria
                Forms!frmSchedaPrimoContatto.SetFocus
                Forms!frmSchedaPrimoContatto.Requery
                DoCmd.Close acForm, "frmAggiungiUtente"
            Else
                If MsgBox("Nessun contatto presente nel database." &
Chr(13) & Chr(10) & "Cliccare su OK per mantenere aperta la finestra
corrente ed inserire un nuovo contatto" & Chr(13) & Chr(10) & "oppure
su ANNULLA per tornare al Pannello Comandi", vbOKCancel, "ATTENZIONE -
DATABASE VUOTO") = vbOK Then
                    Exit Sub
                Else
                    DoCmd.OpenForm "frmPannelloComandi"
                    DoCmd.Close acForm, "frmAggiungiUtente"
                End If
            End If
Exit_cmdEsci_Click:
    Exit Sub
Err_cmdEsci_Click:
    MsgBox Err.Description
    Resume Exit_cmdEsci_Click
End Sub
però c'era un problema. Prima non riuscivo ad uscire dalla sub, e l'ho
ricambiato. Poi venivo risbattutto di continuo a insCognome: e non
uscivo più. Poi altri problemi del tipo: che se cliccavo su Esci senza
aver messo ne l'uno ne l'altro mi chiedeva di mettere il cognome
(quindi tornava a insCognome:) POI usciva e via dicendo.
Il codice che vi posto è l'ultima versione e soffre del problema che
appunto insCognome: viene cmq eseguita. E non capisco il perchè!!!!

 appunto insCognome: viene cmq eseguita. E non capisco il perchè!!!!
Forse non hai letto o non hai capito il mio avviso sulla differenza tra le
stringhe vuote ("") e i valori Null. E forse nemmeno quello sulla
differenza tra la proprietà .Text e la .Value.
Namor
-- 
namor at inwind punto it
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 End Sub


Rivedendo questo codice la curiosità mi spinge a chiedermi che te ne fai
di dbMIODB e rsUtenti visto che non li usi, e perchè fai il Close del
CurrentDb.
Mi pare che lo scopo finale sia testare la presenza di un valore in una o
entrambe delle textbox, mostrare un avviso ed aprire/chiudere altre form.
Se accetti un consiglio, non cercare di aggiustare questa routine.
Cancella tutto e riscrivila da zero. Verrà sicuramente meglio.
Evita i GoTo, usali SOLO negli On Error, se usi bene gli If puoi farne a
meno.


 non ne ho ancora  visto uno che abbia due cursori



Scusa per il precedente.
Ti volevo dire che mi è piaciuta "davvero" (sinceramente) la tua 
risposta/battuta!
Mi hai fatto "sorridere" sulla "c..." che avevo sparato a Giulio! :-)
Buona giornata
Gaspare 

Per Namor: hai ragione. Cmq in relazione alla differenza tra stringhe
vuote e valore Null non intendevo dire che avevo implementato il tuo
suggerimento ma che il problema era riferito ancora a quel codice. Cmq
ora vado su casa, rifaccio tuttop da zero poi ti faccio sapere!!!
Grazie mille!!!!!
Per Gaspare: sei un grande :)) perchè ora che ci penso mi pare ovvia
la cosa.... ehehehee

la cosa.... ehehehee
Ogni tanto ne sparo di "c..." anche le piů banali...magari sono "cotto" o 
"non sň una risposta" e la sparo lě...provare per credere! :-)
Perň effettivamente "graziosa" la battuta!
Per il codice secondo me ha davvero ragione Namor...lo scrivi in maniera 
"snellita" e "occhio" sempre a mettere qualche riga di commento ;-)
Buona serata
Gaspare 

Scusa, ora che  ci penso il controllo deve essere duplice ovvero:
SE il campo (Nome) è NULL O il campo Cognome è (NULL) ALLORA
     scrivi un messaggio = "Annullare processo di inserimento dati?"
     SE la RISPOSTA è SI ALLORA
              Esci dalla Sub
     ALTRIMENTI
     'qui ci va un nuovo controllo
              SE il campo (Nome) è NULLO allora
                       messaggio = "Inserisci il Nome dell'utente"
              ALTRIMENTI SE il campo (Cognome) è NULLO allora
                      messaggio = "Inserisci il Cognome dell'utente"
              FINE SE
      FINE SE
FINE SE
Ti torna come flusso logico? In pratica vorrei che, nel caso tutti e
due i campi fossero vuoti, all'utente venga chiesto se vuole uscire o
continuare ad inserire i dati. Nel caso voglia continuare, se uno dei
due campi è vuoto deve apparire un messaggio di avviso. Nel secondo
caso il focus deve stare nel campo vuoto.
Ti vengono in mente altri controlli?
Grazie :) sei stato muy gentil!!!!!

[CUT]
SE il campo (Nome) è NULL O il campo Cognome è (NULL) ALLORA
     scrivi un messaggio = "Annullare processo di inserimento dati?"
     SE la RISPOSTA è SI ALLORA
              Esci dalla Sub
     ALTRIMENTI
     'qui ci va un nuovo controllo
              SE il campo (Nome) è NULLO allora
                       messaggio = "Inserisci il Nome dell'utente"
              ALTRIMENTI SE il campo (Cognome) è NULLO allora
                      messaggio = "Inserisci il Cognome dell'utente"
              FINE SE
      FINE SE
FINE SE
-------
Penso che ad "occhio" ci siamo...vedi i consigli che ti danno gli 
altri...anche cosa ne pensa Namor con il quale avevi continuato questo 
discorso :-) 

[CUT]
Considera cmq che sono già "fuso" quindi onde spararne 1 altra ti consiglio 
vivamente di chiedere al NG...
Buona serata
Gaspare

Ciao, ho riscritto il codice ma ha un bug: mi fa sempre uscire dalla
maschera anche se specifico che voglio ancora inserire un utente:
------------------- INIZIO CODICE ------------------------
Private Sub cmdEsci_Click()
On Error GoTo Err_cmdEsci_Click
Dim dbMIODB As DAO.Database
Dim rsUtenti As DAO.Recordset
Dim stDocName As String
Dim stLinkCriteria As String
If IsNull(Nome) Or IsNull(Cognome) Then
    If MsgBox("Annullare l'inserimento del nuovo utente?", vbQuestion +
vbYesNo, "ATTENZIONE") = vbYes Then
        Exit Sub
    Else
        If IsNull(Nome) Then
            MsgBox "Inserisci un nome valido", vbExclamation,
"ATTENZIONE"
            Forms![frmAggiungiUtente]![Nome].SetFocus
        ElseIf IsNull(Cognome) Then
            MsgBox "Inserisci un Cognome valido", vbExclamation,
"ATTENZIONE"
            Forms![frmAggiungiUtente]![Cognome].SetFocus
        End If
    End If
End If
If DCount("*", "tblUtenti") > 0 Then
    Set dbMIODB = CurrentDb
    Set rsUtenti = dbMIODB.OpenRecordset("tblUtenti")
    Me.Requery
    dbMIODB.Close
    stDocName = "frmSchedaPrimoContatto"
    DoCmd.OpenForm stDocName, , , stLinkCriteria
    Forms!frmSchedaPrimoContatto.SetFocus
    Forms!frmSchedaPrimoContatto.Requery
    DoCmd.Close acForm, "frmAggiungiUtente"
Else
    If MsgBox("Nessun contatto presente nel database." & Chr(13) &
Chr(10) & "Cliccare su OK per mantenere aperta la finestra corrente ed
inserire un nuovo contatto" & Chr(13) & Chr(10) & "oppure su ANNULLA
per annullare e tornare al Pannello Comandi", vbOKCancel, "ATTENZIONE -
DATABASE VUOTO") = vbOK Then
        Exit Sub
    Else
        DoCmd.OpenForm "frmPannelloComandi"
        DoCmd.Close acForm, "frmAggiungiUtente"
    End If
End If
Exit_cmdEsci_Click:
    Exit Sub
Err_cmdEsci_Click:
    MsgBox Err.Description
    Resume Exit_cmdEsci_Click
End Sub
--------------------------- FINE CODICE ---------------------------
In pratica viene sempre eseguito il codice a partire da If Dcount
ecc...ecc.... ma io voglio che questo codice venga eseguito solo se
Nome e Cognome NON sono NULLI. Ma poi mi incasino con gli If e finisce
che non esco più dalla maschera.
Pensavo di mettere il codice che inizia da If DCount nell'evento In
Chiusura della maschera.... o di mettere una variabile booleana qui:
If IsNull(Nome) Then
            MsgBox "Inserisci un nome valido", vbExclamation,
"ATTENZIONE"
            Forms![frmAggiungiUtente]![Nome].SetFocus
            VUOTO = true
        ElseIf IsNull(Cognome) Then
            MsgBox "Inserisci un Cognome valido", vbExclamation,
"ATTENZIONE"
            Forms![frmAggiungiUtente]![Cognome].SetFocus
            VUOTO = true
       Else
            VUOTO = false
        End If
e quindi scrivere
If VUOTO = false then
      If Dcount...
ecc...ecc...
Che devo fare? Come fareste voi al posto mio?
Grazie :(

Scusate ma Google come al solito mi ha troncato il copia-e-incolla. E'
un bug che devono sistemare al più presto. E' ridicolo tutto ciò.
Cmq il codice completo che volevo postare era:


[CUT]
Ciao Giulio, non "connetto più"...sono "fuso di brutto"...non prendertela 
:-) chiedi a Namor o crea un nuovo post cosicchè possano risponderti gli 
altri altrimenti magari rimani in "loop" tutta la sera ;-)
Buona continuazione...