Newsgroup: it.comp.appl.access
Titolo: [PER IL NG] - Casella combinata per registrare interventi: soluzione

Ringrazio tantissimo Alessandro per l'interessamento.
Posto qui sotto il codice che mi ha scritto il mio amico di Milano
(GRAZIE WALTER!!!!! IL 18 TI OFFRO UNA CENA!!!!!)
PROBLEMA:
per ogni utente inserito nel tuo database devi associare un numero che
rappresenti la volta che tale utente è entrato in contatto con te, e
la data del contatto.
Ad.es.
N. Intervento - Data
1               01/01/2005
2               02/01/2005
e tale cronologia deve essere ovviamente diversa per ogni utente.
SOLUZIONE:
Hai una tabella tblUtenti così strutturata:
idUtente - contatore - chiave primaria
Nome - testo
Cognome - testo
...
NumeroIntervento - testo
Crea un tabella tblInterventi così strutturata:
idUtente - numerico
NumeroIntervento - numerico
DataIntervento - Data/Ora
Sulla maschera dove vuoi che sia visibile l'intervento e la data
associata creai segg. controlli:
1. casella di riepilogo così strutturata:
Formato
colonne = 2
larghezza colonne: 1 cm;2,501 cm
righe in elenco: 4
larghezza elenco: 4 cm
Dati:
origine controllo: vuoto
tipo origine/riga: tabella/query
origine riga: SELECT tblInterventi.NumeroIntervento,
tblInterventi.DataIntervento FROM tblUtenti INNER JOIN tblInterventi ON
tblUtenti.idUtente=tblInterventi.idUtente WHERE
(((tblUtenti.idUtente)=forms!frmSchedaPrimoContatto!id)) ORDER BY
tblInterventi.NumeroIntervento DESC;
colonna associata: 1
solo in elenco: no
espansione automatica: si
valore predefinito: =DMax("NumeroIntervento";"tblInterventi";"idUtente
= " & [Maschere]![frmSchedaPrimoContatto]![id])
2. un pulsante di comando. Sull'evento Click() di tale pulsante
inserisci il codice seguente:
Private Sub Comando154_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
    MsgBox "Si desidera annullare?", vbYesNo, Attenzione
    If vbYes = True 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
NOTA: le ultime tre righe servono per far si che ogni utente abbia la
propria cronologia degli interventi, altrimenti è un casino, nel senso
che mi ritrovo che TUTTI gli utenti hanno lo stesso numero di
interventi con date diverse. Un bordello.
Spero questo codice possa essere di aiuto a qualcuno.
Buona giornata.

AGGIUNTA
Sull'evento 'Su corrente' della sottomaschera dove sta il controllo va
inserito il seg. codice:
Me!NumeroIntervento = DMax("NumeroIntervento", "tblInterventi",
"idUtente = " & Forms!frmSchedaPrimoContatto!id)
Me!NumeroIntervento.Requery
sennò si ha appunto quel problema che ho scritto alla fine del post
precedente.
Scusate la dimenticanza.

EDIT: nel post precedente c'era pure un pezzo di codice mio, per
gestire il pulsante Annulla, ma che non funziona.
Quindi ora rifaccio il post riveduto e corretto :)
PROBLEMA:



SOLUZIONE:






Formato

Dati:

origine riga: SELECT tblInterventi.NumeroIntervento­,
tblInterventi.DataIntervento FROM tblUtenti INNER JOIN tblInterventi ON
tblUtenti.idUtente=tblInterven­ti.idUtente WHERE
(((tblUtenti.idUtente)=forms!f­rmSchedaPrimoContatto!id)) ORDER BY
tblInterventi.NumeroIntervento DESC;
colonna associata: 1
solo in elenco: no
espansione automatica: si
valore predefinito:
=DMax("NumeroIntervento";"tblI­nterventi";"idUtente
= " & [Maschere]![frmSchedaPrimoCont­atto]![id])
2. un pulsante di comando. Sull'evento Click() di tale pulsante
inserisci il codice seguente:
Private Sub Comando154_Click()
Dim progr As Variant
Dim rif As Variant
Dim data As Variant
Dim rec As Recordset
rif = [Forms]![frmSchedaPrimoContatt­o]![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
        MsgBox "Inserire una data valida!", vbExclamation
    GoTo insdata
    End If
End If
Set rec = CurrentDb.OpenRecordset("tblIn­terventi")
    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
Sull'evento 'Su corrente' della sottomaschera dove sta il controllo va
inserito il seg. codice:
Me!NumeroIntervento = DMax("NumeroIntervento", "tblInterventi",
"idUtente = " & Forms!frmSchedaPrimoContatto!i­d)
Me!NumeroIntervento.Requery
BUG: se non esistono utenti il codice 'Su corrente' genera un errore di
runtime. Come risolvo?
Grazie.

Scusate, c'è stato un problema di copia incolla.
REPOST.
Ringrazio tantissimo Alessandro per l'interessamento.
Posto qui sotto il codice che mi ha scritto il mio amico di Milano
(GRAZIE WALTER!!!!! IL 18 TI OFFRO UNA CENA!!!!!)
PROBLEMA:



SOLUZIONE:






Formato

Dati:





Private Sub Comando154_Click()







Me!NumeroIntervento.Requery
Me!NumeroIntervento = progr
End Sub


Me!NumeroIntervento.Requery
BUG:  se non esistono utenti in tblUtenti il codice 'Su corrente'
