Newsgroup: it.comp.appl.access
Titolo: Re: svuotare database ....

 Ciao, Carlo
Ciao Carlo,
dalla tua considerazione capisco che č meglio ciclare il recordset della
tabella di sistema in quanto soluzione piů versatile e meglio adattabile ad
altri database.(come dicevate in precedenza)
Debug.Print 
tbl.name
 č rimasto in quanto in sede di stesura del codice
l'avevo messo per vedere il ciclo for each se correttemente leggeva tutte le
tabelle, si ok lo tolgo o gli metto un rem davanti.
Non ho capito invece la differenza di mettere il DoCmd.SetWarnings False
prima del ciclo invece che come dici tu prima della DoCmd.RunSQL strsql.
E' una finezza oppure c'č dell'altro ?
Grazie, ciao

 Mi dai qualche ulteriore ragguaglio ?
Il risultato non è lo stesso.
Supponi di voler gestire una sicurezza Utente interna a MDE
e concedere operazioni pianificate, supponi che tra le 157 Tabelle che
ha il tuo applicativo solo 28 vadano svuotate, supponi altre
personalizzazioni.....!!!
Con la MSYSOBJECT cosa dovresti fare per discriminare le 
tabelle sulle quali operare in un modo piuttosto che inun altro...?
Sai che la gestione Utenti in MDE è quella che consente
la maggior protezione del tuo applicativo, come potresti discriminare
che l'ADMIN può eliminare tutti i dati mentre "SANDRO" può farlo
solo su 10 delle 153 tabelle...???
Io ho una Tabella nella quale metto l'elenco delle tabelle
i permissivi di eliminazione ed altre cose, come il Relink
ecc....!
Una tabella delle Form nella quale inserisco i permissivi...!
Ho una maschera d'interfaccia che è simile a quella della gestione
UTENTI dell'MDW, che mi scrive nelle mie Tabelle tutte queste
gestioni.(Ovviamente Relazionato con la tbl[USER])
Insomma un pò di fantasia applicata...!
Ho fatto un pò un'accenno globale, sembra complesso, ma 
una volta impostato bene poi è COPIA/INCOLLA in tutti i progetti.
Ciao
@Alex
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 @Alex
Ciao @Alex e Carlo,
avete fatto bene a farmi notare questa cosa anche perchè nel mio codice, non
notando particolari problemi l'avevo piazzato li un po' a casaccio se
vogliamo, non pensando ai problemi a cui sarei potuto andare incontro
soprattutto in presenza di altre strsql di comando che sarebbero state
eseguite senza magari che me ne accorgessi !!
Adesso che me l'avete spiegato capisco l'importanza di inserire queste
instruzioni nel posto giusto.
Ho fatto bene a postare e a richiedere un parere.


 Ciao, Carlo


come posso fare per farlo inun colpo solo ho circa 30 tabelle....
access 2000
grazie ciao 


Grazie a entrambi e tutto chiaro solo mi serviva qualcosa di più veloce (ma 
posso fare tutto da access ? ) 


Matteo è stato preciso ma presupponeva qualche piccola conoscenza di Access.
MSysObjects è una tabella di sistema (nascosta) che elenca tutti gli oggetti 
del database.
Per evidenziarla: menù strumenti...Opzioni...Spunta "Oggetti di Sistema". 
Ora la vedi.
Le tabelle locali hanno il valore Type = 1, le tabelle allegate hanno il 
valore Type = 6.
Da questo ne risulta che puoi creare una query a partire da questa tabella 
MSysObjects e filtrare la colonna Type per 1 o per 6 o per entrambi i tipi a 
seconda delle tue necessità.
Il risultato sarà una query che mostra solo gli oggetti di tipo tabella, il 
cui nome compare nella colonna "Name".
Ora se da codice apri la query (recordset) e con un ciclo scorri tutti i 
"Name" delle tabelle potrai eseguire una query o istruzione SQL che, per 
ogni tabella, ne elimina i dati.
Se fino a qui è chiaro faccelo sapere. Intanto prova a realizzare la query.
Ciao, Carlo 

 Grazie, ciao
Carlo ha evidenziato un concetto importante, tutt'altro che
una finezza.
Disabilitare i messaggi errore è da fare solo dove strettamente
necessario e dove si conosce l'effetto, farlo a monte di tutto
può celare problemi o non segnalare anomalie.
Saluti.
@Alex


 grazie ciao 
apri un recordset su questa query:
SELECT MSysObjects.Name AS NomeTabella
FROM MSysObjects
WHERE (((MSysObjects.Name) Not Like "msys*") AND ((MSysObjects.Type)=1));
che ti restituisce l'elenco delle tabelle, poi esegui
docmd.RunSQL "DELETE FROM "  & rcs.nometabella
dove rcs è il recordset di prima
Ciao
Matteo


Se a te funziona va benissimo perchè almeno è stata farina del tuo sacco e 
adatta alle tue esigenze.
Alcune osservazioni.
Per esempio la tabella "Registro di correzione automatica nome" non è sempre 
presente in tutti i db e sicuramente non lo è nei db 97.



Il metodo SetWarnings esegue l'azione ImpostaAvvisi in Visual Basic.
Metterlo prima della esecuzione della query di comando interrompe la 
visualizzazione degli avvisi di tutto il codice successivo e questo non ti 
interessa visto che comunque prevedi una gestione degli errori con "On Error 
GoTo errori" sistemato giusto sotto "DoCmd.SetWarnings False".
Inoltre CTRL+INTERR o se Visual Basic incontra un punto di interruzione non 
funzioneranno più dopo l'istruzione "DoCmd.SetWarnings False".
Ciao, Carlo 

 (ma posso fare tutto da access ? )
Molto brutalmente:
----------------------------------------------
For Each i In CurrentDb.TableDefs
    If Not Left(i.Name, 4) = "MSys" Then
        DoCmd.DeleteObject acTable, i.Name
    End If
Next
----------------------------------------------
MSys è il prefisso indicativo delle tabelle di sistema (invisibili).
Bruno 

 Ciao


 ha scritto nel messaggio
news:E620e.1101647$35.40...@news4.tin.it...

Capisco tutto ma non capisco DOVE farlo :-) (forse non mi avete capito :-) )

 :-) )
Mettilo in OnClick di un Button, in OnOpen/OnClose di una Form/Report,
prima di Application.Quit (cioè all'uscita da Access).
Possibile che tu voglia una cosa senza saper prima dove metterla?
Bruno 

 Bruno
Seguendo i vs suggerimenti ho avuto la sensazione di non aver capito molto
il senso della richiesta.
Ictu oculi io pensavo che lui volesse svuotare una tantum il db, non 
sistematicamente.
A quel punto gli basta importare in un nuovo db solo la struttura e non i 
dati.
MAssimiliano 

 ha scritto nel messaggio 
news:squ0e.1989$aH3...@news.edisontel.com...

Exact :-) How To ?