Newsgroup: it.comp.lang.c++
Titolo: URGENTE!!! DataBase Access non rimuovibile!

Salve,
	chiedo scusa se ripeto una mia precedente news, ma
	non so piu' che pesci pigliare.
	Sto utilizzando come DB di appoggio ACCESS.
	Quando provo a rimuovere il file .mdb con
		CFile::Remove(nomefile)
	mi da accesso negato, stesso dicasi per Rename.
	Il file .mdb risulta essere aperto e non riesco a chiuderlo in nessun modo
	da programma. Infatti, dopo il GetDocument che mi restituisce il puntatore e
	dopo l'Open che mi apre la tabella, pensavo che con dei Close, oltre alle
	singole tabelle, potessi chiudere anche il file .mdb. E invece, anche con
	tutte le tabelle chiuse, dopo il GetDocument il file rimane sempre aperto.
	Non so piu' quali provvedimenti prendere.
	Come faccio a rimuovere o rinominare il file?
	Grazie!
	Bye
	    Enrico

	Non so piu' quali provvedimenti prendere.
che dirti ? E' difficile individuare il problema cosi' a distanza
senza debugger e senza nemmeno vedere il codice. Di sicuro ti posso
dire che non mi pare un problema del Dao perche' tempo fa avevo fatto
qualcosa del genere, (copia di parte di una tabella su floppy) e non
ho avuto problemi. Sicuramente da qualche parte dimentichi una Close,
per cercare di capire quale sia non ti resta che usare il debugger o
delle TRACE "ben messe".
Gianpaolo Bottin
- Live Long and Prosper -

Prova risposta!! scusate ma ultimamante non riesco più a scrivere al NG.

delle TRACE "ben messe".
	Ti assicuro che non dimentico nessuna Close. Infatti, di seguito,
	ti inserisco il codice dei puntatori alle tabelle e quello della loro chiusura
	prima della chiamata di rimozione.
	Istruzioni dei puntatori alle tabelle:
	private:
		CEsamiSet*   m_pSet;
		CSingoleSet* m_sSet;
		CMultiSet*   m_mSet;
		CGraficiSet* m_gSet;
		CEDaValidareSet*   m_evSet;
		CGDaValidareSet*   m_gvSet;
		CDataArchiveSet*   m_daSet;
	Istruzioni di rimozione del file:
			m_pSet = &GetDocument()->m_EsamiSet;
			if (m_pSet->IsOpen())
				m_pSet->Close();
			m_sSet = &GetDocument()->m_SingoleSet;
			if (m_sSet->IsOpen())
				m_sSet->Close();
			m_mSet = &GetDocument()->m_MultiSet;
			if (m_mSet->IsOpen())
				m_mSet->Close();
			m_gSet = &GetDocument()->m_GraficiSet;
			if (m_gSet->IsOpen())
				m_gSet->Close();
			m_evSet = &GetDocument()->m_EDaValidareSet;
			if (m_evSet->IsOpen())
				m_evSet->Close();
			m_gvSet = &GetDocument()->m_GDaValidareSet;
			if (m_gvSet->IsOpen())
				m_gvSet->Close();
			m_daSet = &GetDocument()->m_DataArchiveSet;
			if (m_daSet->IsOpen())
				m_daSet->Close();
			AfxGetApp()->HideApplication();
			CFile::Remove(newName); // NewName e' il nome del file .mdb
	Non capisco cosa ho sbagliato, e perche' il file .mdb, dopo un GetDocuments() non mi
	si chiuda piu'.
	Bye
	Enrico

	Ti assicuro che non dimentico nessuna Close. 
sembra che sia cosi', pero' torno a ripetere che e' quasi impossibile
cosi' a distanza capire cosa c'e' che non funziona, la via piu'
semplice e' usare il debugger o qualche TRACE e vedere cosa succede
effettivamente durante l'esecuzione del codice. Sorry :(
Ah, dimenticavo, ovviamente hai provveduto anche a chiudere il
CDaoDatabase ed eventuali CDaoTablef aperte.


CDaoDatabase ed eventuali CDaoTablef aperte.
	Io non uso la classe CDaoDatabase ma ODBC, e, da quello
	che mi sembra di aver capito, non deve esserci
	una vera e propria apertura globale del DB, in quanto questa
	viene effettuata attraverso le singole GetDocuments.
	Comunque ho trovato come chiudere il DB. Attraverso
		CloseAllDocuments
	Solo che questa soluzione mi crea un altro problema, come
	ho illustrato in un'altra news. Quindi sto cercando altri modi maggiormente
	innocui per chiudere il file .mdb. Dunque, se cio' che ho scritto sull'ODBC e' errato 
	ti prego di farmelo sapere.
	Ti ringrazio dei suggerimenti. Penso che un giorno
	o l'altro dovro' offrirti una cena.
	Bye
	Enrico

		CloseAllDocuments
questo conferma il fatto che c'e' qualcosa che rimane aperto, sapere
cosa probabilmente non e' cosi' facile se non conosci bene come sono
implementate le classi. Qui purtroppo non posso esserti di aiuto
perche' ho usato molto poco odbc.
