Ciao a tutti,
ho un problema che mi assilla gia' da qualche giorno.


Ho un file excel contenente alcuni dati di fatture ricevute. I campi sono:
codice:
data | fattura (numero fattura) | ditta | importo fattura | bolla (DDT) | data bolla | Note | data1 | data2 | data3 | data4 | data5 | data6 | importo1 | importo2 | importo3 | importo4 | importo5 | importo6 | pag1 | pag2 | pag3 | pag4 | pag5 | pag6

Questo file lo devo importare in un nuovo DB Access che ha le seguenti Tabelle


codice:
 
tbl_aziende 
  |----ID (Auto increment)
  |----azienda (testo)
  |---- ecc...


tbl_bolle
 |--- ID (Auto increment)
 |--- id_fattura (id da tbl_fatture)
 |--- data_bolla (datetime)
 |--- num_bolla (testo)


tbl_pagamenti
 |--- id(Auto increment)
 |--- id_fattura
 |--- data (datetime)
 |--- importo (valuta)
 |--- has_pagato (bool)


tbl_fatture
 |--- id 
 |--- id_azienda (id da tbl_aziende)
 |--- data_fattura
 |--- num_fattura
 |--- importo

Quello che devo riuscire a fare e':
importare ogni riga del file excel nelle varie tabelle del DB e mantenere ovviamente i riferimenti.
I campi data[1-6], importo[1-6], pag[1-6] sono (se compilate) 6 righe diverse della tabella tbl_pagamenti che dovranno puntare alla stesso id_fattura.


Voi direte: e che ci vuole.... ecco appunto: che ci vuole???


Sono piu' pratico con PHP/MYSQL che con ACCESS/VBA quindi comprenderete che non mi e' proprio facile.


Vi spiego cosa ho pensato:

  1. Prima faccio una query di accodamento alla tbl_aziende con un select distinct (Si, essendo un file excel il nome di una singola azienda e' presente piu' volte)
  2. poi con un ciclo, leggo ogni riga del file excel
  3. di ogni riga: eseguo un insert alla tbl_fatture dei campi corrispondenti
  4. eseguo un insert sulla tabella tbl_bolle dei campi corrispondenti
  5. con un nuovo ciclo, da ripetere 6 volte, controllo se i campi data, importo e pag sono diversi da null e in caso contrario faccio tanti insert in tbl_pagamenti quanti sono i campi compilati




Ovviamente per gli ultimi 2 punti devo riuscire a scrivere in maniera corretta l'id_fattura corrispondente....


E adesso vi spiego cosa ho fatto:
codice:
Public Sub ImportaDatiExcel()
 
' Dichiaro il Recordset e la variabile per la Query
Dim ThisDB As DAO.Database
Dim oRSet As DAO.Recordset
Dim AziendaID As DAO.Recordset
Dim AziendaSQL As String
Dim SQL As String


 
' Assegno un nuovo Recordset
Set ThisDB = CurrentDb
Set oRSet = ThisDB.OpenRecordset("sdtab", dbOpenDynaset)
 
' Creo la query per reperire i dati sul foglio Excel
'SQL = "SELECT * FROM sdtab"
'oRSet.Open SQL, CurrentDb
 
 
 
' Mediante un ciclo, scorro tutto il Recordset
' compiendo una serie di INSERT sulla tabella
' di destinazione appena creata
With oRSet
    While Not .EOF
        'AziendaSQL = "SELECT azienda.ID FROM Azienda WHERE azienda.rag_sociale = lube" ' & oRSet.Fields("Ditta")
        Set AziendaID = ThisDB.OpenRecordset("SELECT azienda.ID FROM Azienda WHERE azienda.ID = 1")
        
        'Dim Note As String
        'Note = FixQuote(oRSet.Fields("Note"))
        
        SQL = "INSERT INTO fatture ( Azienda, data_fattura, num_fattura, importo_fattura, note_fattura ) VALUES (" & _
            "'" & AziendaID.Fields("ID").Value & "', '" & _
                 oRSet.Fields("Data").Value & "', '" & _
                 oRSet.Fields("Fattura").Value & "', '" & _
                 oRSet.Fields("Importo Fattura").Value & "', '" & _
                 oRSet.Fields("Note").Value & "')"
           
               
        CurrentProject.Connection.Execute SQL
        oRSet.MoveNext
    Wend
End With
 
' Chiudo il Recordset e annullo l'oggetto
oRSet.Close
Set oRSet = Nothing
 
End Sub

Per semplificarmi il tutto, anziche lavorare direttamente sul file excel, ho importato il foglio che mi serviva in una tabella access e da quella faro' l'import.

Sono fermo al primo insert e gia' vorrei prendere a martellate tutto quanto.


A questo punto vi chiedo:
1) cosa vedete di sbagliato nel codice che ho postato?
2) come faccio a tenere traccia dell'id_fattura nei vari inserimenti?


Si accettano suggerimenti.


Grazie a tutti


Se volete vedere il file excel di prova