Newsgroup: it.comp.appl.access
Titolo: controllo su record... magari non è possibile

più che un problema è una richiesta di valutazione da parte di personemolto 
più esperte.
In un sito archeologico la terra scavata viene divisa per strati, a ogni 
strato viene assegnati un numero. Di fondamentale importanza è sapere quale 
strato copre un altro, per stabilire la recenziorità o maggiore antichità 
dei manufatti in essi contenuti, secondo l'assunto, elementare, che uno 
strato sottostante un altro si sia formato prima e che quindi i reperti che 
da esso provengono siano più antichi di quelli restituiti dallo strato che 
copre.
Va da se che se lo strato 1 copre lo strato 2; lo strato 2 copre lo strato 
3; lo strato 3 non può coprire lo strato 1. Nella documentazione di uno 
scavo quando si incorre in questo tipo di errore/situazione si parla di 
"rapporto circolare".
Dopo questa noiosa spiegazione vengo al punto:
in un db access ho le schede con i campi che descrivino ogni strato in una 
tabella. Associata a questa ultima ho una taella ("rapporti") con i campi 
"copre" e "coperto_da". Vorrei sapere se è molto complicato, e se in caso 
avete delle idee su come fare per impedire o segnalare l'immissione di un 
rapporto circolare nella tabella dei rapporti.
Es.: 1 copre 2; 2 copre 3; se tento di inserire un record con 3 copre 1 deve 
segnalare l'errore.
Grazie a tutti e scusate per la rottura di scatole che vi siete fatti 
leggendo 'sta roba! 





 ha scritto nel messaggio
news:45bddba4$0$15075$4faf...@reader3.news.tin.it...

Se la struttura dati è:
ID strato - RIF_ID_Coperto
1 - 2
2 - 3
3 - X
app =  Dlookup("ID_Strato","Tab","RIF_ID_Coperto = " & X )
if isnull(app) then "no problem"
else
app1 =  Dlookup("ID_Strato","Tab","RIF_ID_Coperto = " & App )
if isnull(app1) then "no problem"
else
"circolare, circolare..."
Il tutto se ogni strato può coprire un solo altro strato altrimenti va
organizzato un po' di codice con un po' di cicli
Antonio

adr ha spiegato il 29/01/07 :

non ho capito :
lo stato 3 può coprire lo strato 2?
o si ferma solo nel caso 3 copre 1?
la butto li secondo me a prima idea si può utilizzare un'istuzione 
select case:
if me.copre = 3
select case me.coperto_da
case 1
   ! qui si introduce la fatidica forluma del messaggio di errore
case 2
     me.coperto_da = 2
case 3
   me.coperto_da  = 3
naturalmente non provata e buttata li per intuito magari dopo quando 
sono + riposato e mi riconetto vedrò delle grosse risate da parte dei 
più esperti....
ma ci provo!!!!
-- 
fabrizio
Mai due cose in uno

 ha scritto nel messaggio
news:45be1a84$0$18525$4faf...@reader5.news.tin.it...

All'inserimento di X prendi il valore dell'ID_strato.
A quel punto apri un recordset sulla tabella che abbia un criterio sul campo
RIF_ID_Coperto che sia uguale a X.
A questo punto cicli sul recordset, cioè su tutti i record che soddisfano
quella condizione.
Per ogni valore trovato, apri un nuovo recordset con criterio analogo, ma
stavolta prendendo il valore dell'ID del record corrente del recordset
aperto.
E rifai il ciclo. Se trovi X non va bene, se non lo trovi ok
In pratica si tratta di due cicli annidati
Antonio

tento di essere più chiaro...
fate conto si abbia unaa successione dall'alto al basso:
strato 1 (ma potrebbe coprire più strati) copre
strato 2  (ma potrebbe coprire più strati) copre
strto 3 il quale non può coprire 1 perché 1 copre 2 e quindi anche 3
chiaramente lo strato 3 non può coprire neanche lo strato 2 in quanto da 
esso coperto.
si deve impedire di inserire il numero di uno strato nel campo coperto se 
questo strato copre uno o più o direttamente lo strato del record corrente
nel caso dello esempio allo strato 3 non può essere associato ne 1 o 2 nel 
campo coperto