Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    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".
    codice:
    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 eliminare 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 perfettamente o meglio solo in parte):
    ho creato una maschera con un pulsante che al click mi esegue :
    codice:
    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? Grazie.

  2. #2
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Quote Originariamente inviata da emmeastudio2016 Visualizza il messaggio
    ...... quindi anche se eseguo codice alla fine mi ritrovo tabelle inutili in giro. ......
    Potresti fare un ciclo su tutte le tabelle escludendo le tabelle di sistema (nome che inizia con MSys) e la tua "Tabella1"

    Tutte le tabelle le trovi nella "collezione" TableDefs
    codice:
    Private Sub EliminaTabelle()
    Dim DBx As DAO.Database
    Set DBx = DBEngine(0)(0)
    
    Dim tbx As DAO.TableDef
    
    For Each tbx In DBx.TableDefs
        On Error Resume Next
            If Left(tbx.Name, 4) <> "MSys" And tbx.Name <> "tabella1" Then
                DoCmd.DeleteObject acTable, tbx.Name
            End If
        On Error GoTo 0
    Next
    
    End Sub
    NB: il "On Error Resume Next" lo ho messo perché in caso di
    clik ripetuto sullo stesso pulsante andresti a un errore
    in quanto tenta di eliminare una tabella inesistente
    ..... Il TableDefs si aggiorna alla prossima apertura del DB

    Facci sapere

    .

  3. #3
    Quote Originariamente inviata da nman Visualizza il messaggio
    Potresti fare un ciclo su tutte le tabelle escludendo le tabelle di sistema (nome che inizia con MSys) e la tua "Tabella1"

    Tutte le tabelle le trovi nella "collezione" TableDefs
    codice:
    Private Sub EliminaTabelle()
    Dim DBx As DAO.Database
    Set DBx = DBEngine(0)(0)
    
    Dim tbx As DAO.TableDef
    
    For Each tbx In DBx.TableDefs
        On Error Resume Next
            If Left(tbx.Name, 4) <> "MSys" And tbx.Name <> "tabella1" Then
                DoCmd.DeleteObject acTable, tbx.Name
            End If
        On Error GoTo 0
    Next
    
    End Sub
    NB: il "On Error Resume Next" lo ho messo perché in caso di
    clik ripetuto sullo stesso pulsante andresti a un errore
    in quanto tenta di eliminare una tabella inesistente
    ..... Il TableDefs si aggiorna alla prossima apertura del DB

    Facci sapere

    .
    Che dire... Per adesso grazie! Lunedì provo e vi faccio sapere...

  4. #4
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Quote Originariamente inviata da emmeastudio2016 Visualizza il messaggio
    ......Lunedì provo ......
    Permettimi di perfezionare,

    Quel "On Error Resume Next" non mi piace,
    ma pero possiamo forzare l'aggiornamento del TableDefs

    poi avevo dimenticato la chiusura degli oggetti

    cosi dovrebbe funzionare meglio:
    codice:
    Private Sub EliminaTabelle2()
    
    Dim DBx As DAO.Database
    Set DBx = DBEngine(0)(0)
    Dim tbx As DAO.TableDef
    
    DBx.TableDefs.Refresh
    
        For Each tbx In DBx.TableDefs
            If Left(tbx.Name, 4) <> "MSys" And tbx.Name <> "tabella1" Then
                DoCmd.DeleteObject acTable, tbx.Name
            End If
        Next
    
    DBx.Close
    Set DBx = Nothing
    
    '  Magari qui aggiungi un bel
    '    Me.NomePulsante.Enabled = False
    '  cosi ti assicuri che non venga premuto decine di volte
    
    End Sub

  5. #5
    Graizie, ho provato il codice e funziona perfettamente.! Grazie ancora

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.