Ciao,
ho creato una procedura per caricare in un db access il dettaglio della bolletta telefonica per poi eseguire delle query:
il codice funziona senza nessun problema, ma essendo una bolletta la bellezza di 2 milioni di righe, un import risulta molto lento.
Volevo sapere se qualcuno riesce a darmi qualche consiglio per ottimizzare il codice
codice:
Private Sub Command2_Click()
Set conn = New ADODB.Connection
conn.ConnectionString = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=C:\Documents and Settings\davide.gaulli\My Documents\autogrill\grill.mdb"
conn.Open
Dim linea As New ADODB.Recordset
Dim dettagli As New ADODB.Recordset
Dim chiamati As New ADODB.Recordset
Dim presente As Boolean
Dim identif As Integer
Dim txfile() As String
Query = "select * from linea;"
linea.Open Query, conn, adOpenKeyset, adLockReadOnly
Query = "select * from dettagli_traffico;"
dettagli.Open Query, conn, 3, 3
Query = "select * from chiamati;"
chiamati.Open Query, conn, 3, 3
Open "C:\Documents and Settings\davide.gaulli\My Documents\primobimestre.txt" For Input As #1
Do While Not EOF(1)
Line Input #1, record
txfile = Split(record, ";")
linea.MoveFirst
Do While Not linea.EOF
If linea("numero") = txfile(0) Then
presente = True
identif = linea(0)
Exit Do
End If
linea.MoveNext
Loop
If presente = True Then
dettagli.AddNew
dettagli("idlinea") = identif
dettagli("tipologia") = txfile(3)
dettagli("data-ora") = CDate(datizza((txfile(5)))) & " " & CDate(txfile(6))
dettagli("durata") = CDbl(txfile(7))
dettagli("costo") = CCur(txfile(9))
verifica = False
chiamati.MoveFirst
Do While Not chiamati.EOF
If txfile(8) = chiamati("numero") Then
verifica = True
Exit Do
End If
chiamati.MoveNext
Loop
If verifica = False Then
cont = cont + 1
chiamati.AddNew
chiamati("idchiamato") = cont
chiamati("numero") = txfile(8)
chiamati.Update
End If
dettagli("idchiamato") = chiamati("idchiamato")
dettagli.Update
End If
presente = False
Loop
Close #1
End Sub
Private Function datizza(la_data As String)
'Function per ottenere la data
datizza = Mid(la_data, 7, 2) & "/" & Mid(la_data, 5, 2) & "/" & Mid(la_data, 1, 4)
End Function
Ad esempio, potrebbe velocizzare l'esecuzione dello scipt indicare il campo del record da aggiornare con il valore numerico invece che con il suo nome?
es
dettagli(0) = 1 invece che dettagli("id") = 1
vi rigrazio in anticipo.
Ciao