Newsgroup: it.comp.appl.access
Titolo: creazione DB e tabella collegata via codice

buon giorno a tutti! 
vi chiedo se potete aiutarmi per fare queste operazioni:
situazione attuale: ho un db chiamato "pippo" che contiene una tabella "nometabella".
vorrei: 
1) il 31/12/anno (o una data in prossimità), creare un db chiamato "pippo-anno",
2) dentro a "pippo-anno" creare una tabella "nometabella-anno"
3) i dati della tabella "nometabella-anno" di "pippo-anno" sono i dati dell'anno in corso di "nometbella" di "pippo", tutti i dati e struttura uguali, solo riferiti all'anno 
4) il tutto tramite un pulsante. su evento "click" del pulsante. 
 
un grazie a chi vorrà aiutarmi!
ciao 
Luca


Ti posto le routine che io uso da qualche anno proficuamente e che sono 
tratte da un testo che ho studiato (è presente il nome dell'autore).
Sono riferite ad A2010. Vedi se ti possono servire. Non chiedermi però 
spiegazioni perché il mio grado di cultura in access è moooolto limitato.
 
Da inserire in un modulo standard previa indicazione di un ID, se 
necessario, e di nome e percorso completi del db origine e db destinazione.
 
'********* Inizio serie di routine copia database (tabelle, campi, 
indici e proprietà (no dati)) *******************************
'tratte da 'Costruire applicazioni con Access 2010' di Mike Davis (Apogeo)
 
Sub CopiaTabelle(dbsOrig As DAO.Database, dbsDest As DAO.Database)
     Dim tOrig As DAO.TableDef, tDest As DAO.TableDef
     For Each tOrig In dbsOrig.TableDefs
         If Left(tOrig.Name, 4) <> "MSYS" Then
             Set tDest = dbsDest.CreateTableDef(tOrig.Name, 
tOrig.Attributes, _
                 tOrig.SourceTableName, tOrig.Connect)
             If tOrig.Connect = "" Then
                 CopiaCampi tOrig, tDest
                 CopiaIndici tOrig.Indexes, tDest
             End If
             CopiaProprietà tOrig, tDest
             dbsDest.TableDefs.Append tDest
         End If
     Next
End Sub
 
Sub CopiaCampi(objOrig As Object, objDest As Object)
     Dim fldOrig As Field, fldDest As Field
     For Each fldOrig In objOrig.Fields
         If TypeName(objDest) = "TableDef" Then
             Set fldDest = objDest.CreateField(fldOrig.Name, 
fldOrig.Type, fldOrig.Size)
         Else
             Set fldDest = objDest.CreateField(fldOrig.Name)
         End If
         CopiaProprietà fldOrig, fldDest
         objDest.Fields.Append fldDest
     Next
End Sub
 
Sub CopiaProprietà(objOrig As Object, objDest As Object)
     Dim prpProp As DAO.Property
     For Each prpProp In objOrig.Properties
         On Error Resume Next
         objDest.Properties(prpProp.Name) = prpProp.Value
     Next
End Sub
 
Sub CopiaIndici(idxsOrig As DAO.Indexes, objDest As Object)
     Dim idxOrig As DAO.Index, idxDest As DAO.Index, propOrig As 
DAO.Property
     For Each idxOrig In idxsOrig
         Set idxDest = objDest.CreateIndex(idxOrig.Name)
         CopiaProprietà idxOrig, idxDest
         CopiaCampi idxOrig, idxDest
         objDest.Indexes.Append idxDest
     Next
End Sub
 
Sub CopiaRelazioni(dbsOrig As DAO.Database, dbsDest As DAO.Database)
     Dim relOrig As DAO.Relation, relDest As DAO.Relation
     For Each relOrig In dbsOrig.Relations
         If Left(relOrig.Table, 4) <> "MSYS" Then
             Set relDest = dbsDest.CreateRelation("New" & relOrig.Name, _
                 relOrig.Table, relOrig.ForeignTable, relOrig.Attributes)
             CopiaCampi relOrig, relDest
             dbsDest.Relations.Append relDest
         End If
     Next
End Sub
'***************fine serie routine copia database*********************


L'esigenza di fare questa operazione è motivata da...?
Lo chiedo in quanto spesso capitano considerazioni che lasciano spazio a dubbi tecnici.
 
@Alex

l'esigenza nasce dal fatto che chi inserisce i dati nella tabella carica delle scansioni di grosse dimensioni che riempiono di dati la tabella e tutti il DB fino a 1 giga circa per anno di competenza, ragion per cui devo creare di anno in anno delle tabelle collegate. lo volevo fare in automatico per evitare che io debba intervenire manualmente.

 l'esigenza nasce dal fatto che chi inserisce i dati nella tabella carica delle scansioni di grosse dimensioni che riempiono di dati la tabella e tutti il DB fino a 1 giga circa per anno di competenza, ragion per cui devo creare di anno in anno delle tabelle collegate. lo volevo fare in automatico per evitare che io debba intervenire manualmente.
 
Quindi non devi creare un DB da zero... ma eventualmente CLONARE, tipo BackUp il SERVER(Dati) dell'anno di cui parli, ed eventualmente consentire l'accesso Likando le Tabelle...!
Questa cosa è estremamente più semplice...!
 
Fai una Copia del File con i dati che ti servono, la rinomini con l'ANNO di Validità, poi consenti al Client di poter selezionare il DB_DATI dell'anno di competenza a cui connettersi... e riesegui il RELINK delle Tabelle(che si chiamano sempre al medesimo modo) al CLIENT.
 
Cosa mi sfugge...?
 
@Alex


che vorrei fosse fatto in "automatico" senza il mio intervento.

Il giorno martedì 5 marzo 2019 11:28:36 UTC+1, Lomba ha scritto:

Voglio darti un consiglio: non caricare i file delle scansioni dentro il dabase di Access. Nella tabella crea solamente un campo con un collegamento al file residente su disco, al limite crea una anteprima del pdf nella form. Così facendo il database è snello e potrai gestire diversi anni in modo facile. Troverai tanti esempi in rete su come usare il controllo Adobe PDF Reader. Io ho creato un gestionale che funziona da anni in modo egregio, molto veloce, e i documenti sono residenti in un piccolo NAS, con tutti gli anni di gestione in varie sottocartelle. All'avvio il programma chiede l'anno da gestire e, volendo, si può cambiare al volo.