Newsgroup: it.comp.appl.access
Titolo: Forzare la chiusura di un .mdb

Avrei la necessitŕ di forzare la chiusura di un file di access da un altro programma di "servizio".
In sostanza, ho due programmi caricati: A.MDB  e   B.MDB
In una particolare fase delle elaborazioni in B.MDB sarebbe importante poter chiudere
automaticamente A.MDB..
Dubito esista la possibilitŕ di far ciň attraverso VBA, mi chiedevo se qualcuno conosca API o altro
per ottenere questo risultato.
Ciao a tutti e complimenti per il ng.
Matteo

 ha scritto nel messaggio
news:3kcH5.38876$Nz.11...@news.infostrada.it...

A e B come li carichi? Avviandoli a manina oppure A "chiama" B con una shell
o cosa?
Ciao.


Via API forse è possibile ma dovrei documentarmi.
Invece la soluzione che conosco usa OLE2.
Se tu aprissi la sessione con B.mdb da A.mdb, la cosa sarebbe molto
semplice...
Dichiari una variabile di tipo Object (non locale alla routine, ma almeno di
modulo)
Dim goAccess As Access.Application
Crei una routine AvviaB() dove imposti questa variabile...
Sub AvviaB()
    Set goAccess =CreateObject("Access.Application") 'questa ti apre una
sessione access
    'Ricordati che goAccess punta all'oggetto Application di Access così
attraverso questo riferimento
    'tu puoi accedere a tutte le proprietà e i metodi di tale oggetto (e
quindi di Access)
    'adesso di basta dirgli quale applicazione aprire
    goAccess.OpenCurrentDatabase("C:\...\B.MDB")
End Sub
Avendo un riferimento alla sessione di Access con B.MDB, è facile chiuderla
Sub ChiudiB()
    goAccess.CloseCurrentDatabase
    goAccess.Quit
    Set goAccess = Nothing
End Sub
SOTTOLINEO che la sessione access rimarrà attiva SOLO nello scope della
variabile goAccess.
Spero di esserti stato utile,
Michele Amato
{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}
Sulla mia pagina personale
http://utenti.worldonline.it/micheleamato
è possibile trovare una add-in per Access97-2000:
          Access Navigator 2.0
comincia a esserci anche un pò di documentazione...
ho pubblicato anche la prima parte di un TUTORIAL
sull'uso di questo strumento
{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}

Anzitutto Sergio che Michele vi ringrazio molto per l'attenzione.
Vi spiego in maniera più dettagliata la faccenda: uno dei problemi dibattuti del ng. è come
autocompattare un Front-End (che magari usa archivi locali) alla chiusura, ovviamente con A '97.
Per il sottoscritto non è una vera necessità, ma vorrei ugualmente ottenere questo effetto.
L'idea è la seguente: su chiusura del .MDE (ovvero su chiusura della Form principale del .MDE)
lanciare un programmino esterno di "servizio" che comprima automaticamente il programma chiamante.
Quindi, su chiusura della Form principale del Front-end avremmo una situazione del genere:
Shell "<programma servizio>"   (il quale su apertura tenta la compattazione di A.MDE)
Application.quit
Il guaio è che il tentativo di compattazione avviene prima che il front-end venga del tutto
scaricato dalla memoria, e di conseguenza l'esito è negativo.
Il problema si risolverebbe se fosse il programma di servizio a scaricare dalla Ram l'.MDE,
dopodichè lo potrebbe compattare in tutta tranquillità!
Adesso devo scappare e non posso vagliare con attenzione le indicazioni di Michele, se avete
qualcosa da aggiungere ragazzi fate pure!!!
Molte grazie, CIAO

 ha scritto nel messaggio
news:dSfH5.39940$Nz.12...@news.infostrada.it...

Un file batch o uno script VB che magari ti chiama l'mdb e poi lo compatta.
Ciao.

 wrote in message

Se il tuo problema è questo non credo che la soluzione da me proposta faccia
al caso tuo.
Io ho risolto il problema in questo modo: per ogni cliente ho una persona
(la più skillata) che fa da "amministratore".
Usando le opzioni della riga di comandi di access, ho creato dei "batch" che
compattano.
Periodicamente, approfittando di un momento in cui nessuno è connesso al
database, queste persone lanciano questi batch.
L'idea è utilizzare C:\Programmi\.....\msaccess.exe C:\...\b_e.mdb /compact
Questo lo puoi fare con un collegamento o un un file .bat vero e proprio.
Adesso che ci penso, se tu vuoi compattare TUTTE le volte che la sessione
access termina, il che ha senso sono nel caso monoutenza,
puoi creare un file batch così fatto
start -w C:\Programmi\...\msaccess.exe C:\...\f_e.mdb
start -w C:\Programmi\...\msaccess.exe C:\...\f_e.mdb /compact
start -w C:\Programmi\...\msaccess.exe C:\...\b_e.mdb /compact
Credo ci sia solo un piccolo effetto collaterale, l'apertura di una finestra
dos.
Saluti
Michele
--



Scusa Michele ma cosě (se non erro) il file batch processerebbe tutte le
linee di istruzioni aprendo e compattanto il file nello stesso momento; o
no?
Ciao.

 Michele
che si può aggirare creando un .pif con proprietà "esecuzione ridotto a
icona"
Ok, c'è sempre nella barra di windows.......

 no?
Erri, erri
e lo start -w dove lo mettiamo? ;-)
-w sta proprio per wait.
Start (avvia) -w (e aspetta la fine)
Saluti
Michele

 Ok, c'è sempre nella barra di windows.......
Infatti. Bisognerebbe sapere se esiste la possibilità di non farla vedere
proprio, visto che in C sicuramente ma anche in VB le form hanno la
proprieta ShowInTitleBar (o qualcosa di simile).
Sarebbe molto comodo...
Infatti l'idea di compattare almeno il front-end ad ogni chiusura, che è
locale ad ogni utente, e quindi senza problemi di database lockato non mi
dispiacerebbe.
Saluti
Michele
P.S.
Se non esiste una soluzione furba e qualcuno è interessato potrei fare un
"lancia.exe", in C (quello GNU, il migliore compilatore C a 32 bit, free,
ovviamente con linking statico) che prenda come input in file txt dove c'è
l'elenco dei compiti...
In ogni caso spero che esista una soluzione furba, sto invecchiando e questi
vecchi trucchetti mi stanno stancando :-|

Ottima soluzione!
In ogni caso visto che la copia del .MDE è sempre locale non ci sono problemi di lock multiutenti.
Molte grazie...
Matteo

 Michele
Non ho letto tutto il thread (scusate :-)), ma se vi serve un compattatore
provate a guardare sul Sito di Dev Ashish;
se non ricordo male, c'e' una aggiunta per access97 che compatta il db
corrente, da un'altra sessione di access (nascosta) per poi riaprire quella
originale.
sempre se non ricordo male, questa aggiunge due voci due menu, quindi andrebbe
modificata per essere lanciata da codice.
Se non ho sbagliato tutto :-), ci si potrebbe lavorare assieme.
-- 
Federico
--------------------------------------
Sito Comune di it.comp.appl.access
http://members.xoom.it/it_db_access
mailto:
it_db_...@usa.net
--------------------------------------
Tutte le richieste che mi arrivano
in privato, vengono cestinate.
--------------------------------------
Rimuovi paperino. per e-mail
--------------------------------------


O cacchio!
E' proprio da questo che mi rendo conto di quanto non utilizzo più i file
batch. E dimmi, start è uno dei nuovi comandi inseriti in quale (o a partire
da quale) sistema operativo?
Ciao.

 wrote in message
8skm8v$r5c$1...@pegasus.tiscalinet.it...

Sono un sistemista Unix non Dos/windows, perciò non conosco l'history dei
vari comandi, però io sono stato costretto quella sottospecie di scripting
di Dos/windows da almeno 2 anni (con W95).
Michele

 wrote in message
39EDDBED...@paperino.libero.it...

Sei costretto ad inserire un riferimento alla libreria?
Se si non mi piace.
Se no vuol dire che copia il codice nell'applicazione corrente e allora si
può ragionare...
Saluti
Michele
P.S.
Noi abbiamo un conto in sospeso, ti/vi devo mandare il faquettino per le
add-in, perdonami ma mi ero promesso di farlo quest'estate in ferie poi,
ehm, non ho avuto tempo, spero mi perdonerai :-)
Appena trovo mezza giornata lo faccio, ho un interesse personale in questo
per cui mi impegno solennemente.

 per cui mi impegno solennemente.
aspetto con ansia :-)


Ciň che cerchi (o qualcosa di molto simile) lo trovi sul sito di Dev
Ashish: compacter.mda.
Scaricalo e guardalo.
Vincenzo Turturro
---------------------------------------------------------
Se no diventiamo tutti **** dai portatili o peggio ancora 
provetti poeti fiorentini come vturturro.
(Cosě disse 
ivan....@tiscalinet.it
 Ven 25 Aug 2000 09:34:52 +0200)

vecchi trucchetti mi stanno stancando :-|
OK, dico anch'io la mia: io i fe non li compatto proprio.
Su ogni client ho un batch che ogni volta si va a prendere
in apposita dir condivisa sul server il fe (che potrei anche
aver aggiornato ad una nuova versione), se lo copia in
locale sovrascrivendo e poi lo apre.
Due fave con un piccione.
Si', vabbe', ci mette qualche secondo in piu', ma sta' a
guarda' er capello ;-)
--
Lorenzo Coronati
--
<<Come posso dunque sprotegere il database? 
Esiste un crack o qualcosa del genere 
che mi faccia accedere ai dati?>>
(Cocco, 17/10/2000)
--

 guarda' er capello ;-)
Se i tuoi clienti hanno una buona rete e i f_e sono solo qualche mega, mi
sembra una buona idea.
Un'altra possibilità è quella di condividere su file server anche il f_e...
ma il problema della compattazione resterebbe.
Saluti
Michele