Newsgroup: it.comp.appl.access
Titolo: Come esportare il contenuto di tabelle collegate?

Domandona :-)
Come faccio a creare una funzione che mi esporti struttura e contenuto di
tutte le tabelle di un DB?
Il problema mi nasce con le tabelle collegate, se uso docmd.trasnferDB su
una tabella collegata Access mi fa una copia del collegamento.
Io invece vorrei esportare tutto il contenuto.
Esiste un modo semplice?
Potrei usare delle query... ma è complicato, perchè io vorrei creare una
funzione che mi esporti tutti i dati di tutte le tabelle dal db corrente ad
un'altro.
Usando TransferDB l'ho fatto, ma mi sono imbattuto nel problema sopra
descritto.
Qualcuno ha delle idee?
Intanto posto il codice, nel caso possa servire a qualcuno :-)
Sub ExportDB(destinazione As String)
'questa funziona ha un problema: se nel db corrente c'è una tabella
collegata allora viene esportato il collegamento, e non il contenuto della
tabella.
Dim nuovoDB As Database
Dim nomeDB As String
Dim Merr As String
Dim obj As AccessObject, dbs As Object
'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 = destinazione
If Right(nomeDB, 1) <> "\" Then nomeDB = nomeDB & "\"
nomeDB = nomeDB & "Backup " & EliminaCaratteriIllegali(Now()) & ".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 = DBEngine.Workspaces(0).CreateDatabase(nomeDB, dbLangGeneral)
'lo creo
nuovoDB.Close 'lo chiudo, altrimenti non lo posso usare con transfertDB
Set nuovoDB = Nothing
'esporto le tabelle
Merr = "Errore durante l'esportazione dei dati, CONTATTARE L'AMMINISTRATORE
DI SISTEMA"
Set dbs = Application.CodeData
For Each obj In dbs.AllTables
If 
obj.name
 <> "MSysAccessObjects" And _
 
obj.name
 <> "MSysAccessXML" And _
 
obj.name
 <> "MSysACEs" And _
 
obj.name
 <> "MSysIMEXColumns" And _
 
obj.name
 <> "MSysIMEXSpecs" And _
 
obj.name
 <> "MSysObjects" And _
 
obj.name
 <> "MSysQueries" And _
 
obj.name
 <> "MSysRelationships" Then
     Debug.Print "Inizio trasferimento " & 
obj.name
     DoCmd.TransferDatabase acExport, "Microsoft Access", nomeDB, acTable,
obj.name
, 
obj.name
, False 'ci esporto i dati
     Debug.Print "Fine trasferimento " & 
obj.name
     Debug.Print
  End If
Next obj
'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"
'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
'LA COMPATTAZIONE DA DEI PROBLEMI! MI TOGLIE L'ACCESSO ESCLUSIVO ALL'FE,
QUINDI NON LA FACCIO FIN CHE NON CAISCO IL PROBLEMA
On Error Resume Next
MsgBox "Esportazione dati riuscita"
Exit Sub
ErrCart:
Resume ErrCartR
ErrCartR:
On Error Resume Next
  nuovoDB.Close
  MsgBox Merr
End Sub
Public Function EliminaCaratteriIllegali(str As String) As String
Dim Data As String
On Error Resume Next
Data = Replace(str, "/", "_", , , vbTextCompare) 'elimino
Data = Replace(Data, "\", "_", , , vbTextCompare) 'i caratteri che non si
Data = Replace(Data, ".", "_", , , vbTextCompare) 'possono usare per i
Data = Replace(Data, ":", "_", , , vbTextCompare) 'nomi dei files
Data = Replace(Data, "*", "_", , , vbTextCompare)
Data = Replace(Data, "?", "_", , , vbTextCompare)
Data = Replace(Data, "=", "_", , , vbTextCompare)
Data = Replace(Data, "<", "_", , , vbTextCompare)
Data = Replace(Data, ">", "_", , , vbTextCompare)
Data = Replace(Data, "|", "_", , , vbTextCompare)
Data = Replace(Data, """", "_", , , vbTextCompare)
Data = Replace(Data, " ", "__", , , vbTextCompare) 'Inoltre elimino gli
spazi
EliminaCaratteriIllegali = Data
End Function

 ha scritto nel messaggio
news:a8uml9$mep$1...@newsreader.mailgate.org...

Mi sembra di capire che tu voglia fare una copia del DB che contiene le
tabelle che sono collegate al Front End, quindi mi sembra più facile fare la
copia del file .mdb piuttosto che fare l'export di tutti gli oggetti, per
fare la copia del file .mdb puoi usare questa istruzione:
FileCopy "c:\TuaDir\DBTabelle.mdb",  "c:\TuaDir\Backup\DBTabelle.mdb"
Ciao Roberto - Syd

 FileCopy "c:\TuaDir\DBTabelle.mdb",  "c:\TuaDir\Backup\DBTabelle.mdb"
Potrei... ma questo comporta dei problemi: se il DB è aperto da altri utenti
che lo stanno usando rischio di fare una copia di un DB che poi non riesco a
leggere, cioè, magari sono a metà di una lunga query di aggiornamento... il
DB potrebbe non godere molto, o semplicemente potrebbe risultarne una copia
non valida.
Mentre se riuscissi ad esportare tutti i dati delle tabelle con metodi
interni al DB non dovrei avere problemi del genere, almeno credo.
Grazie comunque.
ciao, Max