Newsgroup: it.comp.appl.access
Titolo: Come eliminare dati in Tabella correlata...

vediamo se riesco a farmi capire...
ho una Tabella A ed una Tabella B..
correlate rispettivamente uno > molti...
nella Tabella A (anagrafica).. ho i dati di Pinco 
e nella tabella B dei codici ad esso attribuiti... 
mi interessava cancellare molti codici... eccetto uno..
ho fatto una query di eliminazione specifivcando nei
criteri Not 013...funziona... ma chiaramente non si porta
dietro i record associati del lato uno...
come posso fare ???
spero di essermi spiegato...
ciao...

 ha scritto nel messaggio
news:Gtsi8.13266$tC3.3...@twister1.libero.it...


 ha scritto nel messaggio
news:hUsi8.49863$_u5.1...@news1.tin.it...

-------------------------> >
Ciao ...intanto grazie x aver risposto... e la prossima ti
prego di "quotare" la risposta in basso al messaggio di richiesta..
come vuole la Netiquette....
ritornando al problema... niente.... le tabelle A+B sono già
relazionate con  aggiorna campi correlati a catena ed elimina record
correlati a
 
catena.il
 problema penso sia un altro...
ciao...

"SuperPippo®" ha scritto:

Vediamo se ho capito, tu vorresti cancellare un insieme di record
(eccetto uno) nella tabella B (lato molti della relazione) e poi
cancellare anche il record corrispondente nella tabella A (lato uno
della relazione).
Se è così, non puoi farlo perché ti ritroveresti con almeno un record in
B (quello del codice 013) senza un record correlato sulla tabella A e
quindi perderesti l'integrità relazionale dei dati.
Se, invece ci sono più record di A che fanno riferimento ad uno stesso
record di B allora non si tratta più di una relazione 1 a molti, ma di
una molti a molti e le cose si complicano un po'.
In conclusione, cerca di specificare meglio la situazione, così sarà
possibile darti qualche spiegazione in più.
Ciao, Tonio

 ha scritto nel messaggio

Perche' vuoi eliminare il record dal lato 1 se dal lato molti gli lasci un
record correlato?
Non e' per entrare nel merito, e' che e' questo il primo iconveniente da
superare per darti una risposta.
Sib

 Sib
-------------------
beh... vediamo se riesco a farmi capire...
rispondendo ad Antonio Tanzi... hai capito perfettamente il problema...
riguardo a Sib.. ero convinto che essendo la relazione "elimina campi
correlati a catena" eliminando tutti i codici eccetto lo 013...
mi eliminasse anche i campi dal lato 1... evidentemente mi sono sbagliato..
Cmq... potrei aggirare il problema facendo in un altro modo....
a me serve una Tabella Anagrafe (lato1) ed una Tabella Esenzioni (lato
molti)
solo con il codice 013.250.tutti gli altri vanno eliminati...
possibilmente senza eliminare le 2 tabelle originarie...
a parte che potrei farlo in un DB di prova...
quindi alla fine avere le 2 tabelle originali... in più
una Tabella Anagrafe1 ed una Tabella Esenzioni1 con i dati
dei soli possessori del codice 013.250....
grazie per l'aiuto....
Ciao...

 Ciao...
Ora č piů chiaro! Dovresti provare con una query di eliminazione; lo
schema dovrebbe essere il seguente:
"DELETE [Tabella Anagrafe].*, [Tabella Esenzioni].CodiceEsenzione FROM
[Tabella Esenzioni] INNER JOIN [Tabella Anagrafe] ON [Tabella
Esenzioni].IDCodiceEsenzione = [Tabella Anagrafe].IDCodiceEsenzione
WHERE ([Tabella Esenzioni].CodiceEsenzione<>'013.250')"
Perň non ti garantisco che sia quella giusta (non l'ho mai provata),
quindi fatti una copia dell'archivio prima di provarla ;o).
Ciao, Tonio

 mi eliminasse anche i campi dal lato 1... evidentemente mi sono
sbagliato..
Infatti. Elimina i campi correlati a catena vuol dire che se elimini il
master (lato 1) elimini tutti i figli (lato molti).
Da quanto spieghi ora (che se vai a rileggere e' diverso da quello che avevi
scritto prima) vuoi eliminare tutti i master (e conseguentemente i relativi
figli ma di questo non devi preoccuparti perche' hai scelto elimina a
catena) tra i cui figli non trovi 013.
Quindi la strada corretta e' quella indicata da Tonio.
Sib

 Sib
------------------------------>
grazie... quindi.. ho provato la soluzione di Tonio...
creando una Query che comprendesse le 2 tabelle...
e modificandola in query di eliminazione...mi riporta
il codice originale sottoscritto.....
-------------
DELETE DISTINCTROW Anagrafe.ID_assistito, Anagrafe.Cognome, Anagrafe.Nome,
Anagrafe.Nascita, Anagrafe.N_Protocollo, Esenzioni.Codice_Esenzione
FROM Anagrafe INNER JOIN Esenzioni ON Anagrafe.ID_assistito =
Esenzioni.Id_Assistito;
------------------
ora  modificando opporunatamente ...almeno credo... la quesry di Tonio..
appare come segue....
------------
DELETE [Anagrafe].*, [Esenzioni].Codice_Esenzione
FROM Esenzioni INNER JOIN Anagrafe ON [Esenzioni].Codice_Esenzione =
[Anagrafe].Codice_Esenzione
WHERE ([Esenzioni].Codice_Esenzione<>'013.250');
------------------
ma lanciandola non funge... mi dice che per proseguire è necessario
una quesry aggiornabile.... a questo punto bisogna trasformare
la query in una di aggiornamento ?????
Ciao e grazie per la pazienza....

 la query in una di aggiornamento ?????
Hai ragione.
Non ho approfondito il perche' ma non accetta la sintassi anche se la query
genera un recordset perfettamente aggiornabile.
Usa questa sintassi:
DELETE CTabella1.*, DCount("DatiVari","Tabella1Slave","IDTab1=" & [id] & "
AND DatiVari='aaa'") AS Espr1
FROM CTabella1
WHERE (((DCount("DatiVari","Tabella1Slave","IDTab1=" & [id] & " AND
DatiVari='aaa'"))>0));
Penso sia intuitivo come sostituire i riferimenti.
sib

 Ciao e grazie per la pazienza....
Stando a quello che hai scritto nella tua query, la nuova deve essere
così strutturata:
DELETE [Anagrafe].*, [Esenzioni].[Codice_Esenzione] FROM Esenzioni INNER
JOIN Anagrafe ON [Esenzioni].[ID_assistito] = [Anagrafe].[ID_assistito]
WHERE ([Esenzioni].[Codice_Esenzione]<>'013.250');
Infatti il campo di join tra le 2 tabelle evidentemente è ID_assistito.
Io non lo conoscevo ed ho usato un generico IDCodice_Esenzione che nel
tuo caso va sostituito da quello appena citato.
Ciao, Tonio

 sib
-------------------->
scusa Sib...intanto non ho capito devo fare una quesry di eliminazione ??
stando al codice che mi hai postato... non di aggiornamento...
inoltre... per me ... non è molto intuibile come sostituire i riferimenti...
per esempio... in DatiVari ...ci va il codice ???
ad ogni buon conto ti allego il codice Sql della query di eliminazione
originale.... grazie....
---------------------------
 DELETE [Anagrafe].*, [Esenzioni].[Codice_Esenzione]
FROM Esenzioni INNER JOIN Anagrafe ON [Esenzioni].[ID_assistito] =
[Anagrafe].[ID_assistito]
WHERE ([Esenzioni].[Codice_Esenzione]<>'013.250');
--------------------------