Newsgroup: it.comp.appl.access
Titolo: Copiare dati da tabella

Sto facendo,
forse č meglio sto cercando di fare una maschera che  automatizza diverse
operazioni
per aggiornare il database e avrei bisogno di aiuto.
tramite un pulsante di comando devo :
Confrontare i valori dei campi "catalogo" e "release" tra due tabelle
la Tabella  Legenda e    la Tabella CDlegenda
( il campo release č di tipo testo lungo 4
generalmente i valori sono sempre tipo 01,02,03,04,05 ecc..)
esempio :
Tabella Legenda                          TabellaCDlegenda
Catalogo        Release                    Catalogo   Release
 323X                00                            323X    01
 540Y                04                            540Y    05
a questo punto se nella tabella CDlegenda (che č la tabella sempre piů
aggiornata )
 al valore campo  Catalogo uguale corrisponde Release diversa , cioč numero
piů alto,
copiare i record piů aggiornati ,
svuotare la tabella "TblTemporaneaLegenda" incollare i record copiati
 salvare il tutto e il gioco č fatto ,
Io non sono capace di farlo qualcuno di voi?
Ciao Giuseppe

 Ciao Giuseppe
-- 
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

 Si, io sono capace.
Cosa è una minaccia ?
Non ho mai messo in dubbio le tue capacità Roberto ,
se sei così gentile da  aiutarmi  te ne sarò grato
Ciao Giuseppe

 se sei così gentile da  aiutarmi  te ne sarò grato
Dovresti fornire altre informazioni:
1) La tabella Legenda contiene sempre tutti i numeri di catalogo, ovvero la
tabella CDlegenda può contenere numeri di catalogo non contenuti nella
tabella Legenda?
2) La tabella Legenda può contenere record con uguale numero di catalogo e
release diversa?
3) La tabella CDlegenda può contenere record con uguale numero di catalogo e
release diversa?
4) E' giusto affermare che, a parità di numero di catalogo, i record della
tabella CDlegenda sostituiscono comunque quelli della tabella Legenda a
prescindere dal valore che ha il campo Release?


 prescindere dal valore che ha il campo Release?
No, vengono sostituiti solo se il numero release è diverso,
cioè più alto
Ricapitolando , se ho nella tabella CDlegenda   numeri catalogo
uguali ma release più nuove  , allora questi mi vanno a sostituire  gli
stessi numeri
catalogo ma release più vecchie della tabella Legenda  se ho numeri catalogo
nuovi
cioè con release 00 allora vanno aggiunti ex novo alla tabella Legenda
Ciao
Giuseppe

 ha scritto nel messaggio
news:D64Wb.214792$VW.88...@news3.tin.it...

Tenendo conto che vuoi copiare i dati in una nuova tabella
(TblTemporaneaLegenda).
Tenendo conto che ambedue le tabelle di origine risultano non normalizzate
in quanto possono inopportunamente contenere per lo stesso catalogo più
record con release diversa e che dovresti comunque procedere alla
normalizzazione lasciando nella nuova tabella un solo record per ogni
catalogo (quello con la release più alta).
Tenendo anche conto che usando delle queries dovresti eseguirne più di una
in cascata.
Ciò premesso penso che la cosa migliore sia popolare la tabella
TblTemporaneaLegenda attraverso un codice VBA che faccia riferimento a DAO.
Ipotizzando che le tre tabelle abbiano una struttura simile a questa:
ID                Contatore e chiave primaria
Catalogo      Testo
Release        Testo
Campo1
Campo2
Campo3
Per ottenere ciò che ti serve esegui il seguente codice VBA:
Dim Leg As DAO.Recordset
Dim CD  As DAO.Recordset
Dim Temp As DAO.Recordset
DoCmd.SetWarnings False
DoCmd.RunSQL "DELETE * FROM TblTEmporaneaLegenda;"
DoCmd.SetWarnings True
Set Temp = CurrentDb().OpenRecordset("TblTemporaneaLegenda", _
dbOpenDynaset)
Set Leg = CurrentDb().OpenRecordset("SELECT * FROM Legenda " _
 & "ORDER BY Catalogo, Release;")
Set CD = CurrentDb().OpenRecordset("SELECT * FROM " _
& "CDlegenda ORDER BY Catalogo, Release;")
Leg.MoveFirst
Do Until Leg.EOF
    Temp.FindFirst "Catalogo ='" & Leg!Catalogo & "'"
    If Temp.NoMatch Then
        Temp.AddNew
        Temp!Catalogo = Leg!Catalogo
        Temp!Release = Leg!Release
        Temp!Campo1 = Leg!Campo1
        Temp!Campo2 = Leg!Campo2
        Temp!Campo3 = Leg!Campo3
        Temp.Update
    Else
        If Leg!Release > Temp!Release Then
            Temp.Edit
            Temp!Catalogo = Leg!Catalogo
            Temp!Release = Leg!Release
            Temp!Campo1 = Leg!Campo1
            Temp!Campo2 = Leg!Campo2
            Temp!Campo3 = Leg!Campo3
            Temp.Update
        End If
    End If
    Leg.MoveNext
Loop
CD.MoveFirst
Do Until CD.EOF
    Temp.FindFirst "Catalogo ='" & CD!Catalogo & "'"
    If Temp.NoMatch Then
        Temp.AddNew
        Temp!Catalogo = CD!Catalogo
        Temp!Release = CD!Release
        Temp!Campo1 = CD!Campo1
        Temp!Campo2 = CD!Campo2
        Temp!Campo3 = CD!Campo3
        Temp.Update
    Else
        If CD!Release > Temp!Release Then
            Temp.Edit
            Temp!Catalogo = CD!Catalogo
            Temp!Release = CD!Release
            Temp!Campo1 = CD!Campo1
            Temp!Campo2 = CD!Campo2
            Temp!Campo3 = CD!Campo3
            Temp.Update
        End If
    End If
    CD.MoveNext
Loop
Set Leg = Nothing
Set CD = Nothing
Set Temp = Nothing
La tabella TblTemporaneaLegenda risulterà non ordinata.
Il codice VBA di cui sopra fa riferimento alla libreria Microsoft DAO
quindi, se usi una versione di Access successiva ad Access 97, devi
aggiungere al tuo database i riferimenti a tale libreria.


[SUPERCUT]
Prima di tutto grazie per la cortese  disposizione,
Ho eseguito le tue istruzioni  e mi succede questo:
Situazione Originale
Tabelle:
CDTabellaLegenda       Legenda                    TblTemporaneaLegenda
 Catalogo    Release     Catalogo    Release     Catalogo      Release
108W        01                108W        00            Vuota
108W        01                108W        00
108W        01                108W        00
108W        01                108W        00
1094          03                1094          02
1094          03                1094          02
1094          03                1094          02
2053          02                2053          01
2053          02                2053          01
Dopo l'esecuzione del codice la tabella  "TblTemporaneaLegenda"
si popola ma cosě:
Catalogo        Release
108W            01
1094              01
2053              02
Mentre dovrebbe essere cosě:
108W        01
108W        01
108W        01
108W        01
1094          03
1094          03
1094          03
2053          02
2053          02
Forse sarebbe meglio che direttamente questi record  venissero
incollati  nella tabella Legenda? senza passare per la TbltemporaneaLegenda?
Ciao
Giuseppe


Scusa Roberto ma ho fatto stampare la selezione della tua risposta e non
avevo
stampato il pezzo sopra.
però non capisco perchè dici "possono inopportunamente contenere per lo
stesso
catalogo più record con release diversa ".
La tabella CDCatalogo ha questa struttura:
Marca                 testo  e chiave primaria
Catalogo             testo e chiave primaria
Release               testo e chiave primaria
Tipo                    testo e chiave primaria
Version               testo e chiave primaria
Descr_Italiano     testo
Questo perchè una determinata descrizione può appartenere alla stessa Marca,
allo stesso Catalogo,alla stessa Release,allo stesso Tipo ma una Versione
diversa.
Ciao e scusa per il tempo che perdi
Giuseppe

 ha scritto nel messaggio
news:P6wWb.222356$VW.90...@news3.tin.it...

Caro Giuseppe,
nei tuoi messaggi precedenti TU hai parlato SOLAMENTE di DUE campi: Catalogo
e Release e per me era logico pensare che esistessero solo questi due campi
a comporre la chiave primaria ed è per questo che ho messo nel preambolo
della mia soluzione  "possono inopportunamente contenere per lo stesso
catalogo più record con release diversa "; d'altra parte non sono un
indovino e non posseggo una sfera di cristallo.
Se c'è una cosa che mi manda letteralmente in bestia è lavorare a vuoto per
colpa della poca chiarezza degli altri, e pertanto non ho alcuna voglia di
buttare via altro tempo per modificare la mia soluzione, in quanto magari
potrebbe dimostrarsi ancora inutile, visto che tu ti potresti essere
dimenticato di raccontarci altri particolari del tuo problema.
Comunque penso che sarai certamente in grado di adattare la mia soluzione:
per farla funzionare come vuoi tu è sufficiente modificare adeguatamente i
criteri del metodo FindFirst e poche altre cose.
D'altra parte penso tu sia d'accordo che non sempre si può sperare di
ricevere la pappa pronta: arrivati ad un certo punto è bene studiare un po'
Access.


 Giuseppe


 ha scritto nel messaggio
news:jjIWb.2255$Kc3....@twister2.libero.it...

Chiedo scusa se non sono stato troppo chiaro e mi dispiace che tu pensi
di aver lavorato per niente , molte volte si da per scontato (
sbagliando)alcune cose
che invece andrebbero spiegate .
Io non sono in grado di modificare profondamente le tue istruzioni, perchè
non so programmare,
non sono un professionista,  sono solo un dilettante , però mi dispiace che
tu
pensi che io voglia "la pappa Pronta" ,
credimi per chi ha imparato sulle riviste ,su i libri  con il fai da te ,
nei ritagli
di tempo che il lavoro e la famiglia ti permettono, non è facile , forse
perchè si
vuole fare cose non alla propria portata , io ci ho provato ,
probabilmente ho sbagliato , solo che a questo punto si poteva non rendere
inutile il lavoro già svolto, pazienza.
Grazie ancora per il tempo dedicato
Giuseppe