Newsgroup: it.comp.appl.access
Titolo: Incrocio tra record e campi di due tabelle diverse

Buongiorno a tutti,
sto cercando di aggiornare una tabella chiamata "LIFO" in base ad
un'altra chiamata "ricostruzione", solo che mentre LIFO ha la seguente
struttura:
NOME_CAMPO
------------
cod_art
1997
valore1997
1998
valore1998
(i campi "1997", "1998" e così via contengono una giacenza, i campi
"valorexxxx" il valore)
la tabella RICOSTRUZIONE ha struttura del tutto diversa, essendo:
NOME_CAMPO
------------
cod_art
anno
valore
giacenza
io devo passare in rassegna il contenuto di Ricostruzione e, quando il
COD_ART esiste anche il LIFO, controllare l'anno ed aggiornare LIFO
scrivendo nel campo relativo all'anno il contenuto di
Ricostruzione.Anno, mentre nel relativo campo ValoreXXXX il contenuto
di Ricostruzione.Giacenza.
Per esempio, prendiamo il codice PIPPO, anno 1997 (presente in
entrambe le tabelle)
copio ricostruzione.anno (con risostruzione.anno="1997") in Lifo.1997,
e ricostruzione.valore (di quel record, ovviamente) in
lifo.valore1997.
Avevo pensato ad una cosa del genere (si tratta solo di una sorta di
schema a blocchi mentale, non di codice..):
per ogni record in Ricostruzione,
 if Ricostruzione.Cod_art esiste in Lifo
     se Ricostruzione.ANNO = 1997 or 1998 or 1999 or 2000 or 2001
        case Ricostruzione.ANNO of
           1997 : lifo.1997 = Ricostruzione.ANNO
                  lifo.valore1997 = Ricostruzione.Giacenza
           (idem x gli altri anni)
        end case
     else msgbox "Errore, anno sballato". oppure metto il record in
una tabella degli errori
 else msgbox "questo cod_art non esiste in Lifo.
ma quando vado a farlo fattivamente ho delle difficoltà già nel
cercare il record. Mi sa che ho le idee un po' confuse.
Uso A97
Potete aiutarmi?
Grazie! :)

 cercare il record. Mi sa che ho le idee un po' confuse.
rst = currentdb.openrecordset("ricostruzione")
rst1= currentdb.openrecordset("lifo",dbopendynaset)
rst2.openrecordset("Tab_Errori")
rst.movefirst
on error goto gest_err
do until rst.EOF
  cod = rst.field("Cod_Art")
  anno = rst.field("Anno")
  crit = "Cod_Art = '" & cod & "'"
  rst1.findfirst crit
  if rst1.nomatch
    rst2.addnew
    rst2.fields(0) = "Codice " & cod & " non esistente in lifo"
    rst2.update
  else
    rst1.edit
    rst1.fields(anno) = anno 'questa non la capisco comunque...
    rst1.fields("Valore" & anno) = rst.fields("Giacenza")
    rst1.update
  end if
ritorno_Errore:
  rst.movenext
loop
goto fine
Gest_err:
'qui ci finisco se cerco di puntare ad un anno non esistente
  rst2.addnew
  rst2.fields(0) = "Anno & anno & " non esistente in lifo"
  rst2.update
  goto ritorno_Errore
fine:
set rst = nothing
set rst1 = nothing
set rst2 = nothing
Antonio
P.S.
Funzione non testata!

 on error goto gest_err
...omissis...
Ecco il codice esatto che eseguo:
Dim rstRicostruz, rstLIFO, rstErrori As Recordset
Dim crit As String
Dim cod As String
Dim anno As Integer
rstRicostruz = CurrentDb.OpenRecordset("ricostruzione")
rstLIFO = CurrentDb.OpenRecordset("LIFO_PSM", dbOpenDynaset)
rstErrori = CurrentDb.OpenRecordset("Tab_Errori")
rstRicostruz.MoveFirst
On Error GoTo Gest_err
Do Until rstRicostruz.EOF
  cod = rstRicostruz.Field("Cod_Art")
  anno = rstRicostruz.Field("Anno")
  crit = "Cod_Art = '" & cod & "'"
  rstLIFO.FindFirst crit
  If rstLIFO.NoMatch Then
ecc..ecc..
Cosa mi sta sfuggendo?
Grazie, 
Alessio


Set rstRicostruz = CurrentDb.OpenRecordset("ricostruzione")
Set rstLIFO = CurrentDb.OpenRecordset("LIFO_PSM", dbOpenDynaset)
Set rstErrori = CurrentDb.OpenRecordset("Tab_Errori")
Così dovrebbe andare!!!
Antonio