Newsgroup: it.comp.lang.visual-basic
Titolo: (VB6 - DAO - ACCESS)    COMMIT?

Se non  ricordo male le variazioni sul database
non sempre vengono apportate subito "effettivamente".
A volte rimangono in una "memoria" e solo di tanto
in tanto il database viene effettivamente variato.
Per esempio in clipper esiste il comando
COMMIT
che forza l'aggiornamento sul disco.
Questo evita dati incongruenti in caso di
spegnimento accidentale del PC.
Sapete se esiste un comando analogo per VB6;
oppure il problema suddetto non esiste?
Grazie e saluti.
Sauro

 oppure il problema suddetto non esiste?
AFAIK DAO su Access ha la COMMIT automatica, transazioni a parte,
dove sono previste le istruzioni BeginTrans, CommitTrans e RollbackTrans.
-- 
ciao, hal

 
DBEngine.idle dbrefreshcache
Vedi la guida per capire esattamente cosa fa.
ciao
	maxx
-- 
NOSPAM: Rimuovere i trattini dallo username!
Cut hyphens from my username!

 maxx
Secondo hal non sarebbe necessario.
Comunque andrò a vedere la guida.
Grazia e ciao, Sauro

 ciao, hal
Grazie; sauro


Access ha una cache che potrebbe arrivare ad un massimo di 2 secondi, per
cui potresti non avere i dati immediatamente scritti su disco.
con
DBEngine.idle dbrefreshcache
forzi la scrittura su disco.
Ciao

 Ciao
Tutto chiaro.
Io faccio programmi per piccole aziende e, se
lo "sfasamento" e di soli 2 secondi, posso quindi
disinteressarmi del problema perchè lo avrei
comunque messo solo alla fine della registrazione
di un intero documento (fattura, ordine, commessa, ecc.).
Grazie e ciao, Sauro

 di un intero documento (fattura, ordine, commessa, ecc.).
In questo caso dovresti usare le transazioni per non rischiare dati
incongruenti.
Ciao

 Ciao
Si Fabio, hai ragione.
Però non ne sono pratico e considera che io
lavoro cosi':
- Memorizzo tutto su delle variabili
- Quando l'utente conferma l'operazione
- Faccio tutte le scritture sul database per
   l'intero documento.
Certo che potrebbe mancare la corrente
a metà di quei pochi secondi, però ...
Ciao, Sauro

 a metà di quei pochi secondi, però ...
Se mancasse la corrente, e magari ci fossero piu' client collegati,
i problemi potrebbero riguardare l'intero mdb, a prescindere dalla
tua transazione :-(
-- 
ciao, hal

 a metà di quei pochi secondi, però ...
Stai certo che se dovesse mancare la corrente mancherà proprio durante quei
2 secondi :)
L'uso delle transazioni è banale:
dbengine.BeginTrans
' operazioni sul DB
dbengine.Commit
in caso di errore per annullare la transazione anzichè la Commit userai la
Rollback
Comunque sì, se ti manca la corrente su un mdb... prevedi backup frequenti
ed un'utility di ripristino del db.
Eventualmente considera di passare a MSDE, senza andare su SQLServer.
Ciao
-- 
NeoDataType : 
http://www.neodatatype.net
Sito Comune : 
http://www.it-lang-vb.net

 ciao, hal
Hai senz'altro ragione.
La SUB che segue ti sembra corretta?
Private Sub TrattaDB()
   On Error GoTo TrattaDB_Error
    Work.BeginTrans
    Call ScriviORDINI        'Tratta la Testata
    Call ScriviDETORD        'Tratta il Dettaglio
    Work.CommitTrans
    MsgBox "Inserito/Aggiornato ordine " & ORDINE
   On Error GoTo 0
   Exit Sub
TrattaDB_Error:
    Work.Rollback
    MsgBox "Error " & err.Number & " (" & err.Description & ") in procedure
TrattaDB of Form frmOrdini"
End Sub
Visto che sembri esperto avrei un paio di cosette
da chiederti sulle LOCK.
Hai qualcosa in contrario se ti mando una eMail
direttamente per non intasare il NG ?
Ciao hal e grazie.
Sauro

 Ciao
Non avevo ancora letto il tuo post quando ho risposto
ad hal.
Sto lavorando con VB6 da oltre un anno (il sabato e
la sera) ma non ho ancora terminato la prima (e probabilmente unica)
applicazione.
A parte il discorso delle transazioni che credo di
aver capito, credi che potrei avere dei problemi con
gli MDB in seguito?
Il programma che ho precedentemente fatto in
clipper (lo stesso che sto facendo in VB6) con i DBF
raggiungeva spazi utilizzati molto inferiori al giga
dopo diversi anni di lavoro.
Massimo 4/5 utenti contemporaneamente.
Insomma il tuo riferimento a MSDE e SQLServer non
mi è chiaro perchè di SQLServer ho solo sentito
parlare e non so proprio cosa sia MSDE.
Grazie Zanna e ciao.
Sauro

 parlare e non so proprio cosa sia MSDE.
MSDE è il motore di SQLServer.
Non ha interfaccia grafica e supporta solo un numero limitato di utenti,
dopo di chè si attivano dei piccoli ritardi che lo rallentano un po' (alcuni
dicono 5 utenti, altri dicono che dalla ver. 2000 sono "sopportati" fino a
20 utenti).
Il pregio è che è gratuito, e per l'interfaccia puoi cercare qualcosa in
internet come ad es. questa: 
http://www.asql.biz/DbaMgr/DownLoad2k.shtm


"Zanna"  ha scritto:

Quello che mi dici mi ha rattristato.
D'altra parte meglio conoscere i problemi prima che poi.
Quell'esempio della where mi ha veramente sorpreso.
Sto ragionando mentre scrivo e a questo punto mi
viene da chiederti:
- il problema di tutti quei dati che corrono in rete rimane
  anche con SQLServer non avendo usato una tecnica
  di programmazione client-server (che non conosco)?
- avendo io utilizzato DAO e non facendo mai delle
   join tra tabelle nelle ricerche (ho uno stile di
   programmazione arcaico) quanto sarebbe complicato
   per me cambiare MDB+JET per SQLServer+MSDE?
In una dozzina di anni con una decina di clienti con
Clipper+DBF mi si sono rovinati non più di 2/3 database.
Tra l'altro, essendo i DBF un file per ogni tabella ed
essendosi rovinati solo 1/2 files, solo una volta ho avuto
dei problemi seri.
Temo che tu mi dirai che non è affatto sufficiente avere
dei gruppi di continuità per stare tranquilli con MDB.
Quello di compattare il DB di tanto in tanto non sarebbe
un grosso problema.
Credo che avrò ancora bisogno di qualche chiarimento
in seguito se non disturbo troppo.
Ciao Zanna e grazie.
Sauro.

 in seguito se non disturbo troppo.
Per questo ci sono i NG :)


 Ciao
Grazie Zanna.
Ciao, Sauro

 guardato un po'.
???
Quale sito?
Io ti ho consigliato un link ad un programma che fa da interfaccia per MSDE.


 Io ti ho consigliato un link ad un programma che fa da interfaccia per
MSDE.
Da un tuo post precedente:
Il pregio è che è gratuito, e per l'interfaccia puoi cercare qualcosa in
internet come ad es. questa: 
http://www.asql.biz/DbaMgr/DownLoad2k.shtm
Sono entrato li e non ho capito cosa devo scaricare.
Forse devo prima chiarirmi le idee e fare qualche
prova in rete con quella parte di programma che ho
già realizzato.
Ciao e grazie.
Sauro

Un'ultima cosa, scusa.
Quell'esempio che mi facevi secondo il
quale da un PC diverso da quello col
database facendo una SELECT per
un record ne dovevano passare in rete
100.000.
Vale anche se uno dei campi di ricerca
appartiene ad un indice?
Voglio dire per esempio:
Set NomeRS=db.OpenRecordSet _
("SELECT * FROM NomeTab WHERE NomeTab.NomeField = 'PIPPO')
Dove NomeField è un campo indicizzato.
E' l'ultima domanda (per il momento ;-)
Ciao, Saueo

 appartiene ad un indice?
Vale *sempre*: poiche' il motore del database risiede sul client
(non c'e' un processo che giri sul server ed estragga i dati per
te, come nel caso di *veri* database client-server) e' giocoforza
trasferirsi in locale tutti i dati per poterli poi selezionare,
filtrare, raggruppare, ordinare.
-- 
ciao, hal

"hal1961" ha scritto nel messaggio:

Peccato!
Grazie hal.
Ciao, Sauro