Newsgroup: it.comp.appl.access
Titolo: Mantenere i dati elaborati

Buon giorno N.G.
Come posso Risolvere un grave (per me) problema di conservazione del dato 
elaborato:
Cerco di spiegarmi; ho creato una applicazione per la formulazione di 
preventivi con relativa forms e sottomaschera  i dati vengono divisi in due 
tabelle, una alla testata del preventivo, l'altra hai prodotti del 
preventivo. E qui tutto ok. Adesso mi sono trovato nella necessità di 
aggiornare la tabella Prodotti circa 345.000 e con mio grande stupore mi 
sono accorto che dopo l'aggiornamento i dati preventivi che avevo fatto che 
a suo tempo erano giusti, adesso dopo l'aggiornamento risultano tutti 
sbagliati. senz'altro ho sbagliato nella progettazione, posso chiedere come 
evitare questo.
Grazie per l'aiuto
Carlo
;-))))))
--------------------------------------------------------------------------------
La mia Cartella di Posta in Arrivo è protetta con SPAMfighter
1249 messaggi contenenti spam sono stati bloccati con successo.
Scarica gratuitamente SPAMfighter! 


Ehm...
ma tu che vuoi?
Cioè...
vuoi recuperare i vecchi dati giusti?
vuoi che ti venga detta una procedura di modifica che sia giusta, senza
spiegare la struttura dati del tuo applicativo?
o cosa?
Antonio

È vero,
la cosa non é semplice da spiegare, ma ci provo:
la mia struttura si poggia su di un archivio dati [Tabella Prodotti (2) ] 
che pesca i dati una "tabella collegata" che chiamo TAB(1).
La TAB(1) viene generata tramite una procedura composta da 3 archivi DB5 che 
messi in Joint tra di loro tramite Query vanno a generare il listino. Una 
query cancella i dati vecchi  nella TAB(1) e una query lva a riscrivere la 
TAB(1) con i nuovi dati e credo che un problema sia qui.
La taballe Prodotti(2) é collegata alla TAB(1)
La struttura della TAB(1)
IDProdotto [Contatore] [CampoChiave]
Codice     [Testo]
Descrizione [Testo]
Marca   [Testo]
Listino [Valuta]
PrezzoNetto [Valuta]
Sconto [Testo]
 la Struttura della tabella PRodotti(2) essendo collegata ha le stesse 
caratteristiche eccetto il campo chiave (credo che lo erediti dalla tabella 
al quale si collega)
Mentre la truttura della sottomaschera su una query che mette in Joint 
[tblTestata_Preventivo] - [TabellaProdotti(2)] - [Dettaglio_preventivo] - 
[Tbl_Clienti].
I campi della sottomaschera sono gli stessi della tabellaProdotti(2) che 
sostanzialmente generano il preventivo
LA combo della sottomaschera punta sul IDProdotto
adesso mi chiedo come posso ovviare al problema di cancellare la TAB(1) ma 
fare solo l'aggiornamento e la eventuale aggiunta di articoli qualora ce ne 
fossero di nuovi ? visto che parliamo di circa 350.000 record?
Spero di essere riuscito a spiegare la mia procedura
Grazie per la risposta
Carlo
;-))


 messi in Joint tra di loro tramite Query vanno a generare il listino. Una
Mi immagino la scena di questi 3 archivi che fanno sto festino con le
canne... :-PPP

Allora.
Due problemi distinti:
1) aggiornamento della tab1
2) allineamento con quanto già salvato
1)
Tabella vecchia: la tab1 già esistente
Tabella nuova: una o più tabelle che ti forniscono l'aggiornamento della
tab1.
Se a priori non sai cosa viene aggiornato nella tabella vecchia, cioè quali
campi, l'unico modo è quello di fare una query che metta in JOIN sul campo
chiave la vecchia tabella prodotto e quella nuova, e fare l'aggiornamento di
tutti i campi vecchi con i corrispondenti nuovi. Dove non è cambiato niente
sovrascriverà lo stesso valore ma chissenefrega.
Per le aggiunte, farai una query di accodamento dalla nuova alla vecchia.
mettendo in join su campo chiave, con freccia verso la tab vecchia e
mettendo poi come criterio sotto il campo chiave della vecchia is null
In questo modo accoderà tutti i record che hanno ID non già esistente nella
tab vecchia.
2)
Per il caso delle aggiunte di nuovi record nella tab1 poco importa.
il problema è quando tu fai una modifica, ma qui diventa un problema
squisitamente filosofico/gestionale.
Faccio un esempio:
tu hai un listino prezzi e sulla base di questo vendi un prodotto. Prendi il
prezzo e questo è 100 euro. Salvi la vendita
Se dopo questa transazione, il listino prezzi cambia e quel prodotto costa
120 euro, tu che fai? aggiorni la vendita con 120 o la lasci a 100 e solo le
successive vendite saranno a 120?
Direi che la soluzione corretta è la seconda, no?
Dove è l'inghippo?
Che se tu quando salvi la vendita, salvi SOLO l'ID del prodotto, recuperando
tutte le altre informazioni del prodotto stesso con una query quando stampi
fattura o visualizzi la transazione, quello che prima era 100, dopo diventa
120, perchè non hai salvato i dati dello stato del listino al momento della
transazione.
Come si fa allora in questo caso?
Si usa una tabella transazioni:
lì dentro ci salvi tutti i dati variabili del listino al momento della
transazione. In questo modo, quando recuperi la transazione, trovi tutti i
dati del momento, anche se nel frattempo il listino è cambiato.
Se questo era il tuo problema, direi che questa è la soluzione
Antonio