Newsgroup: it.comp.lang.visual-basic
Titolo: database aperto

Ciao a tutti.
Ho questo problema.
Devo fare una copia dell'archivio utilizzato da un progettino che ho fatto
io.
Non riuscendo a fare in altro modo, ho realizzato un altro progettino
esterno che chiamo con una shell quando l'utente chiede di eseguire la copia
dell'archivio.
Si verifica però un errore di accesso al percorso/file (errore nr. 75).
Allora ho cominciato a tempestare il codice di righe tipo :
nome.database.close
per assicurarmi che l'archivio non fosse in uso al momento dello shell, ma
evidentemente non li ho chiusi tutti.
Dato che non riesco a capire quale data poteri avere ancora aperto e che non
vorrei dover scrivere 800 volte ****.database.close, vi domando se esiste (e
deve esistere) un sistema per chiudere automaticamente tutti gli oggetti
data aperti.
Io ho provato ma non ci sono riuscita.
Grazie mille a chi vorrà aiutarmi.
Elisa.
PS. Programmo in VB5.


wrote:

Ma un database viene aperto una sola volta, o almeno con una stessa
istanza
Es: Set DB=WS.OpenDatabase(....)
Se fai
DB.close
e al massimo
Set DB=nothing
dovresti aver chiuso tutto.
Io in genere apro il DB all'inizio dell'applicazione e la chiudo alla
fine, all'interno poi apro e chiudo i vari recordset o query quando
servono.
Sicuro che non c'e' un altra applicazione che uso quel Database, come
ad esempio Access?
Ciao

 Ciao
Si in effetti quando dico che apro il database intendo dire che imposto il
Recordset, perň devo dire che io non ho mai usato l'istruzione opendatabase,
bensě ho sempre lavorato con oggetti data a cui imposto in percorso
db.Databasename e poi la tabella da cui deve prendere i dati
db.recordsource.
Poi perň siccome ne ho usati molti di data, volevo sapere se č possibile con
una istruzione sola chiudere tutti i database aperti.
Per esempio io una volta ho usato un ciclo For - Next che sfruttava il
metodo forms.count   es:
for i=forms.count-1 to 1 step-1
    forms(i).close
next i
Ho provato anche con l'insieme databases, ma non sono riuscita a farlo
funzionare.
Aiutatemi vi prego.
Grazie.
Elisa.

 next i
Beh, potresti eseguire lo stesso loop con un ulteriore loop nidificato sui
controlli del form per vedere se sono data control e di conseguenza chiudere
le relative connection...
ciao
ugo

 essere molto più lenti...)



Una cosa tipo:
dim frm as form
dim ctr as control
dim ctrdata as Data
for each frm in forms
    for each ctr in frm.controls
        if typeof ctr is data then
            Set ctrdata = ctr
            ctrdata.Database.Close
        end if
    next ctr
next frm
O qlc di simile.
Tieni presente che è dal lontano '97 che non inserisco un Data control in un
Vbp... non è che mi ricordi benissimo usi e costumi dell'oggetto... :-)
ciao
ugo

 essere molto più lenti...)
Oooh!
Pensavo di essere l'unico a emarginare tutti quei bei add-in di VB6...
E poi, a dire la verità, non sono nemmeno semplici da capire (o forse sono
tonto io...)
Ciao

 tonto io...)
mmm... senza voler fare compliemnti... "tonto" tu proprio non direi...  :)
ciao
ugo

 mmm... senza voler fare compliemnti... "tonto" tu proprio non direi...  :)
mmm... senza arrossire... allora vuol dire che sono proprio complicati... :)
Ciao

Ciao a tutti.

Puoi usare questa funzione, ma guardati anche la documentazione per
usarla al meglio:
DB.MakeReplica .....
Ciao