Newsgroup: it.comp.appl.access
Titolo: Blocco record con SQL express

Ciao a tutti, una domandina.....quando ero con jet usavo l'impostazione
'blocco record modificati' per impedire le modifiche contemporanee. Quando un
utente era in edit su una form, il secondo utente non poteva digitare nulla
(ci pensava jet). Con SQL server questa impostazione non funziona pi� (cos�
appare...)? C'� qualche altra maniera per gestire la cosa con il motore SQL?
Grazie mille
Roberto
-- 
Questo articolo e` stato inviato dal sito web 
http://www.nonsolonews.it

 Roberto
Apri un argomento vastissimo.
Le transazioni.
Ci sono diversi livelli di isolamento e tipi di blocco che possono essere 
pessimistici e ottimistici.
Il pi� basso si chiama adChaos
Nel tuo caso penso basterebbe adReadCommitted.
Ripeto � molto vasto e richiede un tuo approfondimento personale.
Questo � il mentor indiscusso 
http://www.solidq.com/insidetsql/resources.htm
Ciao
Daniele 


Grazie per il link. Le transazioni gi� le uso diffusamente (sia in ambiente
mdb [per quanto pu�] che ora con SQL server). La mia intenzione era bloccare
il secondo utente PRIMA che facesse altre modifiche...come usavo fare con jet
(tecnica nn proprio perfetta il blocco record, ma cos� isolato nn mi dava
grossi problemi). Cmq studio...nn si finisce mai.....Thanks



Il blocco PRIMA ti impedisce di eseguire le letture e questo � un disastro 
in alcune situazioni.
Ti suggerisco la lettura ripetibile che innesca il blocco solo dopo un 
aggiornamento impedendo ad un'altra transazione una sovrapposizione
Ciao 


Chiaro, ma forse non sono stato chiaro io........
Usavo questo: apro il record in Edit (maschera a parte). Se un altro utente lo
apre nella stessa form � readonly
tutto qua. Ma leggo tutto ora.......



Sai che cosa mia "svelato" il buon Andrea Montanari?
Che molte volte ci fasciamo la testa impostato i blocchi e gli isolamenti.
Il blocco alla fine � di tipo logico e non fisico.
Mi spiego.
Dai la possibilit� ad entrambi gli utenti di aprire lo stesso dataset, nella 
tabella c'� un timestamp (per il controllo di versione)
Il primo vince. Il primo esegue una modifica e di conseguenza fa aggiornare 
il timestamp.
Il secondo tenta di aggiornare il record ma gli verr� restituito che la 
versione della riga � stata modificata da un altro utente.
A questo punto l'applicazione pu� decidere quello che gli pare.
Nel tuo caso impedire che il secondo effettui la modifica.
Un terz utente potr� eseguire tutte le statistiche su quel data set.
Geniale, no?
Ciao
Daniele 



Assolutamente!!!!!!!! E infatti gestisco tutto cos� di solito!
Solo che (mannaggia a me) per una perticolare form con mooooooooooolti campi
ho usato (cosa che nn faccio mai) una maschera 'legata' .... e qua sta tutto
il problema della contemporaneit� .....la famosa finestrella di Access che
vorrei evitare...il mio � un vezzo xch� l'integrit� dei dati � garantita dal
motore stesso, quindi problemi nn ce ne sono in realt�....speravo di ricevere
una exception gestibile piuttosto che l'avviso.....ma tant'�.....



Te la cerchi :-)
Bh� se � in binding vale lo stesso.
E poi, non se se con la express sia possibile, ma c'� l'interessante 
updated_column
Ciao


Toglimi una curiosit�.
Sei riuscito a trovare un metodo decente, ma veramente decente, per 
confezionare stored procedure per le operazioni CRUD?
Qualcosa di meno architettonico no riesco ancora a farlo. Colpa degli ado 
com.
Ciao 


Non uso mai ADO......nel senso che pr quello che devo fare preferisco
DAO...ADO l'ho utilizzo solo in qualche applicazione web, e comunque niente di
+ che delle banali INSERT, UPDATE o SELECT.....
Non ho capito bene cosa intendi per CRUD (la tavola x la gestione degli
accessi???) ma se mi dici cosa devi fare magari mi � capitato.....
Poi l'ultima: cosa intendi con 'se binding va bene uguale'?????
Mi sa che questa nn l'ho capita!!!!!!!
A presto
Ciao
Roberto


 Roberto
Ciao 


Credo sia CRUD (Create Read Update Delete) x� in riferimento ai permessi di
accesso......se nn ho capito male....Non ha mai approfondito la questione
delle permission fino a questo punto...nn mi � mai servito finora......per
quanto riguarda il binding, so cosa vuol dire ma nn ho capito cosa intendi tu
in questo caso!!! ;)
La form ha come origine dati l'SQL che gli appioppo onthefly sul
caricamento...sono abituato a lavorare in 'non associato' per poter gestire a
modo update e insert, in ambiente non mdb nn sono ancora un espertone (in
access invece...... ;) ) e mi trovo in difficolt� per delle puttanate
probabilmente.....


 delle puttanate probabilmente.....
In pratica "depositi" sul tuo mdb e "ragioni" in modo (ma s� abusiamo i 
termini) "disconnesso"
Per me per parecchio tempo � stata l'unica via di uscita per digerire un db2 
maltenuto.

Consiglio a tutti, sommessamente, il "semaforo" fatto in casa da Lupo
-- 
Greg 

 Consiglio a tutti, sommessamente, il "semaforo" fatto in casa da Lupo
Ciao a proposito di semafori....
proprio un istante fa ho aperto un 3d su microsoft.public.it.sql sui 
semafori... sarebbero da valutare le potenzialit�
Daniele


Se per semafori intendete una tab d'appoggio da usare, appunto , come semaforo
(o un campo boolean nella tab incriminata) � una vecchia tecnica, valida, ma
che espone a diversi problemi.....il primo dei quali � spostare il cruccio
della contemporaneit� dalla tabella in questione ad un'altra tabella....nn
risolve il problema...lo argina....Cmq i motori dei db DEVONO fare il loro
lavoro.....sono righe di codice in + altrimenti.....si sa, in informatica,
come da ogni altra parte, quel che non c'� non si rompe!!!!!
Per rispondere a Daniele, lavoro SEMPRE 'disconnesso' (sisi, lo so, sono
masochista....)!!!!!! Un po' x abitudine e un po' xch� avevo imparato
cos�...questo � un caso di 'pigrizia'.....60 e + campi in una form....la sola
idea di fare un UPDATE dinamico (gi� sono diventato + scemo di quanto non sia
gi� x l'INSERT), costruendo la query runtime, controllando i tipi di dato, i
null e quant'altro mi ha fatto desistere......ecco il perch� delle mie
richieste....nulla di male nella finestrella "attenzione!!!!!!!'Cidenti, ma nn
vedi che un altro utente ha aperto e modificato il record PRIMA di te?!?!?!?!
Allora??? Come la mettiamo??!??!?"....volevo solo personalizzarla :)



Purtroppo anche io non ho scelte.
Sono pi� i problemi che ho con il binding (il db non � strutturato da me... 
per ora) di natura sempre connesso che vantaggi effettivi, perch� ad esempio 
la gestione degli errori � snervante e alcune volte incontrollabile. E qui 
pare che mooolto prima di .net abbiamo scoperto cosa significa lavorare 
disconnessi. Ma non voglio dilungarmi perch� � mia natura rispettare tutti i 
punti di vista.
Per quanto riguarda i costrutti dinamici in pratica sposti tutta la logica 
business sulla tua applicazione client... e anche quella si rompe ;-)
Hai valutato gli svantaggi derivanti dal fatto che metti in difficolt� 
l'ottimizzatore di sql?
Hai valutato che richiede la manutenzione diventa pi� complessa?
Immagina cosa significa una piccolissima modifica fiscale. Devi inventarti, 
ad esempio, un trigger instead of al volo, finch� tutti i client non sono a 
posto e poi lo disabiliti... lavoraccio.
E' probabile che abbia fatto questa valutazione perch� non ho compreso 
appieno, quindi perdona la mia ipotesi ;-)
Ho una visione pi� centrista sul server, per� sono il primo ad essere 
seccato quanto per motivi di logical business o violazione di chiss� 
cos'altro il server DOPO l'invio dei dati mi comunica pacificamente che non 
se pu�! ... Magari a saperlo prima.... per cui non disdegno di "distribuire" 
le elaborazioni tra server e client.
Difatti la tecnica alla quale sono costretto a ricorrere � far raffinare i 
dati da access dopo averli richiesti pass-through perche sul db non ho 
controllo, ma questa � un'altra storia.
Ciao
Daniele 


Una vera applicazione client\server dovrebbe avere praticamente TUTTO lato
server (minor traffico di rete, coerenza dei dati assicurata, minor
manutenzione......) ma ci si arriver� pian pianino....la mia applicazione
nasce su mdb ed � stato fatto un porting su SQL, quindi i vari upgrade stanno
procedendo un po' alla volta, chiaramente....stavo solo cercando di perdere le
'cattive' abitudini, a cui il SantoAccess ci ha abituati....



L'� dura 

 SQL?
Sinceramente non capisco per quale ragione voler impedire la modifica 
contemporanea di records.
Forse non ti piace la mascherina che appare?
In tal caso dovrebbe essere possibile bypassarla gestendo l'evento "Su 
errore" della Form.
Una cosa tipo:
Private Sub Form_Error(DataErr As Integer, Response As Integer)
   If DataErr = <Codice Errore>  Then Response = acDataErrContinue
End Sub

Massimiliano Bertoglio ha scritto:


Mi piacerebbe....ma la 'mascherina' nn � un errore....nn posso
intercettarlo!!!!!!! Almeno credo.....


 intercettarlo!!!!!!! Almeno credo.....
?
Devi utilizzare l'evento "Su errore" della Form.
Basta che in un Msgbox ti faccia restituire il valore di DataErr (mi pare 
che sia 7787 o qualcosa del genere, su questo PC non ho SQLSvr per 
verificare).
Saluti domenicali.

Massimiliano Bertoglio ha scritto:

Grazie per la dritta, nn lo sapevo......provo subito e do feedback
Roberto


> per verificare).
L'errore � proprio quello, ma guarda un po' qui 
http://www.microsofttranslator.com/BV.aspx?ref=CSSKB&from=en&to=it&a=http://support.microsoft.com/kb/304181/en-us?fr=1
se ti pu� essere utile
Francamente non comprendo perch� � stato scelta l'intercettazione dei due 
eventi attivazione/disattivazione.
Comunque l'errore 7787   � un errore runtime di Access specifico per i 
conflitti di scrittura.
Ciao



Visto, stessa perplessit� tua sul deactive...ma anche sul forzare il
salvataggio! Mo faccio prove e fo sapere!!!!! Grazie mille!


[MAGACUT]
Do feedback della risoluzione del problema (credo...)
Nn so perch� ma ora tutto funziona perfettamente........nel senso:
- da client1 apro il record in modifica 
- da client2 apro lo stesso record in modifica 
- da client1 lo modifico e chiudo
- da client2 provo a modificare il record ma, requery automatico (che riflette
le modifiche del client1)e pop up che mi dice che il record � stato gi�
modificato e mi chiede di modificarlo di nuovo....
Ripeto, nn ho idea del perch� (qualche settaggio di Access mi sa...indagher�)
ma cos� lo scopo sarebbe raggiuno......
