Definire nome colonna tabella automaticamente

di il
4 risposte

Definire nome colonna tabella automaticamente

Salve a tutti,
ho un problema nell'importare dati da excel.
In pratica devo importare una tabella da excel in cui i nomi delle colonne possono variare; tramite macro importo il foglio excel in una tbl temporanea e poi copio solo le colonne che mi interessano nella tabella definitiva. Quando però faccio l'append gli vorrei dire di prendere la colonna numero 17 e 18 della tabella temporanea. E' possibile farlo senza l'utilizzo di un recordset?

Allego il codice (errato):
CurrentDb.Execute "INSERT INTO agreement ( Material, Valueyear1, Valueyear2, itemc ) SELECT Table5.Material, Table5.[" & table5.Fields(17).Name & "], Table5.[" & table5.Fields(18).Name & "], Table5.[Item Category] FROM Table5;"
Grazie per l'aiuto.

4 Risposte

  • Re: Definire nome colonna tabella automaticamente

    Si può fare tutto... ma hai solo 2 modi per farlo... il primo è MANUALMENTE, guardi quello che ti serve e costruisci la Query di APPEND a mano...
    Il secondo è farlo con un Wizzard Guidato che ti mostri i dati e ti consenta di definire ed associare il Campo di Origine e quello di Destinazione, ovvero cosa Copiare e dove...
    Purtroppo se pensavi che questo fosse già fatto rimarrai delusa... non c'è e devi fartelo tu...!
    La cosa è fattibile, ma serve un po di dimestichezza e metodo... e dervi valutare tu se ne vale la pena e se ne sei capace... perchè non ho detto che è banale, anzi è "RELATIVAMENTE" semplice... ed il peso del relativo dipende da te...
  • Re: Definire nome colonna tabella automaticamente

    Il problema è che il DB verrà usato da utenti che non conoscono Access quindi devo cercare di rendere il tutto automatico, se creo un recordset della tbl temporanea riesco ad indicizzare le colonne?
  • Re: Definire nome colonna tabella automaticamente

    eleonora92 ha scritto:


    Il problema è che il DB verrà usato da utenti che non conoscono Access quindi devo cercare di rendere il tutto automatico, se creo un recordset della tbl temporanea riesco ad indicizzare le colonne?
    Non fare domande fini a se stesso... la risposta è SI ma non hai alcuna corrispondenza visibile, figurati l'utente cosa ci capisce...!

    Se vuoi sviluppare un WIzzard di importazione credo tu debba ragionare in modo sistemico e renderti conto che una cosa simile è di fatto una piccola applicazione...!!!!

    Devi avere modo di vedere cosa il documento mette a disposizione, consentire all'utente di comprendere, selezionare ed associare..., da questo lo sviluppatore crea il codice per fare una Query INSERT corretta.

    Una volta che hai importato il Foglio di Excel, inclusi i NOMI CAMPI che troverai nella prima riga, usando la funzione TransfertSpreadsheet, puoi visualizzare i dati in una Maschera in modalità foglio dati o maschere continue, contenuta nella Form di Gestione del Wizard.
    Crei 2 ListBox con la proprietà Tipo Origine Riga = Elenco Valori, poi una le popoli una con l'elenco campi della Tabella di Origine e e l'altra con l'elenco dei campi della Tabella di Destinazione.
    
    Function FillListBox(myList As Access.ListBox, TableName As String)
        Dim rs As DAO.Recordset
        Dim fld  As DAO.Field
        myList.RowSourceType = "Value List"
        Set rs = DBEngine(0)(0).OpenRecordset("SELECT * FROM " & TableName & " WHERE 1=0", dbReadOnly)
        For Each fld In rs.Fields
           myList.AddItem fld.Name
        Next
    End Function
    
    Questa Funzione chiamata in questo modo dalla MainForm:
    
    Private Sub Form_Load()
        Call FillListBox(Me.ListBoxOrigine, "TabellaOrigine")
        Call FillListBox(Me.ListBoxDestinazione, "TabellaDestinazione")
    End Sub
    Ora ti trovi con 2 ListBox con l'elenco dei Campi... devi associarle... quindi ti serve una Tabella di Associazione con 2 Campi PK di tipo Testo.
    CampoOrigine
    CampoDestinazione
    Questa Tabella la devi popolare selezionando un Item da ogni ListBox ed inserendoli nella Tabella di Associazione, a quel punto devi RIMUOVERE gli Item appena inseriti nelle 2 ListBox di Selezione, oppure dovrai gestire gli errori successivi dovuti a Selezioni diverse già esistenti o doppie...

    Finita la compilazione della Tabella di associazione, puoi costruire la QUery di INSERT andando a leggere la Tabella stessa, e ciclandola...

    Tutto questo per farti capire che devi RIFLETTERE BENE... ma non puoi pensare di fare una cosa simile appoggiandoti al Forum... se tu non hai le basi per comprendere bene ed analizzare tecnicamente il problema.
  • Re: Definire nome colonna tabella automaticamente

    Ok credo di aver capito come gestire la cosa, grazie mille non avevo proprio pensato a questa soluzione!
Devi accedere o registrarti per scrivere nel forum
4 risposte