Newsgroup: it.comp.appl.access
Titolo: integrità referenziale

ciao!
Sull'integrità referenziale volevo chiedervi una cosa.
La sua funzione è impedire che vengano cancellati record per errore,
oppure nel caso si modifichi un record, l'aggiornamento avvenga anche
nelle tabelle collegate.
L particolarità è che si può applicare sulla tabella principale solo
nel caso in cui questa contenga record non duplicati.
Nel mio caso, quella tabella non ha record univoci, ma vorrei cmq che
cambiandone il valore, vengano aggiornati i record della tabella
secondaria.
 è possibile?
grazie
Ciao.
Silvia
--
www.silvietta.it
...everyone's invited! :-)

  è possibile?
E' no biricchina: non si può fare :-)
Al limite puoi ottenere lo scopo con un pochetto di VB, ma comunque c'è
qualcosa che non mi convince: perchè avresti un'esigenza così particolare?
Ciao, warp
P.S:  complimenti per il tuo sito personale


:)
Ciao.
Silvia
--
http://silvietta.it
...everyone's invited! :-)

 ha scritto nel messaggio
news:35n7uto0dfnhhtmb7...@4ax.com...

L'integrità referenziale, è il cuore del Db e non solo per impedire la
cancellazione di record dipendenti, ma per far funzionare al meglio e senza
incongruenze e ridonzanze tutto il sistema Db.
Nel tuo caso ti consiglierei di modificare la tua tabella principale
mettendoci in testa un bel campo Id univoco, indicizzarlo e utilizzarlo
nelle varie relazioni.
--
                     Angelo
------------------------------------------------------
Sito comune di it.comp.appl.access
http://www.sitocomune.com
------------------------------------------------------

 sull'altra, facendo attenzione a non sbagliarmi.
Mhmmm, è un'impostazione non proprio rigorosa: mi associo al consiglio di
"Govardo Libero"...
Ciao, warp

  è possibile?
Cosi' come lo descrivi, non e' possibile farlo in automatico.
Puoi comunque risolvere il tutto molto semplicemente con un'istruzione SQL
nell'evento "PrimaDiAggiornare":
SUB TuoID_BeforeUpdate (Cancel as integer)
On Error Goto Errore
    WorkSpaces(0).BeginTrans
    CurrentDb.Execute "UPDATE AltraTabella SET AltraTabella.ID = '" &
Me.Cam1 & "' WHERE Altratabella.ID='" & Me.Cam1.OldValue & "'"
    Workspaces(0).committrans
Esci:
    Exit sub
Errore:
    workspaces(0).rollback
    cancel=true
    resume esci
end sub
Ricorda di togliere le virgolette se il tuo id e' di formato testo.
Comunque non sono daccordo con la soluzione di non avere un campo di
riferimento con ID univoco.
Se, come dici, questo ID lo usi per raggruppare allora devi mettere a monte
una tabella "gruppi" che utilizzi l'ID come chiave univoca ed ecco che,
oltre a potere sfruttare gli aggiornamenti automatici del motore di access,
avrai anche un db piu' corretto dal punto di vista formale.
Sib

 l'ho sempre usato in maniera molto "basica".
[CUT]
Premesso che le risposte di Warp e Govardo Libero sono a mio avviso
completamente da condividere, mi pare di capire che in entrambe le tabelle
tu usi delle sorte di "identificatori di categoria". Se è così la soluzione
corretta - e non solo per risolvere il tuo problema - è quella di creare una
terza tabella che contenga tutti gli identificatori, questa si con una
chiave univoca; da questa tabella alimenterai le altre due e alle due
relazioni (uno a molti) applicherai l'integrità referenziale eccetera
eccetera. Se devi modificare gli "id" lo farai nella terza tabella ...
Non sono sicuro se nella tabella che tu chiami "secondaria" vuoi che possano
entrare solo "id" che siano presenti in almeno un record della tabella
"principale": in questo caso credo che un po' di codice non te lo levi
nessuno ...
Ciao
--
Alberto