Newsgroup: it.comp.appl.access
Titolo: Modifica messaggio di errore

Ho una tabella Spettacoli nella quale ho:
IdSpettacolo(Contatore),Film(numerico),Sala(Testo),Data(Data/ora),Ora(Data/ora).
Id è la chiave, metre Sala, Data, Ora sono legati da un'indice, non possono
essere dunque duplicati.
Da una maschera, dopo il clic su un pulsante, posso inserire uno spettacolo
schegliendo Film, Sala, Data, Ora. Nel momento in cui però Sala, Data e Ora
sono già nella tabella, mi spunta il messaggio di Access in cui mi dice che
non posso (giustamente) caricare i dati.
C'è un modo per modificare questo messaggio con un'altro messaggio tipo
msgbox da VBA nel quale scrivo che è impossibile caricare i dati perche la
sala è occupata?
La tabella Spettacoli è quella che dicevo prima.
La maschera è "Inserimento Spettacoli" e le caselle di testo sono: SalaFilm, 
OraFilm, DataFilm che si caricano rispettivamente su Sala, Ora, Film della 
tabella Spettacoli.
Per non inserire valori uguali, visto che Sala, ora, Film hanno comunque 
indice univoco, ho provato così:
If Not IsNull(DLookup("SalaFilm","Spettacoli","Sala="&Forms![Inserimento 
Spettacolo]!SalaFilm)) and Not 
IsNull(DLookup("OraFilm","Spettacoli","Ora="&Forms![Inserimento 
Spettacolo]!OraFilm)) and Not 
IsNull(DLookup("DataFilm","Spettacoli","Data="&Forms![Inserimento 
Spettacolo]!DataFilm))  then
resp=Msgbox("Sala occupata",vbInformation,"Cinema")
Ma non va... ;-(
-- 
Cicerone
*********************
Il primo Newsgroup sulla Balbuzie
http://www.newsland.it/nr/browse/it-alt.salute.balbuzie/
**********************
C.I.B. Comunità Italiana Balbuzienti
www.balbuzienti.altervista.org/md-pro/index.php
**********************

 
Ciao
	WildBug

> Ma non va... ;-(
Non si potrebbe sistemare il cosice soprastante col Dlookup? Dovrebbe essere 
una buona soluzione, ma forse sbaglio qualcosa... ma cosa?


 
Il codice così scritto non può funzionare per un semplice motivo: in una 
sala per un determinato film puoi avere più date e più ore e quindi in 
le condizioni analizzate singolarmente saranno spesso vere
Mi spiego:
1) Film "A" in Sala "1" il 01.01.2006 alle ore 18.00
2) Film "A" in Sala "1" il 01.01.2006 alle ore 20.00
3) Film "A" in Sala "1" il 01.01.2006 alle ore 22.00
4) Film "A" in Sala "1" il 02.01.2006 alle ore 14.00
5) Film "A" in Sala "1" il 02.01.2006 alle ore 20.00
6) Film "A" in Sala "1" il 02.01.2006 alle ore 22.00
Tu cerchi di inserire, ipotizziamo,
Film "A" in Sala "1" il 01.01.2006 alle ore 14.00
If Not IsNull(DLookup("Sala","Spettacoli","Sala=1")) --> VERO
and Not IsNull(DLookup("Ora","Spettacoli","Ora=14.00")) --> VERO  (VEDI 
RIGA 4)
and Not IsNull(DLookup("Data","Spettacoli","Data=01.01.2006")) --> VERO
Quindi ti compare il messaggio "Sala occupata"
La soluzione sarebbe di confrontare  tutte le condizione nello stesso 
comando DLookUp se possibile.
Poi ti sei dimenticato di testare il film.
Quindi quello che ti dicevo prima era di estrarre in una variabile 
Variant l'elenco dei film che si svolgono in una determinata sala ad un 
determinato giorno e ad una determinata ora e se la variabile IsNull 
vuol dire che puoi inserire i tuoi dati.
Spero di essere stato più chiaro.
Ciao
	WildBug

 WildBug 

 
Ti fornisco un help dettagliato della funzione. In fondo vedi come si 
costruisce una condizione multipla. Quindi avrai come FieldName "Film", 
TableName "Spettacoli" e Criteria "Sala='"&Forms![Inserimento
Spettacolo]!SalaFilm & "' AND Ora='" & Forms![Inserimento
Spettacolo]!OraFilm & "' AND Data='" & Forms![Inserimento
Spettacolo]!DataFilm & "'"
Quindi vai a testare sul database se esiste un film in quella sala, a 
quell'ora, in quella data.
Se il risultato è Null allora la sala è libera.
Fai attenzione all'uso dell'apice per delimitare le stringhe che mi pare 
nel tuo codice non era fatto correttamente.
****************************************************************************************
DLookup Usage Samples
Normal usage
For numerical values:
         DLookup("FieldName" , "TableName" , "Criteria = n")
For strings: (note the apostrophe before and after the value)
         DLookup("FieldName" , "TableName" , "Criteria= 'string'")
For dates:
         DLookup("FieldName" , "TableName" , "Criteria= #date#")
Refering to a form control
For numerical values:
         DLookup("FieldName", "TableName", "Criteria = " & 
forms!FormName!ControlName)
For strings: (note the apostrophe before and after the value)
         DLookup("FieldName", "TableName", "Criteria = '" & 
forms!FormName!ControlName & "'")
dates:
         DLookup("FieldName", "TableName", "Criteria = #" & 
forms!FormName!ControlName & "#")
Mix-n-Match
    DLookup("FieldName", "TableName", "Criteria1 = " & 
Forms!FormName!Control1  _
              & " AND Criteria2 = '" & Forms!FormName!Control2 & "'" _
             & " AND Criteria3 =#" & Forms!FormName!Control3 & "#")
********************************************************************************************
Fammi sapere se hai combinato.
Ciao
 

Ho notato anche un'altra cosa: nell'istruzione DlookUp che hai scritto 
nei nomi dei campi della tabella hai indicato i nomi della casella di 
testo. Fai Attenzione.
In base a quanto hai scritto i campi della tabella sono Film, Sala, Data 
e Ora mentre le caselle di testo sono SalaFilm, DataFilm, OraFilm, ...
Il primo parametro dell'istruzione DLookUp è il nome del campo della 
tabella!!
Ciao

 ********************************************************************************************
Allora, il codice applicato singolarmente funziona:
If Not IsNull(DLookup("Film", "Spettacoli", "Sala='" & Forms![Inserimento 
Spettacolo]!SalaFilm & "'")) Then
MsgBox "Errore", vbinfo + vbOKOnly, "Errore"
End If
If Not IsNull(DLookup("Film", "Spettacoli", "Data=#" & Forms![Inserimento 
Spettacolo]!DataFilm & "#")) Then
MsgBox "Errore", vbinfo + vbOKOnly, "Errore"
End If
If Not IsNull(DLookup("Film", "Spettacoli", "Ora=#" & Forms![Inserimento 
Spettacolo]!OraFilm & "#")) Then
MsgBox "Errore", vbinfo + vbOKOnly, "Errore"
End If
Ma quando provo a metterlo insieme seguendo il Mix-n-Match , ma non va... 
credo che il problema sia dovuto agli apici.... come faccio a legare le tre 
istruzioni di sopra in un'unica istruzione?
--
Cicerone 

 tre istruzioni di sopra in un'unica istruzione?
Ora funziona!!! :-)))
Ecco come andava scritto:
If Not IsNull(DLookup("Film", "Spettacoli", "Sala='" & Forms![Inserimento 
Spettacolo]!SalaFilm & "'" & " And Data=#" & Forms![Inserimento 
Spettacolo]!DataFilm & "#" & " And Ora=#" & Forms![Inserimento 
Spettacolo]!OraFilm & "#")) Then
MsgBox "La sala è occupata!", vbinfo + vbOKOnly, "Errore"
End If
Grazie per i consigli, davvero gentile e soprattutto utile :-)
A presto.


Cicerone ha scritto:

Prima ero scollegato quindi non avevo potuto risponderti. Comunque ho 
visto che hai combinato.
Ciao e buon lavoro!
	William

 William
Si, ci sono riuscito! :-)
Finalmente ho finito! Si trattava di un programmino per la gestione di un 
cinema multisala, con sale infinite volendo :-) La prox settimana ho un 
esame e lo devo consegnare come tesina.
Grazie ancora, ciao!
