Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Visual Basic 6 - velocizzare aggiornamento da vb6 di una tabella di sql server 2005 express
Forum - Visual Basic 6 - velocizzare aggiornamento da vb6 di una tabella di sql server 2005 express

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
piter123 (Normal User)
Pro


Messaggi: 145
Iscritto: 21/05/2008

Segnala al moderatore
Postato alle 19:57
Sabato, 14/04/2012
Salve, con il seguente codice aggiorno una tabella
di un database di sql server express 2005.
La matrice PROVA è :  dim PROVA(1 TO 4, 1 TO 5000) as variant
ed è composta da Data, Ora, Dato1 e dato 2.
Il problema è che ci mette 10 secondi per aggiornarla.
Esiste gentilmente un sistema più rapido



Dim I As Integer
Dim cn As New ADODB.Connection
Dim SQL As String

'APRE DATABASE
  cn.Open _
  "Provider =sqloledb ;" & _
  "Data Source=SERVER\SQLEXPRESS;" & _
  "Initial Catalog=" & NOMEDATABASE & ";" & _
  "User ID=UTENTE;" & _
  "Password=PASSWORD;"

'AGGIORNA TABELLA
For I = 1 To 5000
  SQL = "UPDATE " & NOMETAB & " SET " _
  & "DATA = '" & PROVA(1, I) & "', " _
  & "ORA = '" & PROVA(2, I) & "', " _
  & "DATO1 = '" & PROVA(3, I) & "', " _
  & "DATO2 = '" & PROVA(4, I) & "' " _
  & "WHERE id = " & I
  cn.Execute (SQL)
Next I

'CHIUDE DATA BASE
cn.Close

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6403
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 21:53
Sabato, 14/04/2012
La mia domanda è ... ma perché mai fai questo strano aggiornamento?

Perché aggiorni 5000 record in una sola volta?

Ovvero, per farti capire, quello che fai non ha senso ...


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
piter123 (Normal User)
Pro


Messaggi: 145
Iscritto: 21/05/2008

Segnala al moderatore
Postato alle 9:43
Domenica, 15/04/2012
dunque, la matrice di 5000*4 campi viene aggiornata in continuazione.
I campi della matrice non hanno mai lo stesso valore, ne deriva il fatto che il database deve essere sempre aggiornato con i valori della matrice.

nella vita tutto ha un senso che è dettato dalle nostre esigenze personali.

PM Quote
Avatar
piter123 (Normal User)
Pro


Messaggi: 145
Iscritto: 21/05/2008

Segnala al moderatore
Postato alle 11:22
Domenica, 15/04/2012
ho provato con oggetto adodc ma il risultato addirittura peggiora, magari sbaglio io in qualcosa.

Dim I As Integer , X As Integer
Dim cn As New ADODB.Connection
Dim SQL As String

'APRE DATABASE
  cn.Open _
  "Provider =sqloledb ;" & _
  "Data Source=SERVER\SQLEXPRESS;" & _
  "Initial Catalog=" & NOMEDATABASE & ";" & _
  "User ID=UTENTE;" & _
  "Password=PASSWORD;"


Adodc1.ConnectionString = cn
Adodc1.RecordSource = "SELECT * FROM " & NOMETAB

Adodc1.Recordset.MoveFirst
For I = 0 To 5000 - 1                     'RECORD    RIGA
    For X = 0 To 4                            'CAMPI       COLONNA
         If X <> 0 Then
                Adodc1.Recordset(X) = PROVA(X, I + 1)
             Else
                Adodc1.Recordset(X) = I + 1
          End If
     Next X
     Adodc1.Recordset.Update
     Adodc1.Recordset.MoveNext
     DoEvents
Next I

'CHIUDE DATA BASE
cn.Close


PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6403
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 11:39
Domenica, 15/04/2012
Testo quotato

nella vita tutto ha un senso che è dettato dalle nostre esigenze personali.



Non è così. Molte volte si cercano delle soluzioni a problemi che ci creiamo perché non sappiamo che potrebbero essere affrontati diversamente.

Prova a descrivere meglio il problema dell'aggiornamento della matrice ... perché hai in memoria tutti quei dati ? Perché non aggiorni direttamente sul DB quelli che si aggiornano in un determinato momento invece di scaricarli tutti ? Ti serve proprio un DB o devi solamente salvare su disco il contenuto della matrice ?

Ultima modifica effettuata da nessuno il 15/04/2012 alle 11:40


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
ampeg (Normal User)
Pro


Messaggi: 124
Iscritto: 21/04/2011

Segnala al moderatore
Postato alle 11:50
Domenica, 15/04/2012
hai provato a scrivere i dati su un file ed importarlo con il comando BULK INSERT ?

con Sql Server è possibile importare in blocco i dati da un file, quindi potresti scrivere i dati su un file di testo, eliminare tutti i record con "DELETE FROM TABELLA" e importare il file creato con la BULK INSERT

PM Quote
Avatar
piter123 (Normal User)
Pro


Messaggi: 145
Iscritto: 21/05/2008

Segnala al moderatore
Postato alle 12:49
Domenica, 15/04/2012
adesso senza voler fare troppa polemica ho bisogno di idee e di codici, non di assurde domande su cosa devo fare e il perchè lo devo fare o se devo proprio usare un db, saranno .... miei.
E quindi a tal proposito ringrazio ampeg. Si potrebbe essere un'idea infatti pensavo a qualcosa per caricare in blocco la matrice ma non sapevo come, proverò con BULK INSERT, ancora grazie.

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6403
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 13:12
Domenica, 15/04/2012
Testo quotato

Postato originariamente da piter123:

adesso senza voler fare troppa polemica...



Ok ... forse non mi sono spiegato bene io ... non importa.


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 13:33
Domenica, 15/04/2012

purtroppo i sistemi informatici sono ottimizzati per fare cose sensate, e purtroppo quella che vuoi fare te non lo è molto :)

tendenzialmente quando vuoi fare qualcosa di semplice ed il software non ti sta dietro è perchè lo stai facendo sbagliato, questa è una regola di vita del programmatore XD

considera che le update generate in questo modo sono veramente inefficienti, molto meglio sarebbe fare una bulk come ti è stato consigliato, ma cmq non spostiamo il problema sul fatto che "fatto così" non è furbo.

se ci dai maggiori informazioni sullo scenario di utilizzo di questo snippet di codice possiamo aiutarti meglio, nessuno è qui per fare polemica :)

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo