Oppure

Loading
20/11/12 17:56
piter123
salve, esiste un metodo più veloce al banalissimo codice che ho scritto
per salvare una certa quantità di record ?
Grazie

Dim I As Integer
Dim con As New OleDbConnection
con.ConnectionString = "provider= Microsoft.jet.oledb.4.0; data source =" & _
Application.StartupPath & "\Prova.mdb"
con.Open()
Dim cmd As New OleDbCommand
cmd.Connection = con
cmd.CommandType = CommandType.Text
For I = 1 To 3000
cmd.CommandText = "UPDATE tab1 SET " _
& "C1 = '" & Sto(1, 1, I, 1) & "', " _
& "C2 = '" & Sto(1, 1, I, 2) & "', " _
& "C3 = '" & Sto(1, 1, I, 3) & "', " _
& "C4 = '" & Sto(1, 1, I, 4) & "' " _
& "WHERE id = " & I
cmd.ExecuteNonQuery()
Next
con.Close()
aaa
20/11/12 18:33
Dipende da quello che fa la funzione

Sto

di cui non sappiamo nulla
20/11/12 20:48
piter123
sto è una matrice con queste dimensioni sto(7,4,5000,4) che viene generata dall'unione di altre matrici.
Il codice sotto descritto è una parte di un ciclo che dovrà salvare i record in 7 * 4 = 28 tabelle access.
Da quì se ci impiega cirva 15 secondi a salvare una singola tabelle ne evince che 15 secondi * 28 tabelle diventa un tempo spropositato.
aaa
20/11/12 20:58
Perdona la domanda ... ma a cosa servono 28 tabelle !? E che dati ci metti dentro ??

Non ho mai incontrato in vita mia un db fatto in questo modo ... molto probabilmente stai affrontando in maniera sbagliata il tuo problema ...
21/11/12 7:21
piter123
si tratta di uno storico dati, 7 rilevazioni a tempi diversi.
per cui la matrice sto(7 titoli, 4 rilevazioni diverse, 5000 la qtà dei dati, 4 i tipi di dati) .
Li devo poi salvare su tabelle diverse e precisamente su 1 tabella per ogni titolo
con relativo tempo di rilevazione per cui 7*4 = 28 tabelle, ogni tabella ha al suo interno
5000 righe (qta dati) disposte su 4 colonne (tipo di dato).
Prima li salvavo in txt e ci impiegava una sciocchezza in termini di tempo, mi piacerebbe però
ora poterli salvare in access, più facili da consultare visivamente, ma in access con il codice che ho scritto ci impiega una marea di tempo.


Ultima modifica effettuata da piter123 26/11/12 6:17
aaa
21/11/12 9:39
piter123
dunque...
la tabella access in realtà ha 5000 righe, di queste 5000 non ho realmente la necessità di
riscriverle con record diversi, ma ad esempio ho la necessità di spostare i record che vanno
dalla riga 1 alla riga 5000 nella pozione dalla riga 10 alla riga 4990 perdendo quindi le ultime
10 righe (in sostanza ho bisogno di traslarle per esempio di 10 righe), mi restano quindi libere
le prime 10 righe dove andrò a scrivere i record con i nuovi dati.

Potrebbe essere più veloce una soluzione di questo tipo ? e se si esiste un comando che mi
sposti in blocco i record delle righe ?

Grazie
aaa
21/11/12 10:57
Parli di "posizioni" di righe in un DB ma la cosa non ha alcun senso.

In un DB di tipo relazionale la posizione fisica delle righe non ha (e non deve avere) nessuna importanza.

Fammi un esempio di alcuni record ...
21/11/12 12:43
piter123
adesso per esempio:

ID, C1, C2, C3, C4
1 11 15 18 3
2 10 56 67 8
3 4 7 2 1
4 61 6 8 2
5 2 7 8 12
6 27 32 15 19
...
5000 4 89 21 3


dopo: sposto i record oppure rinomino id e aggiungo righe vuote.
Poi dentro le righe vuote ci inserisco i record


ID, C1, C2, C3, C4
1
2
3
4 11 15 18 3
5 10 56 67 8
6 4 7 2 1
7 61 6 8 2
8 2 7 8 12
9 27 32 15 19
...
5000 34 33 5 3


aaa