Newsgroup: it.comp.appl.access
Titolo: query di aggiornamento?

Premessa
le mie tabelle gestiscono le assenze del personale
Ho una tabella (lato molti) nella quale voglio cambiare la chiave esterna.
TabellaA (personale): IDPERSONALE, CODICE_A .....
TabellaB (assenze): ID, IDASSENZEPERSONALE, CODICE_B .....
La relazione era IDPERSONALE-IDASSENZEPERSONALE. Ora voglio passare a 
CODICE_A-CODICE_B
C'è un modo per popolare il campo CODICE_B nella TabellaB (che contiene 
oltre 5000 record) con i valori corrispondenti del CODICE_A della TabellaA
Ho pensato ad una query di aggiornamento... ma non so come impostarla.
Spero di essere stato chiaro!!! lo spero! 


Un po' "barbaramente", ma se vuoi, sì lo puoi fare a colpi di query di
aggiornamento (una query per ogni record della tabella Personale!!!):
1) Fai una copia di backup (non si sa mai)
2) crea una query di aggiornamento tra le due tue tabelle
dove metti i quattro campi che interessano e
sotto a Codice_B aggiorna a [Codice_A]
sotto a IDPERSONALE criterio volta per volta tutti gli ID della
tabella Personale (quindi se i valori di ID PERSONALE sono ad esempio,
1,2,3,4... metti 1, poi esegui la query, poi metti 2 riesegui la
query, ... fino all'ultimo IDPERSONALE).
F.

 ha scritto nel messaggio 
news:bd206c3c-90cc-4a6a...@m71g2000hse.googlegroups.com...




F.
Eccezionale, funziona!!
Grazie
ci metterò un po di tempo visto che gli ID sono oltre 500
ma sempre più facile che inserire 5000 codici manualmente

 ha scritto nel messaggionews:bd206c3c-90cc-4a6a...@m71g2000hse.googlegroups.com...

500 mi paiono tantini.
(Mi tiro la zappa sui piedi).
Io lo farei allora con una routine VBA e un opportuno recordset...
Se ti interessa batti un colpo che mi ci cimento (sono un praticone di
VBA e ci metterei cmq un po' di tempo....)
Se invece qualcuno bravo e svelto di codice vuole buttarlo giù gli
sono grato anch'io...
F.

 ha scritto nel messaggio 
news:c84cf087-6a47-40e0...@f36g2000hsa.googlegroups.com...


F.
effettivamente avevo pensato anch'io a qualche ciclo, credo un for..next 
vada bene
il codice sql è il seguente
UPDATE personale INNER JOIN Assenze ON personale.IDCONTATORE = 
Assenze.IDPERSONALE SET Assenze.CIP = personale.cip
WHERE (((personale.IDCONTATORE)=12));
credo che quel 12 possa diventare i nel ciclo
for i = 1 to 524
.....
credo... 

 - Mostra testo tra virgolette -
ho qualche dubbio su cosa succeda in caso di buchi tra 1 e 524,ma se
non ce ne sono o cmq vuoi provare (previo backup)
Dim MySQL1 As String
 Dim MyVar as integer
 for i = 1 to 524
MyVar=Myvar+1
    MySQL1 = "UPDATE personale INNER JOIN Assenze ON
personale.IDCONTATORE = Assenze.IDPERSONALE SET Assenze.CIP =
personale.cip WHERE (((personale.IDCONTATORE)=" & MyVar & "));"
    DoCmd.RunSQL MySQL1
F.

 - Mostra testo tra virgolette -
ho qualche dubbio su cosa succeda in caso di buchi tra 1 e 524,ma se
non ce ne sono o cmq vuoi provare (previo backup)
Dim MySQL1 As String
 Dim MyVar as integer
 for i = 1 to 524
MyVar=Myvar+1
    MySQL1 = "UPDATE personale INNER JOIN Assenze ON
personale.IDCONTATORE = Assenze.IDPERSONALE SET Assenze.CIP =
personale.cip WHERE (((personale.IDCONTATORE)=" & MyVar & "));"
    DoCmd.RunSQL MySQL1
F.
Funziona perfettamente. Grazie
anche con i buchi, e ce ne sono parecchi.
siccome vorrei capire qualcosa, che � da poco che studio vba..
perch�  MyVar=Myvar+1  ?
io avrei messo i al posto di Myvar nel codice sql
non funzionava?

 - Mostra testo tra virgolette -
penso di si, ma nella mia breve esistenza vba-istica è il mio (tra
laltro tuo) ciclo fo, per cui nel dubbio ho fatto con MyVar
PS.Prova direttamente con i e poi fammi sapere... :-)
F.

 ha scritto nel messaggio 
news:997e86ea-87f0-4a33...@k13g2000hse.googlegroups.com...


Ho provato!  Non c'è differenza. funziona allo stesso modo
Grazie ancora
ora apro un altro post per un altro problema