Condividi:
Problemi di HTML? Di PHP, ASP, .NET, JSP, Perl, SQL, JavaScript, Visual Basic..?
Vuoi realizzare programmi in C, C++, Java, Ruby o Smalltalk, e non sai da che parte cominciare?
Entra qui e troverai le risposte!
Moderatori: Anthony47, Triumph Of Steel, archimede
di piter123 » 30/03/11 08:26
salve, dovrei scrivere un serie di 70.000 dati su 7 colonne su un database access, ho provato una simulazione con il seguente codice ma ci impiega una vita a completarlo, esiste un metodo più veloce, grazie
- Codice: Seleziona tutto
Option Explicit
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim SQL As String
Private Sub Command2_Click()
'DICHIARAZIONE VARIABILI
Dim I As Integer
Dim DATO As Variant
'APRE FILE ACCESS
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
cn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=database.mdb"
'SALVA DATI
For I = 1 To 10000
DATO = CDate("01/01/2001")
SQL = "UPDATE Dati SET " & "C1= '" & Replace(DATO, "'", "''") & "' " & "WHERE id = " & I: cn.Execute (SQL)
DATO = Time
SQL = "UPDATE Dati SET " & "C2= '" & Replace(DATO, "'", "''") & "' " & "WHERE id = " & I: cn.Execute (SQL)
DATO = 1000
SQL = "UPDATE Dati SET " & "C3= '" & Replace(DATO, "'", "''") & "' " & "WHERE id = " & I: cn.Execute (SQL)
DATO = 505.5
SQL = "UPDATE Dati SET " & "C4= '" & Replace(DATO, "'", "''") & "' " & "WHERE id = " & I: cn.Execute (SQL)
DATO = 700.8
SQL = "UPDATE Dati SET " & "C5= '" & Replace(DATO, "'", "''") & "' " & "WHERE id = " & I: cn.Execute (SQL)
DATO = 351.52
SQL = "UPDATE Dati SET " & "C6= '" & Replace(DATO, "'", "''") & "' " & "WHERE id = " & I: cn.Execute (SQL)
DATO = 0.125
SQL = "UPDATE Dati SET " & "C7= '" & Replace(DATO, "'", "''") & "' " & "WHERE id = " & I: cn.Execute (SQL)
Next I
cn.Close
End Sub
-
piter123
- Utente Senior
-
- Post: 190
- Iscritto il: 07/11/07 18:31
di archimede » 30/03/11 09:03
Così dovrebbe essere meglio:
- Codice: Seleziona tutto
Option Explicit
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim SQL As String
Private Sub Command2_Click()
'DICHIARAZIONE VARIABILI
Dim I As Integer
Dim DATO As Variant
'APRE FILE ACCESS
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
cn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=database.mdb"
'SALVA DATI
For I = 1 To 10000
DATO = CDate("01/01/2001")
SQL = "UPDATE Dati SET C1='" & Replace(DATO, "'", "''") & "' "
DATO = Time
SQL = SQL & ", C2='" & Replace(DATO, "'", "''") & "'"
DATO = 1000
SQL = SQL & ", C3='" & Replace(DATO, "'", "''") & "'"
DATO = 505.5
SQL = SQL & ", C4='" & Replace(DATO, "'", "''") & "'"
DATO = 700.8
SQL = SQL & ", C5='" & Replace(DATO, "'", "''") & "'"
DATO = 351.52
SQL = SQL & ", C6='" & Replace(DATO, "'", "''") & "'"
DATO = 0.125
SQL = SQL & ", C7='" & Replace(DATO, "'", "''") & "' WHERE id = " & I: cn.Execute (SQL)
Next I
cn.Close
End Sub
Mi sfugge perché usi Replace e gli apici con campi numerici o data: io eviterei, ma se così ti funziona...
HTH.
Alessandro
-
archimede
- Moderatore
-
- Post: 2851
- Iscritto il: 07/11/02 12:41
- Località: Genova
-
di archimede » 30/03/11 09:10
Se devi scrivere 10000 records identici, così è anche meglio:
- Codice: Seleziona tutto
Option Explicit
Dim cn As ADODB.Connection
Dim SQL As String
Dim SQL2 As String
Private Sub Command2_Click()
'DICHIARAZIONE VARIABILI
Dim I As Integer
Dim DATO As Variant
'APRE FILE ACCESS
Set cn = New ADODB.Connection
cn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=database.mdb"
DATO = CDate("01/01/2001")
SQL = "UPDATE Dati SET C1='" & Replace(DATO, "'", "''") & "' "
DATO = Time
SQL = SQL & ", C2='" & Replace(DATO, "'", "''") & "'"
DATO = 1000
SQL = SQL & ", C3='" & Replace(DATO, "'", "''") & "'"
DATO = 505.5
SQL = SQL & ", C4='" & Replace(DATO, "'", "''") & "'"
DATO = 700.8
SQL = SQL & ", C5='" & Replace(DATO, "'", "''") & "'"
DATO = 351.52
SQL = SQL & ", C6='" & Replace(DATO, "'", "''") & "'"
DATO = 0.125
SQL = SQL & ", C7='" & Replace(DATO, "'", "''") & "'"
'SALVA DATI
For I = 1 To 10000
SQL2 = SQL & " WHERE id = " & I
cn.Execute (SQL2)
Next I
cn.Close
End Sub
Alessandro
-
archimede
- Moderatore
-
- Post: 2851
- Iscritto il: 07/11/02 12:41
- Località: Genova
-
di piter123 » 30/03/11 09:27
intanto grazie, dici così
SQL = SQL & ", C2='" & DATO & "'"
al posto di
SQL = "UPDATE Dati SET " & "C2= '" & Replace(DATO, "'", "''") & "' " & "WHERE id = " & I: cn.Execute (SQL)
la risposta è semplicemente perchè sono un pollo.
Ho provato il codice, ci mette circa 20/25 secondi ad eseguirlo, putrtoppo ancora eccessivo.
Esiste un sistema di copia incolla matrici come su excel che elimina quindi il ciclo for next di scrittura ?
-
piter123
- Utente Senior
-
- Post: 190
- Iscritto il: 07/11/07 18:31
di piter123 » 30/03/11 09:42
no no i record in realtà non saranno identici, ci sara una matrice matr(7,10000) con dati diversi, il codice che stò provando è per rendermi conto delle velocità di gestione letturta scrittura e se utilizzare un dbm rispetto a un txt
-
piter123
- Utente Senior
-
- Post: 190
- Iscritto il: 07/11/07 18:31
di archimede » 30/03/11 10:08
piter123 ha scritto:Ho provato il codice, ci mette circa 20/25 secondi ad eseguirlo, putrtoppo ancora eccessivo.
10000 righe in 25 secondi significa 400 righe al secondo. Non mi pare così male.
il codice che stò provando è per rendermi conto delle velocità di gestione letturta scrittura e se utilizzare un dbm rispetto a un txt
Con un txt è più veloce?
Alessandro
-
archimede
- Moderatore
-
- Post: 2851
- Iscritto il: 07/11/02 12:41
- Località: Genova
-
di archimede » 30/03/11 10:24
piter123 ha scritto:ci sara una matrice matr(7,10000) con dati diversi
Da dove provengono (in che formato sono originariamente) questi dati?
Alessandro
-
archimede
- Moderatore
-
- Post: 2851
- Iscritto il: 07/11/02 12:41
- Località: Genova
-
di piter123 » 30/03/11 12:25
sono dati che vengono letti da una altro file dbm (per la lettura ci impiega 1 secondo).
Gestendo in txt sia per lettura che scrittura ci impiega sempre 1 secondo e non è un modo di dire.
-
piter123
- Utente Senior
-
- Post: 190
- Iscritto il: 07/11/07 18:31
di archimede » 30/03/11 13:02
piter123 ha scritto:sono dati che vengono letti da una altro file dbm
File dbm sarebbe un altro database Access?
Alessandro
-
archimede
- Moderatore
-
- Post: 2851
- Iscritto il: 07/11/02 12:41
- Località: Genova
-
Torna a Programmazione
Topic correlati a "[VB6]Scrittura dati su db Access":
Chi c’è in linea
Visitano il forum: Nessuno e 5 ospiti