Newsgroup: it.comp.appl.access
Titolo: Controllo per  non duplicare record

Salve
 Avevo già postato per questo problema ma sicuramente non avevo dato 
elementi sufficienti per capirlo e eventualmente cercare di risolverlo. 
Cercherò di essere il più breve possibile.
Ho 3 sale (1-2-3) per organizzare feste di compleanno. Questi eventi possono 
essere svolti in 3 periodi diversi della stessa giornata (MATTINA - 
POMERIGGIO -SERA) ma contemporaneamente in tutte e 3 le sale. Devo essere 
certo che non prenoterò nello stesso giorno a due clienti diversi la stessa 
sala nello stesso periodo. Per questo motivo ho creato una tabella 
PRENOTAZIONI con 4 campi: ID - DATA - PERIODO - SALA. Utilizzando le 
funzione DCOUNT ho scritto questo codice:
If DCount("*", "prenotazioni", "id<>" & Me!id & _
" and data =#" & Format(Me!data, "mm/dd/yyyy") & _
" # AND periodo ='" & periodo & _
"' AND sala = '" & sala & "'") > 0 Then
MsgBox "Periodo già occupato da altra prenotazione", _
        vbCritical, "Verifica orari"
        Cancel = True
        Me!periodo.SetFocus
End If
Purtroppo é sufficiente che il campo PERIODO di X data sia già utilizzato da 
una sala che il codice non mi consente più di inserire altre prenotazioni 
per le sale rimanenti nello stesso periodo,  non so se sono stato chiaro.
In pratica una volta prenotata la SALA 1 in DATA 10.09.06 PERIODO mattina, 
per quello stesso PERIODO della giornata il codice non mi fà più  prenotare 
le altre due sale. Io credo che dipende del fatto che il codice confronta un 
criterio alla volta per cui al primo criterio soddisfatto che trova si 
ferma.
Grazie a tutti
Danilo

 ha scritto nel messaggio 
news:451f8bbf$0$29072$5fc...@news.tiscali.it...

Non ti potrebbe tornare utile costruire un indice univoco a campi multipli (non necessariamente 
Primary Key dato che hai già l'ID) sui campi Data, Periodo e Sala,
così in caso di ripetizione di prenotazione vieni avvisato direttamente da Access? Poi ti gestisci 
l'errore via codice.
Michele 

 ha scritto nel messaggio 
news:451f8e9f$0$4573$4faf...@reader2.news.tin.it...

Ciao Michele
perdona la mia ignoranza ma come si costruisce un indice univoco a campi 
multipli? 

 perdona la mia ignoranza ma come si costruisce un indice univoco a campi multipli?
Apri la tabella in modalità struttura, clicchi sul pulsante Indici (quello con il fulmine per 
capirsi) e il resto dovresti capirlo da solo, smanetta un pò. Qui puoi gestire chiavi primarie, 
indici a campo singolo o multiplo, univocità degli indici, ignora nulls ecc.
Michele 

 perdona la mia ignoranza ma come si costruisce un indice univoco a campi multipli?
Non credo sia una buona idea.
Lui non deve controllare solo la presenza dello stesso valore ma anche che la data (periodo) inserito non rientri in un periodo già 
occupato.
Se non ricordo male Cinzia e Giorgio hanno proposto delle soluzioni; cerca i loro messaggi con google...
Ciao.
-- 
Sergio MAZZA 

 ha scritto nel messaggio
news:451fb391$0$4580$4faf...@reader2.news.tin.it...

ho capito, una prova io l'avevo già fatta ma per riesco ad ottenere il
risultato che voglio perchè ho bisogno che siano controllati e confrontati
tutti e tre i campi (DATA - PERIODO - SALA) ed è sufficiente che uno solo
sia diverso fra loro perchè la prenotazione vada a buon fine, mentre con gli
indici e i valori impostati a RECORD UNIVOCO "SI" non posso duplicare lo
stesso dato in nessuno dei campi perchè mi impedisce appunto di duplicare il
dato.

 ha scritto nel messaggio 
news:efp0j6$td2$2...@area.cu.mi.it...

Ciao Sergio
come faccio a trovare le soluzioni di Cinzia e Giorgio con google?  O 
meglio, dove devo cercarle?
danilo 

 danilo
www.google.it
 - Gruppi - (cerchi) microsoft.public.it.office.access oppure 
it.comp.appl.access.
E nella casella "cerca nel gruppo" inserisci il testo: "Cinzia" o "Giorgio" 
o "Cinzia periodo"... Ed esce fuori:
http://groups.google.it/group/it.comp.appl.access/browse_thread/thread/2aa89b2b9f0d3e45/8529f388b582d54d?lnk=gst&q=tariffe&rnum=1#8529f388b582d54d
Ciao.
-- 
Sergio MAZZA 

 ha scritto nel messaggio 
news:451f8bbf$0$29072$5fc...@news.tiscali.it...

Perchè non crei semplicemente un'altro campo univoco che ti raggruppa data, 
sala e periodo? (se non hai già risolto)
Ho appena fatto una prova e funziona.
Nella tua tabella PRENOTAZIONI crei un'altro campo testo indicizzato con 
duplicati non ammessi che si chiama UNIVOCO.
Nella maschera di immissione dati nell'evento su uscita dei campi DATA - 
PERIODO - SALA inserisci il codice:
Me.univoco = Me.data & Me.sala & Me.periodo
Naturalmente il campo deve essere bloccato per non poterlo modificare in 
altri modi.
Se inserisci lo stesso giorno, nella stessa sala, nello stesso periodo 
(M,P,S), due volte una prenotazione,
il campo UNIVOCO si duplica (ciò non e possibile e non ti permette il 
salvataggio del record).
Ciao
Maurizio S.

 wrote in message 
news:ofdUg.132615$_J1.8...@twister2.libero.it...

Ciao Maurizio
 francamente non ci avevo pensato ero talmente preso dalla ricerca della 
soluzione attraverso il VBA che non ho riflettuto su altre possibili 
soluzioni.  É una prova che faro' questa sera, ti farò sapere. Molte grazie
Danilo 

 ha scritto nel messaggio
news:ofdUg.132615$_J1.8...@twister2.libero.it...

ho fatto la prova che mi hai suggerito ma è evidente che (per me) è meno
semplice di quello che credevo. Per ricapitolare:
1.    creato nuovo campo UNIVOCO nella tabella prenotazioni
2.    nelle proprietà di ognuno dei campi della maschera di immissione dati
DATA - PERIODO - SALA
nell'evento "su uscita" dopo aver
selezionato il generatore di codice scrivo:
    Private Sub X_Exit(Cancel As Integer)
    Me.univoco = Me.data & Me.sala & Me.periodo
        End Sub
 (dove X sta per il nome del campo: DATA - PERIODO - SALA)
il codice mi restituisce errore e mi dice:
"L'espressione Su uscita immessa come impostazione della proprietà di evento 
ha provocato il seguente errore: Non valido all'esterno di una routine."
 Non è che avresti qualche altra illuminazione da darmi o meglio l'esempio 
che avevi creato tu così forse la smetto di sbattere il muso sul muro 
dell'ignoranza (MIA).
Ti ringrazio.

 ha scritto nel messaggio 
news:rcyUg.133962$_J1.8...@twister2.libero.it...

Hai inserito nella tua maschera di immissione una casella di testo nominata
"univoco" che ha come origine dati il campo "univoco"?
Casella che poi puoi nascondere o bloccare per non modificarla manualmente.
Se si, controlla tutti i nomi delle caselle associate ai dati che
corrispondano.
(Il codice si riferisce alle caselle della maschera, non ai campi).
Questo è il codice che ho inserito nella mia maschera e ti assicuro
funziona:
Private Sub data_Exit(Cancel As Integer)
Me.univoco = Me.data & Me.sala & Me.periodo
End Sub
Private Sub periodo_Exit(Cancel As Integer)
Me.univoco = Me.data & Me.sala & Me.periodo
End Sub
Private Sub sala_Exit(Cancel As Integer)
Me.univoco = Me.data & Me.sala & Me.periodo
End Sub
fammi sapere
Buon lavoro
Ciao
Maurizio 

Omissis ...

SORRY
A rettifica di quanto scritto ieri sera il codice può essere riferito anche 
direttamnte ai campi.
Sai, ad una certa ora ...
Il motivo di quel tipo di errore non lo capisco,
forse che ne sa un po di più può darci una spiegazione in merito.
Questo era un appello di aiuto!!!
Ciao
Maurizio S. 

 wrote in message
news:efvl88$ucl$1...@area.cu.mi.it...

Ciao Maurizio
 Scusa per il ritardo nella risposta ma non ho fatto le prove che dovevo in
questi giorni.
 Comunque ieri sera ho preparato una maschera di inserimento dati di prova e
questa con il codice che mi hai suggerito funziona benissimo, il problema
sorge quando il codice lo inserisco nella maschera di inserimento dati 
diciamo cosi "originale" e dove c'è altro codice scritto per far funzionare 
anche un calendario acx e dei controlli per evitare che dei campi restino 
vuoti.
Evidentemente va in conflitto con qualche altro comando o codice già 
esistente. Con un po' di calma cercherò di scoprire dove sta il problema.
 Per il momento comunque ti saluto e ti ringrazio per l'aiuto che mi hai 
dato.
 Ciao
 Danilo