Newsgroup: it.comp.appl.access
Titolo: Modifica Contemporanea Record: PROBLEMA RISOLTO!

Non ci credevo nemmeno io. Botta di @@@@ allucinante alle 02.00 di
questa notte...lo avevo promesso, non ci avrei dormito pur di venirne a
capo...e così è stato. Ma andiamo con ordine.
Riassumendo: dato un record salvato, qualora un utente decideva di
modificarne dei valori, alla prima modifica Access mostrava un
messaggio in cui comunicava che un altro utente aveva effettuato delle
modifiche al record mentre il record era ancora aperto, e chiedeva cosa
fare: Salvare il record, Copiare le modifiche negli appunti, Non
salvare il record. Se l'utente cliccava su 'Salva il record' il
database veniva rovinato in maniera irreparabile causa sovrascrittura
dati preesistenti, cancellazione indici / chiavi primarie e via
dicendo.
Per una settimana sono stato dietro questo problema che per un pelo non
mi ha costretto a coinvolgere una terza persona nel progetto (avevo
pure mandato una email al responsabile, annullata questa notte con un
sms :D).
Insomma...all'una decido di testare tutte le release del database,
dalla più vecchia che ho a quella corrente, per vedere da quale
versione in poi nascesse il problema. E così ho potuto constatare che
il problema nasceva dalla versione 0.97i, versione in cui aggiungevo la
possibilità di Aggiungere/Vedere/Eliminare i CV via HyperLinkAddress.
La versione immediatamente prima non aoffriva di questo problema. Da
quella in poi, invece, tutte.
Quindi evidentemente quella modifica aveva in qualche modo incasinato
qualcosa da qualche parte, ma cosa? Inizio a fare delle prove. Il
problema si presenta sempre. E sempre quando, effettuata la modifica,
cambio scheda (una scheda del controllo a schede contiene una
sottomaschera)e torno a subSchedaPrimoContatto. Quindi il codice
incriminato deve trovarsi tra questi due eventi: tra l'aggiornamento
delle sottomaschere e il tornare a subSchedaPrimoContatto. Mi convinco
che il problema sia nell'evento Current() di subSchedaPrimoContatto ma
non vedo codice particolarmente strano... solo il refresh di
NumeroIntervento (che non funziona più tra le altre cose), il
settaggio del focus el controllo Nome, e...beh l'assegnazione di un
valore all'interruttore in base al valore di CurriculumLink; la riga
è:
ccCVAllegato = Not (CurriculumLink="")
ovvero assegna all'interruttore il valore vero solo se il campo
CurriculumLink non è una sringa vuota.
Commento tale riga. RISOLVO IL PROBLEMA.
Rimango di sasso per svariati minuti. Faccio prove si controprove.
Problema risolto. PROBLEMA RISOLTO! Ogni volta che decommento tale riga
il problema riappare. Ogni volta che decommento tale riga il problema,
finalmente, scompare.
Il problema era questa riga, posta sull'evento Current() della
sottomaschera subSchedaPrimoContatto:
ccCVAllegato = Not (CurriculumLink="")
in pratica, vado ad intuito, l'assegnazione implicita del valore al
campo CurriulumLink tra le parentesi tonde era considerato da Access
come una modifica al recordset.
Ora immaginatevi la mia sorpresa. Tutto mi sarei immaginato, tranne una
cosa del genere. Cercavo INSERT INTO/UPDATE sparsi ovunque nel codice,
invece il problema era questa assegnazione implicita.
Il problema lo da anche un'altra serie di righe di codice, che quella
riga di cui sopra aveva sostituito (qualcuno si ricorderà il thread):
If IsNull(CurriculumLink) Or (CurriculumLink = "") Then
    ccCVAllegato = 0
Else
    ccCVAllegato = -1
End If
In sostanza, la presenza del campo CurriculumLink nell'evento Current()
della sottomaschera subSchedaPrimoContatto fa credere ad Access che vi
sia una modifica in atto al recordset mentre il recordset è aperto.
PERCHE'?
In definita, tutto bene quel che finisce bene. Adesso il database è
tornato ... *tranquillo* come prima, oggi lo porto in ufficio e glielo
mollo...ho ancora sette giorni per aggiungerci cose dentro, poi credo
mi prenderò qualche giorno di riposo.
Però io vorrei capire questo assurdo mistero che non mi ha fatto
dormire per una settimana.
Avete idee?
Buona giornata!

 ha scritto nel messaggio
news:1119505421....@z14g2000cwz.googlegroups.com...
Non ci credevo nemmeno io. Botta di @@@@ allucinante alle 02.00 di
questa notte...lo avevo promesso, non ci avrei dormito pur di venirne a
capo...e cosě č stato. Ma andiamo con ordine.
Riassumendo: dato un record salvato, qualora un utente decideva di
modificarne dei valori, alla prima modifica Access mostrava un
messaggio in cui comunicava che un altro utente aveva effettuato delle
modifiche al record mentre il record era ancora aperto, e chiedeva cosa
fare: Salvare il record, Copiare le modifiche negli appunti, Non
salvare il record. Se l'utente cliccava su 'Salva il record' il
database veniva rovinato in maniera irreparabile causa sovrascrittura
dati preesistenti, cancellazione indici / chiavi primarie e via
dicendo.
Per una settimana sono stato dietro questo problema che per un pelo non
mi ha costretto a coinvolgere una terza persona nel progetto (avevo
pure mandato una email al responsabile, annullata questa notte con un
sms :D).
Insomma...all'una decido di testare tutte le release del database,
dalla piů vecchia che ho a quella corrente, per vedere da quale
versione in poi nascesse il problema. E cosě ho potuto constatare che
il problema nasceva dalla versione 0.97i, versione in cui aggiungevo la
possibilitŕ di Aggiungere/Vedere/Eliminare i CV via HyperLinkAddress.
La versione immediatamente prima non aoffriva di questo problema. Da
quella in poi, invece, tutte.
Quindi evidentemente quella modifica aveva in qualche modo incasinato
qualcosa da qualche parte, ma cosa? Inizio a fare delle prove. Il
problema si presenta sempre. E sempre quando, effettuata la modifica,
cambio scheda (una scheda del controllo a schede contiene una
sottomaschera)e torno a subSchedaPrimoContatto. Quindi il codice
incriminato deve trovarsi tra questi due eventi: tra l'aggiornamento
delle sottomaschere e il tornare a subSchedaPrimoContatto. Mi convinco
che il problema sia nell'evento Current() di subSchedaPrimoContatto ma
non vedo codice particolarmente strano... solo il refresh di
NumeroIntervento (che non funziona piů tra le altre cose), il
settaggio del focus el controllo Nome, e...beh l'assegnazione di un
valore all'interruttore in base al valore di CurriculumLink; la riga
č:
ccCVAllegato = Not (CurriculumLink="")
ovvero assegna all'interruttore il valore vero solo se il campo
CurriculumLink non č una sringa vuota.
Commento tale riga. RISOLVO IL PROBLEMA.
Rimango di sasso per svariati minuti. Faccio prove si controprove.
Problema risolto. PROBLEMA RISOLTO! Ogni volta che decommento tale riga
il problema riappare. Ogni volta che decommento tale riga il problema,
finalmente, scompare.
Il problema era questa riga, posta sull'evento Current() della
sottomaschera subSchedaPrimoContatto:
ccCVAllegato = Not (CurriculumLink="")
in pratica, vado ad intuito, l'assegnazione implicita del valore al
campo CurriulumLink tra le parentesi tonde era considerato da Access
come una modifica al recordset.
Ora immaginatevi la mia sorpresa. Tutto mi sarei immaginato, tranne una
cosa del genere. Cercavo INSERT INTO/UPDATE sparsi ovunque nel codice,
invece il problema era questa assegnazione implicita.
Il problema lo da anche un'altra serie di righe di codice, che quella
riga di cui sopra aveva sostituito (qualcuno si ricorderŕ il thread):
If IsNull(CurriculumLink) Or (CurriculumLink = "") Then
    ccCVAllegato = 0
Else
    ccCVAllegato = -1
End If
In sostanza, la presenza del campo CurriculumLink nell'evento Current()
della sottomaschera subSchedaPrimoContatto fa credere ad Access che vi
sia una modifica in atto al recordset mentre il recordset č aperto.
PERCHE'?
In definita, tutto bene quel che finisce bene. Adesso il database č
tornato ... *tranquillo* come prima, oggi lo porto in ufficio e glielo
mollo...ho ancora sette giorni per aggiungerci cose dentro, poi credo
mi prenderň qualche giorno di riposo.
Perň io vorrei capire questo assurdo mistero che non mi ha fatto
dormire per una settimana.
Avete idee?
Buona giornata!
Ciao Giulio,
sono contenta che tu abbia sbrogliato la matassa, questo problema ormai non
faceva piů dormire nessuno qui nel NG :-)
Io non ho mai visto il tuo db per cui posso solo andare ad intuito ma
secondo me il problema non č l'istruzione  (curriculumLink= "") che non
contiene nessun assegnamento implicito,  a fare il casino ma l'assegnamento
precedente cioč ccCVAllegato =  ....     in pratica tu cosě cambi il valore
di un campo ccCVAllegato e questo dava origine al messaggio che due utenti
avevano modificato lo stesso record...
Saluti
Cinzia

 avevano modificato lo stesso record...
Tuttavia non si capisce bene perchè gli corrompesse il DB:  mah...

Ciao Cinzia, il bello è che ccCVAllegato NON era un campo :) ma solo
un controllo e basta NON associato ....

"Giulio Severini"
Perchè non fornisci le istruzioni per riprodurre il problema in una form di
northwind.mdb?
Ciao.

 northwind.mdb?
O.o ... per il semplice motivo che non ho la più pallida idea del perchè
quelle righe dessero quel problema. Ho un documento word in cui mostro
passo passo come ottenerlo ma senza il database non serve a niente...
Magari Sandro se oggi legge il ng potrà spiegarvi....ieri sera gli ho
mandato il db ed il doc word...
-- 
Non avere mai paura dei momenti bui perchè, facci caso, anche le stelle
hanno bisogno della notte per brillare - Non aver paura d'esser debole
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 mandato il db ed il doc word...
Ciao Giulio,
ieri sera prima di andare a nanna ho dato un'occhiata veloce ( anche
superficiale se vuoi) al tuo db.
Secondo me hai troppi recordset aperti che ti incasinano il tutto ;-).
Allora hai una maschera con un recordsource, poi apri un dao recordset  su
click di un command button, sulla tabella che ti fa da recordSource della
form che hai aperto (sulla stessa tabella per intenderci)
Sull'evento click di quel command button, apri una seconda form che ha
nuovamente lo stesso recordSource della form chiamante, che contiene una
struttura a schede con una subForm che ha lo stesso recordsource della form
pricipale (questa che hai aperto, e all'interno di questa form principale,
apri nuovamente un dao  recordSet  nuovamente sulla stessa tabella,
recordsource della form principale e della subForm e della form chiamante.
E poi non liberi mai le risorse settando a nothing le variabili oggetto e i
recordset restano aperti in memoria.
Secondo me, è questo che crea quel problema della richiesta di Access di
salvare il record.
La soluzione sta probabilmente nel cercare di passare quegli argomenti tra
la form chiamante e quella chiamata sfruttando la clausola where di openform
o openArg.
Semplicemente : prova a creare una tabella, su questa crei una query di
selezione con recordset aggiornabile, prova quindi fai una modifica a un
record della tabella e sullo stesso record nella query  che hai aperto, poi
chiudi la tabella, poi chiudi la query... eccoti quel bel messaggio.
Adesso però ci dedico il tempo che occorre e vedo se riesco a metterlo a
posto.
Ti ho scritto sul Ng per dare qualche indicazione un po' a tutti, non si sa
mai che intervenga qualcuno per darci qualche dritta. !!
Ciao Giulio, spero a presto.

Ciao Sandro....in realtà il problema l'ho risolto. Per quanto riguarda
quanto tu dici....sinceramente non so come affrontare la cosa. Il db
funziona....questo è importante....qui non si è avuto abbastanza
tempo per pianificare le cose a modo e chi mi ha seguito in questi due
mesi se ne sarà accorto :) tieni anche conto che ero praticamente un
novizio assoluto in Access.... :D

novizio assoluto in Access.... :D
Spero che tu non abbia preso questo mio intervento come un critica ! Non
volevo assolutamente che fosse interpretato in questo modo ;-)). Ho espresso
un parere in modo magari da far intervenire Simone  e Cinza che mi sembra
siano Professional Developer al contrario di me che sono un semplice
amatore. I loro suggerimenti valgono mooolto più dei miei, sono (loro)
estremamente competenti !
Se poi tu sei novizio e ti consideri alla prima pagina del manuale di
Access, io penso di essere alla prima e 1/2 :-).
Ciao Giulio, un'occhio al tuo db ancora ce lo do. In bocca al lupo per la
tua situazione lavorativa.
Ciao, buona serata.
Sandro.

 ha scritto nel messaggio
news:1119546212.6...@g14g2000cwa.googlegroups.com...

uhmmmm,
vista la situazione descritta da Sandro, correggerei in "oggi il db
funziona..., speriamo funzioni pure domani!"
Cinzia

"Giulio Severini" <
...

Permittimi un parere: se non è possibile riprodurre in maniera semplice il
problema che hai incontrato (troppo particolare) è verosimile che altri
latenti siano in attesa ... magari quando avrai necessità di condividere
l'mdb tra più utenti.
Ciao.

Hey ragazzi.....ma non vi preoccupate io nn mi offendo mai, ci
mancherebbe :)
Sandro...mi farebbe piacere se tu dessi una *profonda* occhiata al mio
db, se c i mettessi le mani sopra, se aggiustassi le cose che non vanno
che, sono sicuro, sono molte. Però come detto, io penso di aver fatto
tutto quello che uno nelle mie condizioni poteva fare, anzi anche di
più. E il db funziona. Poi, ovviamente, se ci sarà occasione ci
metterò le mani sopra reingegnerizzandolo come si deve. Ma prima di
far questo dovrò finalmente concedere qualche ora al sonno, e tutte le
altre allo studio :)

Cinzia, Sandro :) sono daccordo ma lo stiamo testando in ogni dove e in
ogni come...va...va come deve andare...
Se volete vi mando la copia più aggiornata. Mandatemi una email
all'indirizzo che vedete nei particolari del post.
Una cosa però vi chiedo :) scrivetemi indietro suggerimenti e
critiche...perchè ne ho estremo bisogno!!!!!!!!

Ciao Giulio, non pensi sia giusto che il tuo db vengo messo a
disposizione del NG?
Gradirei sapere che ne pensi.
Ciao
Andrea Parrino

Mi coglie di sorpresa questa tua domanda. Soprattutto in merito a
quanto ho già espresso in precedenza. Il database è già a
disposizione del ng, l'ho spedito al SitoComune, e se Roberto gradirà
gli spedirò anche le versioni aggiornate.

>Il database è già a disposizione del ng
Scusami Giulio, se non erro nel SC non è stato pubblicato ancora, e se
Roberto per un motivo o per un altro non lo pubblicasse, ciò
significherebbe che il NG non ne potrà usufruire, giusto?
Scusami la franchezza, ma è solo per capire.
Ciao
Andrea Parrino

cmq te lo posso mandare, no problem....basta che mi mandi l'email in
privato (negando l'affermazione fatta nel precedente post che non
vorrei doverlo spedire via email a tutti....)

... veramente ce l'hanno anche altre persone ma scusami....non penserai
che io metta a spedirlo via email a uno a uno chiunque me lo
chiederà!??!?! spero di no!! ;)
mi si sta scaricando il cell, navigo via UMTS a domani così ne
parliamo meglio e con più calma. chi vuol intervenire intervenga...

Ciao Giulio ti ho girato una e-mail in pv.
Aspetto tue notizie.
Ciao
Andrea Parrino

Ti ho scritto in email.

Grazie, avrai presto il mio modestissimo, parere in merito.
Grazie tanto.
Con simpatia
Andrea Parrino