Newsgroup: it.comp.appl.access
Titolo: Ricerca per accettare la validità di un campo

Vedo che nessuno ha risposto alla mia richiesta di aiuto Ciclo su
query della scorsa settimana...
Forse non mi sono spiegata bene.
Ci riprovo:
Ho una tabella Prestazioni
Campi Data, Cliente, TipoArea (casella combinata con TabTipoArea),
Oggetto ...
Tabella TabTipoArea ha solo un campo Descrizione (contabilità, ici,
dichiarazioni eccc) per agganciarla con TipoArea nella tabella
Prestazioni
Tabella Servizi
Campi AnnoRiferimento, Cliente, Servizio.
Faccio una simulazione:
Tab Servizi
2012, Pippo, Contabilità
2012, Pippo, Ici
2012, Pluto, Ici
Quando compilo la tab Prestazioni invece:
06/02/2012, Pippo, Contabilità, Inserito mese di gennaio
06/02/2012, Pluto, Contabilità.......
ecco qui dovrebbe bloccarmi e dirmi: il cliente Pluto non ha attivato
per il 2012 il servizio contabilità.
Se le relazioni fossero 1 a 1 non avrei problemi in quanto nella
maschera prestazioni l'origine dati potrebbe essere una query con
prestazioni e servizi e clienti
In questo caso invece se faccio una query non riesco perchè mi
aumentano le prestazioni per ogni servizio e non riesco a sistemare
neanche cambiando i tipo join.
La mia idea sarebbe quella di andare (ogni volta che compilo la
maschera prestazioni) a consultare una query servizi facendole fare un
ciclo e vedere se per quel cliente, quel servizio e per quell'anno
trova un campo uguale.
 
Chissà se sono riuscita a farmi campire... e se avete un'idea da
propormi o se la mia è fattibile...
Grazie ancora


Ciao Lo,
sono andato anche a leggermi l'altro post, ma di fatto non è che cambi
molto! :-)
Secondo me ti stai inventando qualcosa che esula da una semplice
programmazione relazionale tra tabelle. Comunque, se ci dai qualche
spunto in più vedremo di darti una mano.
Per prima cosa, quando compili la tabella Prestazioni, la data per
anno ed il Cliente che poi sono quelli che si trovano nella tabella
Servizi, li inserisci tu manualmente?
Ciao Vladimiro

 - Mostra testo citato -
 
Io ogni giorno inserisco le prestazioni, con la data odierna, il
cliente a cui ho fatto la prestazione e il tipo di prestazione (tipo
area) con una descrizione (oggetto).
Per ogni cliente ho compilato poi una tabella servizi con i servizi
che mi paga per ogni anno.
Per cui tipo nel 2012 il cliente Pluto ha pagato per il servizio Ici e
non per il servizio contabilità.
Quindi quando io vado a compilare le prestazioni, il programma
dovrebbe controllarmi la data odierna che è nell'anno 2012 per cui
Pluto ha pagato il servizio Ici, il cliente e il servizio.
Se io compilassi in data odierna una prestazione Contabilità lui
dovrebbe dirmi che quel cliente non ha pagato per contabilità ma solo
per ici.
E' una spiegazione un pèo' contorta ma non so come meglio spiegarmi.
Forse potrei sulla combo tipoarea creare una query tipo:
 
select servizio from Servizi where (cliente=Form!Prestazioni!Cliente)
and DataRiferimento=Year(data) group by Cliente;
 
non l'ho ancora collaudata ma in questo modo vedrei solo i servizi che
il cliente mi ha pagato, io invece vorrei comunque vederli tutti e che
mi faccia solo un alert nel caso il servizio scelto non sia nella tab
Servizi.
 
Così va meglio?
 
Grazie per l'interessamento
 
 
 

 - Mostra testo citato -
 
Dunque, tu hai una form dove inserisci le prestazioni un dato cliente
per un dato servizio (che lui pagherà). Vuoi evitare di poter inserire
una prestazioni per un servizio che il cliente suddetto non paga
(giusto?)
Se il caso fosse questo, io agirei in maniera diversa. se immagini che
per l'inserimento nella tabella Prestazioni il Servizio sia una
combobox, il problema l'hai già risolto. Cominci l'inserimento, appena
inserito il cliente generi il recordsource della combo con una cosa
tipo
 
SELECT ServiziDescrizione FROM Servizi WHERE IdCLiente=xxx AND
year(anno)=year(now())
 
o similare (non conosco la tua struttura)
Ora è impossibile inserire un servizio errato
 

 - Mostra testo citato -
 
Ciao Lo,
la domanda che ti ho fatto e a cui non hai risposto mi avrebbe dato
modo di farti capire come impostare il programma, cioè adottando una
relazione molti a molti. Comunque, vedi un pò se va bene questo primo
approccio:
 
Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("Select * From Servizi Where
Cliente='" & Replace(Me.Cliente, "'", "''") & "'")
Do Until rs.EOF
If rs!AnnoRiferimento = Format(Me.Data, "yyyy") Then
If InStr(1, Me.Oggetto, "contabilità", 0) > 0 Then
If rs!Servizio <> "contabilità" Then
MsgBox ("Attenzione, la contabilità non è presente."), vbExclamation
Cancel = True
Me.Oggetto.SetFocus
Exit Sub
End If
End If
End If
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
End Sub
 
Adesso bisogna studiare il modo in cui mettere nella funzione InStr,
al posto di "contabilità", il campo con le varie opzioni (ici, ecc...)
Siccome è un po' tardino, ci sentiamo domani sera.
Ciao Vladimiro.

 - Mostra testo citato -
 
ops, deve salvaguardarsi anche dalla data non presente:
 
Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("Select * From Servizi Where
Cliente='" & Replace(Me.Cliente, "'", "''") & "'")
Do Until rs.EOF
If rs!AnnoRiferimento = Format(Me.Data, "yyyy") Then
If InStr(1, Me.Oggetto, "contabilità", 0) > 0 Then
If rs!Servizio <> "contabilità" Then
MsgBox ("Attenzione, la contabilità non è presente."), vbExclamation
Cancel = True
Me.Oggetto.SetFocus
Exit Sub
End If
End If
Else
MsgBox ("Attenzione, la contabilità non è presente."), vbExclamation
Cancel = True
Me.Oggetto.SetFocus
Exit Sub
End If
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
End Sub
 
Di nuovo Vladimiro.

 - Mostra testo citato -
 
Si in effetti potrebbe andare bene se non fosse che io devo comunque
poter inserire una prestazione anche se il cliente non ha pagato per
il servizio, (quindi devo poter vedere tutti i servizi), ma devo
saperlo con un messaggio perchè se ho sbagliato a digitare il tipo
area ok altrimenti devo sapere che il cliente non ha ancora pagato per
quel servizio...
Grazie comunque dell'aiuto.


Ciao, prova in questo modo:
nella casella combinata TabTipoArea, vai negli eventi e su "dopo 
aggiornamento", inserisci questo codice:
 
Private Sub TabTipoArea_AfterUpdate()
Dim controllo As String
controllo = Nz(DLookup("[Servizio]", "servizi", "[AnnoRiferimento] = '" 
& Year(Me.Data) & "' and [Cliente] = '" & Me.Cliente & "' and [Servizio] 
= '" & Me.TipoArea & "'"), "nontrovato")
 
If controllo = "nontrovato" Then
     MsgBox "il cliente " & Me.Cliente & " non ha attivato per il " & 
Year(Me.Data) & " il servizio " & Me.TipoArea & "."
     Me.TipoArea = ""
     Me.Cliente.SetFocus
End If
 
End Sub
 
Ciao.
 
Stefano

 - Mostra testo citato -
 
Grazie Vladimiro,
i dati nella maschera Prestazioni li inserisco io manualmente ogni
giorno per tutti i clienti che lavoro ogni giorno.
Di quello che hai scritto ci capisco poco ma credo che possa andar
bene per il mio problema, appena oggi ho un attimo di tempo lo provo
poi ti faccio sapere.
Grazie mille

 - Mostra testo citato -
 
Ciao Lo,
se non sono molte, mi scrivi tutte le prestazioni inserite nella
tabella TabTipoArea?
Ciao Vladimiro

Ciao Lo, facciamo così, tanto è la stessa cosa; nel senso che ci puoi
lo stesso arrivare da sola (sempre se questo cazzabuglia vada bene e
non pensi di mettere mano seriamente a tabelle relazionate).
Mettiamo che le descrizioni siano 3 ( "contabilità", "ici", "altro" ),
nel momento in cui nell'oggetto inserisci tra le varie parole una di
queste descrizioni e nella tabella Servizi, dove il Cliente e la data
sono uguali al Cliente e all'anno di riferimento dell'attuale tabella
Prestazioni, non trova la stessa descrizione, esce il messaggio di
errore:
Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("Select * From Servizi Where
AnnoRiferimento ='" & _
Replace(Year(Me.Data), "'", "''") & "'" & " And Cliente='" & _
Replace(Me.Cliente, "'", "''") & "'")
Do Until rs.EOF
If InStr(1, Me.Oggetto, "contabilità", 0) > 0 _
And rs!Servizio <> "contabilità" Then
MsgBox " Non c'è contabilità"
ElseIf InStr(1, Me.Oggetto, "ici", 0) > 0 _
And rs!Servizio <> "ici" Then
MsgBox " Non c'è ici"
ElseIf InStr(1, Me.Oggetto, "altro", 0) > 0 _
And rs!Servizio <> "altro" Then
MsgBox " Non c'è altro"
End If
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
End Sub
 
Ciao Vladimiro.
 


Ciao,
 
scusa ma ieri non sono riuscita a fare prove.
Le descrizioni sono molte (più di 20) e possono essere oggetto di
aggiunte e/o modifiche nel tempo.
Prometto che oggi cercherò di fare le prove... il tempo è sempre
tiranno!
Grazie comunque per la tua pazienza e disponibilità
Lo


Eccoci con le prove...
Ho modificato come segue:
 
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("Select * From Servizi Where
AnnoRiferimento ='" & Replace(Year(Me.Data), " '", "''") & "'" & " And
IdAna='" & Replace(Me.IdAna, "'", "''") & "'")
Do Until rs.EOF
If InStr(1, Me.TipoArea, "CONTABILITA'", 0) > 0 _
And rs!Servizio <> "CONTABILITA'" & "*" Then
MsgBox " Non c'è contabilità"
 
End If
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
 
Al momento mi serve solo verificare di avvisarmi di non inserire
prestazioni per clienti che non hanno pagato contabilità ordinaria o
contabilità semplificata come indicato nella tabella servizi ma di non
impedirmelo.
Mi da errore nel rigo Set rs... così ho provato a scrivere tutto su un
solo rigo (mi dava errore di compilazione).
Ho provato però a lanciare il codice nella maschera e mi da errore
runtime 3464 Tipi di dati non corrispondenti nell'espressione,
eppure sembrano scritti in modo corretto IdAna è un campo numerico da
entrambe le parti, invece AnnoRiferimento è numerico in Servizi e il
campo Data è Data/ora in Prestazioni.
Riesci a capire dov'è il problema?
Grazie ancora tantissime, spero di poter contraccambiare in qualche
modo il tuo aiuto.
Lo

 wrote:

Eccoci, sono riuscita a fare qualche prova. Ho modificato il tuo
codice come segue:
 
 
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("Select * From Servizi Where
AnnoRiferimento='" & Replace(Year(Me.Data), "'", "''") & "'" & " And
IdAna='" & _
Replace(Me.IdAna, "'", "''") & "'")
Do Until rs.EOF
If InStr(1, Me.TipoArea, "CONTABILITA'", 0) > 0 _
And rs!Servizio <> "CONTABILITA'" & "*" Then
MsgBox " Non c'è contabilità"
 
End If
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
 
mettendo la parte Set rs... tutto su un rigo perchè altrimenti mi dava
errore di compilazione in rosso.
Lanciando il codice da maschera Prestazioni mi da comunque il seguente
errore:
 
Errore di runtime 3464
Tipi di dati non corrispondenti nell'espressione
Eppure credo di averli inseriti giusti: IdAna è numerico sia in tab
servizi che in tab Prestazioni. Il campo AnnoRiferimento invece è
numerico intero lungo in servizi e il campo data è Data/ora in
prestazioni..
Hai qualche dritta da suggerirmi?
Spero di poter contraccambiare la tua cortesia in qualche modo.
Grazie ancora
Lo

 - Mostra testo citato -
Ciao Vladimiro.
 

 - Mostra testo citato -
 
Ok Ho cambiato IdAna con Cliente. Mi sembrava più giusto usare l'id
però ti ho ascolltato.
Adesso è cambiato l'errore:
Errore di runtime 3075
Errore di sintassi (operatore mancante) nell'espressione della query
'AnnoRiferimento=2012' and Cliente='Pluto"
Il codice che ho scritto io è il seguente:
Set rs = CurrentDb.OpenRecordset("Select * From Servizi Where
AnnoRiferimento=  " & (Year(Me.Data)) & "'" & " And Cliente='" & _
Replace(Me.Cliente, "'", "''") & "'")
 
Capisci perchè?
Grazie ciao Lo
 

 - Mostra testo citato -
 
Ciao Stefano,
mi ero persa la tua idea...
Ho provato ma anche se il servizio è attivato mi da il messaggio che
non ha trovato il servizio.
In più comunque non posso andare avanti lo stesso come invece vorrei.
 
Io ho riscritto il tuo codice come segue:
 
Dim controllo As String
controllo = Nz(DLookup("[Servizio]", "servizi", "[AnnoRiferimento] =
'" & Year(Me.Data) & "' and [RagioneSociale] = '" & Me.RagioneSociale
& "' and [Servizio]" _ & "'" = " & Me.TipoArea & "), "nontrovato")
 
If controllo = "nontrovato" Then
     MsgBox "il cliente non ha attivato il servizio "
     Me.TipoArea = ""
     Me.TipoArea.SetFocus
 
End If
 
Ho aggiunto & "'" dopo [Servizio]" perchè nella tabella servizi mi
sono accorta che potrei avere anche altre scritte dopo contabilità
(es. contabilità ordinaria).
Sei sicuro che in questo modo il codice vada a cercare nella tabella
servizi per tutti i righi dello stesso anno e dello stesso cliente?
Perchè per ogni cliente potrei avere più righi per ogni servizio
attivato...
Grazie anche a te per l'interessamento.
Spero tu possa aiutarmi nella soluzione di questo mio problema.
Ciao Lo

 - Mostra testo citato -
 
Scusa, ma hai letto la mia risposta?
Un pò più di impegno non farebbe male!!!
:-)
Ciao Vladimiro.

 Ciao Lo
 
 
Ciao Lo.
Io credo che il problema non si ponga perchè se tu hai come tipo area
Contabilità ordinaria, contabilità semplificata, contabilità analitica, 
ecc. quando fa la ricerca ti cerca tutto il campo per esteso per cui c'è 
solo un record con quel cliente, quell'anno e quel servizio.
Secondo me il " _&  "'" non va inserito piuttosto, visto che il tipo è 
testo, potresti mettere
&  "' and [Servizio] = '" &  Me.TipoArea & "'"), "nontrovato")
 
Comunque io l'ho testato e funziona correttamente.
Fammi sapere.
 
Ciao.
 
Stefano

 - Mostra testo citato -
 
Grazie per la risposta,
 
il problema però è inverso nel senso che posso trovare in modo
generico Contabilità in tipo area, è invece in servizio che vado
eventualmente a distinguere il tipo di contabilità...
 
Grazie ciao Lo


Scusa ma evidentemente non ho capito...
Ho ricambiato IdAna che era numerico con cliente come mia hai
suggerito tu, il risultatoè che è cambiato l'errore ma ancora non
funziona...
Qual' la risposta che non avrei capito?
Perdona la mia cocciutaggine ma non ci arrivo.
Giuro che l'impegno ce lo metto...
Ancora grazie
Lo

Scusami Lo, nel risponderti ti avevo scritto:
Mi pare ovvio che ti esca l'errore in quanto i miei dati con le
virgolette si applicano a campi di tipo testo ( anche per nomi con
l'apostrofo), mentre per campi di tipo numerico non si usa nulla e
per
campi di tipo data (non è il tuo caso) si usa il cancelletto ( # )
Ora, tu continui a scrivere:
Set rs = CurrentDb.OpenRecordset("Select * From Servizi Where
AnnoRiferimento= " & (Year(Me.Data)) & "'" & " And Cliente='" & _
Replace(Me.Cliente, "'", "''") & "'")
Mentre mi hai specificato che AnnoRiferimento è un campo numerico;
come vuoi che non ti esca l’errore?
Tagliamo la testa al toro, la sintassi giusta è:
Set rs = CurrentDb.OpenRecordset("Select * From Servizi Where
AnnoRiferimento= " & (Year(Me.Data)) & " And Cliente='" & _
Replace(Me.Cliente, "'", "''") & "'")
Un’altra cosa, tu parli di campo Id e del suo utilizzo al posto di
Cliente. Dunque, in genere il nome Id viene dato in una prima tabella
ad un campo assegnandogli come tipo dati “Contatore” e chiave primaria
e un altro campo Id in un’altra tabella con tipo dati “Numerico” in
modo da creare una relazione uno a molti tra le due tabelle. Tutto
questo che significa? Significa che una volta creata una maschera (con
la prima tabella) con sottomaschera (con la seconda tabella)
relazionate e cominci ad inserire nella maschera principale il primo
cliente, con Id=1 quando inserirai i vari servizi (più record nella
sottomaschera) l’Id della sottomaschera sarà sempre Id=1 ; secondo
cliente Id=2 tutti i servizi della sottomaschera saranno Id=2  Fatto
ciò, una volta create altre maschere o report le potrai sincronizzare
solo con il campo Id (che, giusto per essere precisi, nelle maschere o
report si chiamano caselle di testo e non campi). Ad esempio:
Set rs = CurrentDb.OpenRecordset("Select * From Servizi Where Id= " &
Me.Id
Però da quello che ho capito, non hai tabelle relazionate, per cui,
l’unica sincronizzazione, la puoi avere con il cliente andando a
spulciare nell’anno di riferimento.
Ciao Vladimiro.
 
 


Pardon, puoi evitare le parentesi:
AnnoRiferimento= " & Year(Me.Data) & " And Cliente='" & _
Replace(Me.Cliente, "'", "''") & "'")
 
Di nuovo Vladimiro

 campi di tipo data (non è il tuo caso) si usa il cancelletto ( # )
 
 
Hai ragione, io continuavo a controllare il cliente non facendo caso
all'anno...

Ciao Vladimiro,
 
porta pazienza, ora ho risolto il problema di cui sopra ma ne ho un
altro:
 
Il seguente codice che mi hai scritto mi pare giusto:
 
If InStr(1, Me.TipoArea, "CONTABILITA'", 0) > 0 _
And rs!Servizio <> ("CONTABILITA'" & "*") Then
MsgBox " Non c'è contabilità"
End If
 
Ma non funziona come dovrebbe, nel senso che, se inserisco un cliente
che in tab servizi non ha attivato il servizio Contabilità e io in
prestazioni inserisco contabilità non mi esce nessun messaggio, se
invece inserisco un cliente che ha attivato il servizio contabilità mi
esce il msg "Non c'è contabilità". Esattamente il contrario!
 
Ho provato così e in mille altri modi ma non riesco a trovare la
quadra:
 
If InStr(1, Me.TipoArea, "CONTABILITA'", 0) = ("CONTABILITA'") _
And rs!Servizio <> ("CONTABILITA'" & "*") Then
MsgBox " Non c'è contabilità"
End If
 
So che hai una pazienza da elefante, ti offro un caffè virtuale e ti
chiedo spero l'ultimo aiuto!
Grazie ciao Lo

0
Ciao Vladimiro


Ciao Vladimiro,
 
per restare in tema forse questa volta sei tu che non hai capito il
mio problema...
Scrivendo il codice che mi hai suggerito e cioè
 
If InStr(1, Me.TipoArea, "CONTABILITA'", 0) > 0 _
And rs!Servizio <> "CONTABILITA'" Then
MsgBox " Non c'è contabilità", vbInformation
End If
 
non funziona come dovrebbe, nel senso che quando in prestazioni
inserisco Contabilità (e in servizi il cliente non ha attivato il
servizio) non mi esce nessun messaggio.
Quando invece inserisco una prestazione di un cliente (che in servizi
ha attivato il servizio Contabilità) per cui non dovrebbe uscirmi
nessun messaggio mi esce il messaggio " Non c'è contabilità".
Ho provato a cambiare in mille modi il codice come quello che ti ho
detto nel precedente post ma non funzionava comunque.
Ho la mente atrofizzata probabilmente, ma non mi viene in mente
nessuna soluzione corretta.
Sono riuscita a spiegare il mio problema?
Grazie ancora
Sigh che fatica...

 - Mostra testo citato -
 
Ciao Lo, che dirti? Vediamo se sono io a non aver capito quello che ti
serve.
Al seguente link c'è un db di esempio:
"Confronto Servizi e Prestazioni"
Modifica o aggiungi qualcosa ai record con data 2013
 
https://skydrive.live.com/?cid=dfdfb766aa86f9d8&sc=documents&uc=1&id=DFDFB766AA86F9D8%21112
 
 
Ciao Vladimiro.

 - Mostra testo citato -
 
Sei fantastico!
Hai simulato perfettamente la mia situazione e finalmente, prova e
riprova, ho capito dove non funziona.
Ti spiego:
se io inserisco in Prestazioni un cliente presente in anagrafica e non
in servizi o anche un cliente presente in anagrafica e presente in
servizi per anni diversi da quello in corso, non esce il messaggio.
Per esempio nel db preparato da te se io inserisco una prestazione per
Topolino nel 2013, non esce nessun messaggio, se la inserisco nel 2012
(Topolino nel 2012 ha un servizio attivato) funziona il messaggio.
Ecco una delle ragioni perchè con me impazziva e non faceva quello che
avrei voluto facesse.
Mago come sei hai una soluzione amche per questo?
 
In più ti dico che rifacendo le prove con contabilità scritto
maiuscolo CONTABILITA' non funziona
If InStr(1, Me.TipoArea, "CONTABILITA'", 0) > 0 _
And rs!Servizio <> "CONTABILITA" & "*" Then
 
Tieni conto che ho la necessità in Servizi di inserire CONTABILITA'
ORDINARIA o SEMPLIFICATA, mentre in Prestazione ho la necessità di
scrivere come TipoArea solo CONTABILITA' (senza specificare il tipo)
GRAZIEEEEE PER LA TUA PAZIENZA
Lo

 - Mostra testo citato -
 
Mi ero scordata di dirti che ho fatto anche le prove mettendo or
anzichè and in questa riga:
 
Set rs = CurrentDb.OpenRecordset("Select * From Servizi Where
AnnoRiferimento =" & _
Year(Me.Data) & " and Cliente='" & _
Replace(Me.Cliente, "'", "''") & "'")
 
Così funzionerebbe se non fosse che mi fa uscire il messaggio per ogni
servizio e ogni anno caricato in Servizi...
Idee?
grazie ciao Lo

Ciao Lo,
ho fatto un copia-incolla in modo da risponderti in un’unica volta.
 
============================================
In più ti dico che rifacendo le prove con contabilità scritto
maiuscolo CONTABILITA' non funziona
If InStr(1, Me.TipoArea, "CONTABILITA'", 0) > 0 _
And rs!Servizio <> "CONTABILITA" & "*" Then
============================================
Risposta:
 
1)	Non serve inserire & "*"
2)	Il carattere maiuscolo o minuscolo si differenzia solo in: InStr(1,
Me.TipoArea, "CONTABILITA'", 0) > 0  per cui se decidi di scrivere in
TipoArea tutto maiuscolo va bene così, altrimenti con contabilità
scritta in minuscolo la funzione InStr deve essere modificata così: If
InStr(1, Me.TipoArea, "contabilità", 0) >
 
============================================
Tieni conto che ho la necessità in Servizi di inserire CONTABILITA'
ORDINARIA o SEMPLIFICATA, mentre in Prestazione ho la necessità di
scrivere come TipoArea solo CONTABILITA' (senza specificare il tipo)
============================================
Risposta:
 
a questo punto, anche in Servizi devi decidere se scrivere maiuscolo o
minuscolo; io ho scelto di scrivere minuscolo e pertanto:
If InStr(1, Me.TipoArea, "contabilità", 0) > 0 _
And InStr(1, rs!Servizio, "contabilità", 0) = 0 Then
MsgBox " Il cliente " & Me.Cliente & "  non ha attivato per il " &
Year(Me.Data) & "  il servizio contabilità.", vbInformation
 
============================================
Mi ero scordata di dirti che ho fatto anche le prove mettendo or
anzichè and in questa riga:
============================================
Risposta:
 
lascia perdere :-)
 
============================================
Set rs = CurrentDb.OpenRecordset("Select * From Servizi Where
AnnoRiferimento =" & _
Year(Me.Data) & " and Cliente='" & _
Replace(Me.Cliente, "'", "''") & "'")
Così funzionerebbe se non fosse che mi fa uscire il messaggio per
ogni
servizio e ogni anno caricato in Servizi...
============================================
Risposta:
 
If InStr(1, Me.TipoArea, "contabilità", 0) > 0 _
And InStr(1, rs!Servizio, "contabilità", 0) = 0 Then
MsgBox " Il cliente " & Me.Cliente & "  non ha attivato per il " &
Year(Me.Data) & "  il servizio contabilità.", vbInformation
Cancel = True
Exit Sub
 
Cancel= True e Exit Sub servono: il primo per rimanere sullo stesso
record, il secondo per terminare di scorrere la tabella Servizi.
Ciao Vladimiro.