Newsgroup: it.comp.appl.access
Titolo: [CODICE] - Mi spiegate un attimo che fa questo codice?

Il codice è questo:
Private Sub Form_Current()
If DCount("*", "tblUtenti") > 0 Then
--->Me!NumeroIntervento = Nz(DMax("NumeroIntervento", "tblInterventi",
"idUtente = " & Forms!frmSchedaPrimoContatto!i­d))
    Me!NumeroIntervento.Requery
End If
End Sub
praticamente,  se ho ben capito, fa questo:
1. SE nella tabella tblUtenti c'è almeno un record ALLORA
2. assegna al controllo NumeroIntervento il valore massimo che è
associato all'utente che in quel momento ha quel particolare id
3. quindi AGGIORNA l'elenco del controllo NumeroIntervento.
Giusto? Però questo codice soffre di un bug che se io torno su un
record cancellato (codice postato questa mattina) mi da errore di
runtime.
Come devo modificarlo?  NON CI RIESCOOOOOOOO :(
Grazie :) e buona giornata!!!!

 ha scritto nel messaggio
news:1117641504.4...@g49g2000cwa.googlegroups.com...
Il codice è questo:
Private Sub Form_Current()
If DCount("*", "tblUtenti") > 0 Then
--->Me!NumeroIntervento = Nz(DMax("NumeroIntervento", "tblInterventi",
"idUtente = " & Forms!frmSchedaPrimoContatto!i­d))
    Me!NumeroIntervento.Requery
End If
End Sub
'------------------------- RISPOSTA ---------------------------
Prima di capire cosa fà il codice serve capire su che evento viene
eseguito o a fronte di che cosa....!
Questo condiziona ovviamente le considerazioni iniziali.
praticamente,  se ho ben capito, fa questo:
1. SE nella tabella tblUtenti c'è almeno un record ALLORA
'------------------------- RISPOSTA ---------------------------
Esatto.
2. assegna al controllo NumeroIntervento il valore massimo che è
associato all'utente che in quel momento ha quel particolare id
'------------------------- RISPOSTA ---------------------------
Esatto.
3. quindi AGGIORNA l'elenco del controllo NumeroIntervento.
'------------------------- RISPOSTA ---------------------------
Esatto, anche se mi pare strano assegnare all'ID un NumeroIntervento
già esistente....!!!
Giusto? Però questo codice soffre di un bug che se io torno su un
record cancellato (codice postato questa mattina) mi da errore di
runtime.
'------------------------- RISPOSTA ---------------------------
Scusa ma quì soffri di qualche errore applicativo, se il Record è cancellato
come fai a tornarci sopra....?
L'errore è quì sicuramente.
Come devo modificarlo?  NON CI RIESCOOOOOOOO :(
'------------------------- RISPOSTA ---------------------------
Secondo me non hai ben chiaro nemmeno tu quello che devi fare.
Spiega cosa dovrebbe fare sta roba.
Se devi assegnare in automatico un NumeroIntervento al Cliente
questo è il modo sbagliato di fare.
Solitamente si opera su EVENTO CURRENT oppure meglio ancora
si assegna al Controllo NumeroIntervento un DefaultValue che
esegue in automatico la generazione del Codice.
Grazie :) e buona giornata!!!!
Saluti
@Alex
-- 
@Alex (Alessandro Baraldi)
---------------------------------------------------------------------------
http://www.sitocomune.com/
http://www.mantuanet.it/alessandro.baraldi/
---------------------------------------------------------------------------

Ciao Ale, allora ecco quello che succede.
Io ho frmSchedaPrimoContatto che contiene la sottomaschera
subSchedaPrimoContatto:
frmSchedaPrimoContatto
|-------->subSchedaPrimoContatto
la frmSchedaPrimoContatto ha il controllo nascosto 'id', mentre la
subSchedaPrimoContatto ha i pulsanti 'Aggiungi Intervento' ed 'Elimina
Record Corrente'.
Il problema è questo:
1. sto visualizzando un record nella subSchedaPrimoContatto e clicco
sul pulsante 'Aggiungi intervento'; codice:
Private Sub cmdAggiungiIntervento_Click()
Dim progr As Variant
Dim rif As Variant
Dim data As Variant
Dim rec As Recordset
rif = [Forms]![frmSchedaPrimoContatto]![id]
If IsNull(rif) Then
    MsgBox "Nessun Utente selezionato!", vbCritical
    Exit Sub
End If
progr = DMax("NumeroIntervento", "tblInterventi", "idUtente = " & rif)
If IsNull(progr) Then
    progr = 1
  Else
    progr = progr + 1
End If
insdata:
data = InputBox("Indicare la data dell'intervento:", "Inserimento Nuovo
Intervento", Date)
If Not IsDate(data) Then
    If MsgBox("Vuoi annullare l'inserimento?", vbOKCancel,
"ATTENZIONE") = vbOK Then
        Exit Sub
    Else
        MsgBox "Inserire una data valida!", vbExclamation
        GoTo insdata
    End If
End If
Set rec = CurrentDb.OpenRecordset("tblInterventi")
    rec.AddNew
    rec!idUtente = rif
    rec!NumeroIntervento = progr
    rec!DataIntervento = data
    rec.Update
rec.Close
MsgBox "Inserito nuovo intervento N. " & progr, vbInformation
Me!NumeroIntervento.Requery
Me!NumeroIntervento = progr
End Sub
quindi ora nel controllo associato 'NumeroIntervento' vedo due colonne:
1 - data_intervento
2. adesso io elimino questo record con il codice qui di seguito:
Private Sub cmdElimina_Click()
Dim rif As Variant
Dim ultimo_id As Variant
Dim res As Variant
rif = [Forms]![frmSchedaPrimoContatto]![id]
ultimo_id = DMax("idUtente", "tblUtenti")
If IsNull(rif) Then
    MsgBox "Nessun Utente selezionato!", vbCritical
    Exit Sub
  Else
    res = MsgBox("Elimino dall'archivio " &
UCase([Forms]![frmSchedaPrimoContatto]![Nome] & " " &
[Forms]![frmSchedaPrimoContatto]![Cognome]) & "?", vbQuestion +
vbYesNo)
    If res = 7 Then Exit Sub
End If
DoCmd.SetWarnings False
DoCmd.RunSQL "DELETE * FROM tblInterventi WHERE idUtente = " & rif
DoCmd.RunSQL "DELETE * FROM tblUtenti WHERE idUtente = " & rif
MsgBox "Utente eliminato.", vbInformation
If DCount("*", "tblUtenti") > 0 Then
    If rif = ultimo_id Then
        DoCmd.GoToRecord acDataForm, "frmSchedaPrimoContatto",
acPrevious
    Else
        DoCmd.GoToRecord acDataForm, "frmSchedaPrimoContatto", acNext
    End If
Else
    MsgBox "Non ci sono più utenti nel database - Clicca su OK per
aprire la maschera Aggiungi Utente", vbCritical, "ATTENZIONE - DATABASE
VUOTO"
    DoCmd.Close acForm, "frmSchedaPrimoContatto"
    DoCmd.OpenForm "frmAggiungiUtente"
End If
End Sub
questo codice però lascia un buco, nel senso che io sono posizionato
sul record subito dopo (o subito prima) di questo appena cancellato, ma
non essendoci stato un refresh se torno indietro (o vado avanti) con i
selettori presenti nella frmSchedaPrimoContatto io eseguo il seguente
codice presente nell'evento Current() della sottomaschera
subSchedaPrimoContatto:
Private Sub Form_Current()
If DCount("*", "tblUtenti") > 0 Then
------>>Me!NumeroIntervento = Nz(DMax("NumeroIntervento",
"tblInterventi", "idUtente = " & Forms!frmSchedaPrimoContatto!id))
    Me!NumeroIntervento.Requery
End If
Nome.SetFocus
End Sub
ed è proprio in questo momento che ho l'errore di runtime che punta
dove ho messo la freccia. Ed è ovvio visto che a quanto pare questa
riga ha bisogno di un id che però in quel momento - essendo stato il
record cancellato - è NULL.
Come posso risolvere?? :(
Grazie Ale e buona serata!!!!!