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:
- 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)
- poi con un ciclo, leggo ogni riga del file excel
- di ogni riga: eseguo un insert alla tbl_fatture dei campi corrispondenti
- eseguo un insert sulla tabella tbl_bolle dei campi corrispondenti
- 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