Newsgroup: it.comp.appl.access
Titolo: Assurdo, CompactDatabase mi toglie l'accesso esclusivo!!!!

Mi sta succedendo una  cosa assurda... (Premetto che uso Win98 SR2 ed
Office2000 SR1+SP2)
Ho una funzione che:
1) Crea un nuovo DB che chiamerò    pippoBE.mdb
2) lo chiude subito dopo averlo creato
3) Usa DoCmd.TransferDatabase acExport... per esportare una tabella in
pippoBE.mdb
4) DBEngine.CompactDatabase per compattare   pippoBE.mdb   con i dati appena
esportati
5) fa operazioni accessorie tipo cancellare file duplicati e rinominare
alcuni file
La cosa assurda è che la routine funziona... però dopo che l'ho eseguitia,
il mio DB paperinoFE.mdb che contiene la maschera, le tabelle, ed i moduli
per le operazioni sopra descritte.... non ha più accesso esclusivo.
Cioè, dopo che ho eseguto con successo e senza errori di nessun tipo la
funzione sopra descritta provo ad aprire una maschera in vis. struttura per
fare delle modifiche ed Acces mi dice:
"Non si dispone di accesso esclusivi al DB in questo momento. Le
modificheapportate potrebbero andare perdute."
MA COSA CAVOLO CENTRA il mio FE? Perdo l'accesso esclusivo all'FE dopo aver
compattato un DB esterno, che non ha nemmeno tabelle collegate o
collegamenti di alcun tipo con l'FE, E' ASSURDO!
Quando prima di far andare la mia funzione AVEVO accesso esclusivo.
Nota bene che il DB ovviament elo appro solo io sul mio PC, e non è
condiviso con nessuno.
Altra cosa assurda è che alcune volte, appena dopo aver aperto la maschera
ed eseguito la funzione... mi da un errore proprio sulla compattazione del
pippoBE.mdb    e mi dice che è stato messo da un utente in una modalità che
non ne permette la compattazione, come se fosse aperto... ma è CHIUSO, l'ho
chiuso da codice perbacco, e non lo apre nessuno.
Spero tanto che qualcuno possa spiegarmi dove sta il problema perche ci sto
diventando scemo.
Se volete vedere il codice che uso lo riporto qui sotto:
Private Sub ExtractAll_Click()
Dim nuovoDB As Database
Dim nomeDB As String 'nome del nuovo DB
Dim nomeDBvecchio As String
Dim Merr As String 'contiene la stringa visualizzata in caso di errore
'genero il nome del nuovo DB
On Error GoTo ErrCart
Merr = "Errore durante la generazione del nome del DB da esportare,
CONTATTARE L'AMMINISTRATORE DI SISTEMA"
nomeDB = "C:\DatiVendite TUTTI.mdb"
'lo elimino nel caso esistesse già
On Error Resume Next
Kill nomeDB  'elimino il vecchio file, nel caso esista già
'creo il nuovo DB
On Error GoTo ErrCart
Merr = "Errore durante la creazione del DB da esportare, CONTATTARE
L'AMMINISTRATORE DI SISTEMA"
Set nuovoDB = CreateDatabase(nomeDB, dbLangGeneral) 'lo creo
nuovoDB.Close 'lo chiudo
Set nuovoDB = Nothing
'esporto i dati
Merr = "Errore durante l'esportazione dei dati, CONTATTARE L'AMMINISTRATORE
DI SISTEMA"
DoCmd.TransferDatabase acExport, "Microsoft Access", nomeDB, acTable,
"VenditeNegozio - DatiDaEsportare - TUTTI", "VenditeNuove", False
'lo compatto per essere sicuro che sia il più piccolo possibile
Merr = "Errore durante la compattazione del DB con i dati esportati,
CONTATTARE L'AMMINISTRATORE DI SISTEMA"
If Dir(nomeDB & ".new") <> "" Then Kill nomeDB & ".new"  'se esiste già il
DB col nome nuovo lo elimino
DBEngine.CompactDatabase nomeDB, nomeDB & ".new" '########### ISTRUZIONE
INCRIMINATA ################
If Dir(nomeDB & ".vec") <> "" Then Kill nomeDB & ".vec"  'se esiste già il
DB col nome "vecchio" lo elimino
Name nomeDB As nomeDB & ".vec"    'cambio nome al BE vecchio (non
compattato)
Name nomeDB & ".new" As nomeDB   'metto il nome giusto al BE compattato
If Dir(nomeDB & ".vec") <> "" Then Kill nomeDB & ".vec"  'elimino il DB non
compattato
On Error Resume Next
MsgBox "Esportazione dati riuscita"
DoCmd.Close
Exit Sub
ErrCart:
Resume ErrCartR
ErrCartR:
On Error Resume Next
  nuovoDB.Close
  MsgBox Merr
End Sub
Grazie a chiunque riesca a darmi una mano.... non so più che pesci pigliare.
Ciao, Max

 condiviso con nessuno.
Inoltre se invece compatto i BE del mio FE, che esistono già, ed hanno le
tabelle colelgate all'FE... non si presenta nessuno dei problemi
descritti.... eppure il metodo CompactDataBase è sempre lo stesso usato
nella stesso modo.
La differenza è che quando ci sono i problemi lo usco su un DB che ho creato
da codice.
Ora indaghero sulla CreateDataBase...
Idee? Consigli? Soluzioni (magari... :)?
Ciao, Max

 ha scritto nel messaggio
news:hHT27.49617$q77.3...@news2.tin.it...

Grrrrrrrr.... :-)
se cambio
Set nuovoDB = CreateDatabase(nomeDB, dbLangGeneral)
con
Set nuovoDB = DBEngine.CreateDatabase(nomeDB, dbLangGeneral)
Funziona e non da più i problemi di prima.....
Buono che ho capito come risolvere... ma non ho capito perche prima dava dei
problemi così subdoli.
Quancuno sa perchè?
Grazie a tutti!
Ciao, Max