Eliminare tutte le tabelle tranne una

di il
4 risposte

Eliminare tutte le tabelle tranne una

Ciao a tutti ,
data la mia conoscena base con access, mi trovo in difficolltà
ho bisogno di importare dei dati da una fattura in xml, durante l'importazione l'xml crea varie tabelle ed io attraverso una query di accodamento, seleziono i record di mio interesse (il primo delle tabelle interessate) e li accodo in una tabella "tabella1".
INSERT INTO Tabella1 ( Mittente, Codice_Fiscale, TipoDoc, Num, Del, Importo )
SELECT First([Denominazione]) AS Mittente, First([CodiceFiscale]) AS Codice_Fiscale, First([TipoDocumento]) AS TipoDoc, First([Numero]) AS Num, First([Data]) AS Del, First([ImportoTotaleDocumento]) AS Importo
FROM Anagrafica, DatiAnagrafici, DatiGeneraliDocumento;
alla fine del processo e prima di importare un nuovo file, ho bisogno di eleiminare tutte le tabelle esistenti tranne "tabella1". perchè oltre alle tabelle di mio interesse il file xml genera tabelle conteneti vari record, per me inutili.
Come si procede per ottenere il risultato?

la mia soluzione (che non funziona perfetamente o meglio solo in parte):
ho creato una maschera con un pulsante che al click mi esegue :
Private Sub Comando0_Click()
DoCmd.DeleteObject acTable, "Anagrafica"
DoCmd.DeleteObject acTable, "CodiceArticolo"
DoCmd.DeleteObject acTable, "DatiAnagrafici"
DoCmd.DeleteObject acTable, "DatiGeneraliDocumento"
DoCmd.DeleteObject acTable, "DatiPagamento"
DoCmd.DeleteObject acTable, "DatiRiepilogo"
DoCmd.DeleteObject acTable, "DatiTrasmissione"
DoCmd.DeleteObject acTable, "DettaglioLinee"
DoCmd.DeleteObject acTable, "DettaglioPagamento"
DoCmd.DeleteObject acTable, "FatturaElettronicaHeader"
DoCmd.DeleteObject acTable, "IdFiscaleIVA"
DoCmd.DeleteObject acTable, "IdTrasmittente"
DoCmd.DeleteObject acTable, "Sede"
End Sub
fin qui va abbastana bene però...
anche se tutti i file importati creano le stesse tabelle che vado ad eliminare col VBA, alcuni xml creano tabelle che non sono uguali agli altri tipo tabella allegati, contatti etc. quindi anche se eseguo codice alla fine mi ritrovo tabelle inutili in giro.
quindi io vorrei, prima di caricare un nuovo XML, eliminaare tutte le tabelle del DB tranne la "Tabella1 che contiene i miei dati accodati.
C'è qualcuno che mi può aiutare?

4 Risposte

  • Re: Eliminare tutte le tabelle tranne una

    Graie per l'eventuale aiuto
  • Re: Eliminare tutte le tabelle tranne una

    Come fai, sei costretto a conoscere in anticipo il nome delle tabelle (ma forse non è un problema per te)

    Personalmente farei un ciclo nella TableDef ed eliminerei tutte le tabelle escludendo Tabella1.
    Dai un'occhiata a TableDef sulla guida di Access.
  • Re: Eliminare tutte le tabelle tranne una

    Graie per il suggerimento, ma non ci capisco molto di quello che hai scritto,
    conosco solo un pò di comandi in vba scopiazzati dai db di esempio.
    dovrei dare degli attributi "Read-only" alla tabella1 e "read-write" a tutte le altre? e poi eliminare?
    GIustamente dici che non posso conoscere quale tabelle crea il XML ma crea per forza di cose quella dalle quali estrapolo i dati e li accodo in Tabella1.
    quindi dopo l'importazione e l'accodameto cancellerei semplicemente tutto tranne la Tabella1 che devo esportare in altro db.
    Non saprei come procedere , se hai la pazienza di spegarmi te ne sarei grato,queso è il link per il db
    .
  • Re: Eliminare tutte le tabelle tranne una

    No non è affatto così...!
    Il modello Oggetti di Access è fatto a Insiemi o Collection.
    Tra queste esiste l'insieme delle Tabelle che si chiama Tabledefs, all'interno del quale vi sono i singoli Item Tabledef(le tabelle)...!
    
    Currentdb
    ----> Tabledefs
    --------> Tabledef(index)
    Quindi in questo insieme trovi tutte le tue tabelle più quelle di Sistema.
    Ne consegue che se fai un ciclo, ed escludi tutte quelle di Sistema e la "Tabella1" puoi rendere veloce la cancellazione delle altre...!

    La guida mostra come ciclare le tabelle dell'insieme Tabledefs.

    Per escludere la Tabella1 basta leggere la proprietà Name dell'oggetto Tabledef che userai per iterare la collection... mentre per escludere le Tabelle di sistema ti basta escludere con un AND logico sugli attributi...
    tdf.Attributes And DAO.TableDefAttributeEnum.dbSystemObject
    oppure sempre sulla proprietà Name:
    
    If tdf.Name Not Like "[M-U]Sys*" then...
    Per il resto volente o nolente devi studiarti un po di struttura del modello ed un minimo di basi... quello che ti ha fornito Gibra era più che sufficiente, io ho aggiunto nozioni di supporto che ti consentono di cercare nella GUIDA, ma nessuno ti fornirà il codice pronto per farlo...!
Devi accedere o registrarti per scrivere nel forum
4 risposte