Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

[VB6]Scrittura dati su db Access

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: Triumph Of Steel, archimede

[VB6]Scrittura dati su db Access

Postdi 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

Sponsor
 

Postdi 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: 2755
Iscritto il: 07/11/02 12:41
Località: Genova

Postdi 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: 2755
Iscritto il: 07/11/02 12:41
Località: Genova

Re: [VB6]Scrittura dati su db Access

Postdi 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

Re: [VB6]Scrittura dati su db Access

Postdi 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

Postdi 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: 2755
Iscritto il: 07/11/02 12:41
Località: Genova

Postdi 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: 2755
Iscritto il: 07/11/02 12:41
Località: Genova

Re: [VB6]Scrittura dati su db Access

Postdi 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

Postdi 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: 2755
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 7 ospiti