Newsgroup: it.comp.appl.access
Titolo: Gestione info in memoria

Buongiorno a tutti,
vi scrivo per sottoporvi un quesito.
Vi illustro la situazione sperando di dare sufficienti informazioni:
Ho creato delle maschere per l'inserimento, modifica e cancellazione
di alcuni prodotti. Queste maschere hanno anche una casella di
riepilogo che permette di aprire, in una nuova maschera, la distinta
basa di ogni prodotto.
Nella maschera principale (chiamamola Anagrafica) ho inserito anche il
bottone modifica che permette di aprire la maschera in modifica e di
inserire maggiori informazioni riguardo le distinta base del prodotto
ed il tasto annulla che sia in fase di inserimento che in fase di
modifica permette di annullare le informazioni inserite e quindi va ad
operare su due maschere e più tabelle.
Nel caso di un nuovo inserimento non ho alcun problema nel senso che
con i controlli .dirty ed affini riesco tranquillamente a gestire il
tutto.
Il problema che non so come gestire è quello nel momento in cui
l'utente apre la maschera in modalità modifica e inserice nuove
specifiche nella distinta base. In questa circostanza oltre ad
annullare le modifiche apportate all'anagrafe, vorrei verificare ed
eventualmente cancellare le nuove informazioni inserite nella distinta
base.
Mi è venuto in mente di fare una SELECT MAX(id) al momento
dell'apertura in modifica della maschera e fare un confronto fra il
MAX(id) attuale e quello precedente, ma le tabelle su cui sto
lavorando non hanno un contatore e trattandosi di un db già in
produzione non posso andare a modificare la base dati.
L'alternativa che mi è venuta in mente è quella di gestire tutto in
memoria e salvare solo al momento in cui viene premuto il tasto salva
ma non so come fare...
Spero di essere stato sufficientemente chiaro... Qualche idea?
PS: Penso che necessiti qualche info riguardo il salvataggio: non
essendo un guru, il salvataggio l'ho gestito in modo molto
casalingo...  nel senso che tutto viene salavto con
"DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, ,
acMenuVer70"
Anche quando (so che non è molto elegante ma funge!!) creato un nuovo
prodotto, vado subito ad inserire la distinta base, da codice faccio
prima salvare il prodotto e poi apro la maschera della distinta base.

 
-- 
ac
y-1=x

 ha scritto nel messaggio 
news:1182853666.5...@q75g2000hsh.googlegroups.com...
Buongiorno a tutti,











[risposta]
Basta un Me.Refresh
Anche quando (so che non è molto elegante ma funge!!) creato un nuovo
prodotto, vado subito ad inserire la distinta base, da codice faccio
prima salvare il prodotto e poi apro la maschera della distinta base.
[risposta]
Io non ho capito se il problema è la cancellazione di record-padri che hanno 
record-figli.
Se c'ho azzeccato, puoi gestire l'evento "prima di cancellare" e verificare 
se per il record-padre ci sono record-figli:
recordFigli = DCount("*","nomeTabella/query","idRecPadre=" & me!idRecPadre)
Se ci sono (recordFigli>0) decidi tu che fare; se scatenare l'eliminazione 
(prima dei figli poi del padre) dei record o annullare l'evento (Cancel = 
true):
if recordFigli>0 then
    msgbox "Ci sono: " & recordFigli & " record-figli da cancellare."
    Cancel=true
end if
Ciao.
-- 
Sergio MAZZA 

 ha scritto nel messaggionews:1182853666.5...@q75g2000hsh.googlegroups.com...

Ciao!!
Prima di tutto grazie per le risposte...
Il problema è un po' più delicato... per come ho strutturato
l'applicazione, quando apro l'anagrafe in modifica oltre a modificare
la scheda padre, posso modificare anche quella figlio, aggiungendo
delle nuove voci... quello che vorrei fare io è tener traccia delle
voci inserite ed eventualmente se la modifica viene annullata
cancellare anche quest'ultime... per capirci:
Scheda madre -> Nome: Pippo
Scheda Figlio -> Nome: Dettaglio1 - Dettaglio2 - Dettaglio3
Apro in modifica:
Scheda madre -> Nome: Pippetto
Scheda Figlio -> Nome: Dettaglio1 - Dettaglio2 - Dettaglio3 -
Dettaglio4 - Dettaglio5
Quello che vorrei è che se annullo oltre a tornare "pippo" mi elimina
anche Dettaglio4 e Dettaglio5, ma non potendo usare un ID non so come
aggirare il problema...
Non mi dispiace la proposta dei due recordset, copiando in uno la
situazione iniziale dell'altro, ma non essendo molto pratico mi sta
riuscendo alquanto difficile...
avete del codice di esempio?
Grazie Mille!!
Marco

 ha scritto nel messaggio news:1182951971.5...@m36g2000hse.googlegroups.com...
Ciao!!
Prima di tutto grazie per le risposte...
Il problema è un po' più delicato... per come ho strutturato
l'applicazione, quando apro l'anagrafe in modifica oltre a modificare
la scheda padre, posso modificare anche quella figlio, aggiungendo
delle nuove voci... quello che vorrei fare io è tener traccia delle
voci inserite ed eventualmente se la modifica viene annullata
cancellare anche quest'ultime... per capirci:
Scheda madre -> Nome: Pippo
Scheda Figlio -> Nome: Dettaglio1 - Dettaglio2 - Dettaglio3
Apro in modifica:
Scheda madre -> Nome: Pippetto
Scheda Figlio -> Nome: Dettaglio1 - Dettaglio2 - Dettaglio3 -
Dettaglio4 - Dettaglio5
Quello che vorrei è che se annullo oltre a tornare "pippo" mi elimina
anche Dettaglio4 e Dettaglio5, ma non potendo usare un ID non so come
aggirare il problema...
Non mi dispiace la proposta dei due recordset, copiando in uno la
situazione iniziale dell'altro, ma non essendo molto pratico mi sta
riuscendo alquanto difficile...
avete del codice di esempio?
Grazie Mille!!
Marco
[risposta]
Una specie di RollBack?
Non hai descritto il "quando" vuoi tornare indietro, o almeno quale evento o condizione permetterà questo; ma andando avanti, io 
penserei a creare una serie di tabelle "specchio" dove inserire i dati "vecchi" e l'operazione eseguita (rimozione o modifica) che 
ha portato alla memorizzazione in queste tabelle.
Io proverei anche a pensare di mettere un campo data/ora che mi permetterebbe di tornare indietro "nel tempo"; ma si va per una 
strada impervia...
Ciao.
-- 
Sergio MAZZA 

 ha scritto nel messaggionews:1182951971.5...@m36g2000hse.googlegroups.com...

Buongiorno!!
Si effettivamente si tratta di un rollback, da effettuare al momento
del click su "annulla".
Leggevo in altri post, che l'uso delle tabelle "specchio" risulta
alquanto pesante, per cui stavo ipotizzando l'uso dei recordset
"specchio", ma come fare?
Grazie ancora
Marco

 ha scritto nel messaggio news:1183367521....@k29g2000hsd.googlegroups.com...
Buongiorno!!
Si effettivamente si tratta di un rollback, da effettuare al momento
del click su "annulla".
Leggevo in altri post, che l'uso delle tabelle "specchio" risulta
alquanto pesante, per cui stavo ipotizzando l'uso dei recordset
"specchio", ma come fare?
Grazie ancora
Marco
[risposta]
L'uso delle tabelle "specchio" non risulta pesante, è l'utilizzo delle funzionalità per gestire il meccanismo che registra tutti (o 
parte) dei movimenti dei record/campi.
I recordset; ammesso sia una scelta utilie, se li utilizzi "in giornata" bene, ma il giorno dopo dove li trovi? In RAM?
Se hai bisogno di un rollback considera il passaggio a un database più evoluto, tipo SQL Express...
Ciao.
-- 
Sergio MAZZA 

 ha scritto nel messaggionews:1183367521....@k29g2000hsd.googlegroups.com...

La mia problematica è un po' più semplice... comunque mi sono appena
confrontato con il cliente che mi ha detto che non ha bisogno di
questo funzionalità...
Mi stavo fasciando la testa prima di essermela rotta!!!
Grazie mille comunque per l'aiuto e la disponibilità!!
Ciao
Marco