Newsgroup: it.comp.appl.access
Titolo: [REPOST] - casella combinata per gestire numero e date

[COPIO E INCOLLO DA UN FILE DI TESTO - IL MESSAGGIO POTREBBE ESSERE
TRONCATO E NON HO IDEA DEL PERCHE'. VA A CAGARE GOOGLE!]
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=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 in tblUtenti il codice 'Su corrente'
genera un errore di runtime.

genera un errore di runtime.
Ciao,
prova cosě -> nella sezione generale dichiari una variabile
Option Compare Database
Dim i As Integer
'su corrente controlli che DMax ti restiusce un valore diverso da 0
If  DMax("NumeroIntervento", "tblInterventi",
"idUtente = " & Forms!frmSchedaPrimoContatto!i­d) <> 0 then
Me!NumeroIntervento = DMax("NumeroIntervento", "tblInterventi",
"idUtente = " & Forms!frmSchedaPrimoContatto!i­d)
Me!NumeroIntervento.Requery
else
Msgbox "Devi inserire gli utenti nella tabella anagrafica"
i=0
End if
' A fronte dell'evento Load scrivi
Private Sub Form_Load()
If i = 0 Then
 DoCmd.Close
End If
End Sub
-------------
Se il bug č solo quello penso che dovrebbe andare...
Notte
Gaspare 

 ha scritto nel messaggio 
news:IINle.952737$b5.41...@news3.tin.it...

Scusa...come non detto: l'evento Load si verifica prima di Current... 

genera un errore di runtime.
Ciao,
ri-prova così -> nella sezione generale dichiari una variabile
Option Compare Database
Dim i As Integer
'su corrente controlli che DMax ti restiusce un valore diverso da 0
If  DMax("NumeroIntervento", "tblInterventi",
"idUtente = " & Forms!frmSchedaPrimoContatto!i­d) <> 0 then
Me!NumeroIntervento = DMax("NumeroIntervento", "tblInterventi",
"idUtente = " & Forms!frmSchedaPrimoContatto!i­d)
Me!NumeroIntervento.Requery
i = 1
else
Msgbox "Devi inserire gli utenti nella tabella anagrafica"
i=0
End if
' A fronte dell'evento MouseMove scrivi
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, 
Y As Single)
If i = 0 Then
 DoCmd.Close
End If
End Sub
-------------
Considera che è un'espediente...si può fare di gran lunga di 
meglio...arriveranno di certo altri suggerimenti :-)
Notte
Gaspare

DataIntervento - Data/Ora
Ciao Giulio,
qui noto una ridondanza perchè il campo NumeroIntervento  è presente nelle 2 
tabelle e con formati diversi...
Sei sicuro che il bug è solo quello che  se non esistono utenti in tblUtenti 
il codice 'Su corrente' genera un errore di runtime?
Lo hai testato bene?
qui per ipotesi ti blocca pure se clicchi su annulla...non ti dà la 
possibilità di interrompere l'inserimento...a parte una "end if" che non sò 
quale if vada a chiudere (spero che  a te posso dirlo dell'end if 
:-)...sperando che anche questa volta non mi sbagli...)
-------------------
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
--------------
ti consiglio di testarlo bene ;-)
Gaspare

Ciao Gaspare, oggi non sono stato a casa sono stato al mare perciò non
ho potuto verificare.
Il mio amico mi ha mandato un codice che controlla la presenza di
almeno un utente. Va, poi però proverò anche il tuo codice :)
Ad ogni modo ho messo una routine nell'evento Load() della form che
controlla se c'è almeno un utente. Se non c'è faccio comparire una
msgbox di avviso poi dopo l'ok li rimando alla maschera Aggiungi
Utente. Ma sono indeciso. Posso anche fargli aprire semplicemente la
form Scheda Primo Contatto senza daegli la possibilità di aggijngere
utenti. Ma poi mi sa che spariscono tutti i controlli.
Come posso fare?
Grazie mille :)

P.S. Scusa mi ero dimenticato dell'end if.
Quell' end if andava a chiudere un If che avevo scritto ma che poi ho
cancellato perchè non serviva a niente. Mi sono dimenticato di
toglierlo prima di fare copia e incolla :)

Grazie mille :)
Ciao,
come ritieni sia il caso migliore x te...non posso sapere  cosa x te è più 
comodo o meno...ho solo capito che ogni utente deve avere una sua cronologia 
ed in tal senso ti ho suggerito di provarlo...
Buona Domenica
Gaspare