Newsgroup: it.comp.lang.visual-basic
Titolo: INVITO: STATISTICA PRESTAZIONI UPDATE db con ADO

Ciao tutti,
    ringrazio quanti mi hanno aiutato a risolvere svariati problemucci. Me
ne rimane uno e non son sicuro che sia un vero e proprio problema. LA
LENTEZZA degli aggiornamenti di un db Access 2000 con VB usando ADO!!! Le
prestazioni che registro sono queste: 9 secondi per aggiornare UN byte in 32
posizioni!!!
    Che ne dite di fare una statistica così capisco/capiamo se ho un
problema (di codice, di macchina) o ADO, VB, Access sono davvero così
inutili. Perchè il tempo che mi attenderei per una operazione del genere è
dell'ordine dei microsecondi se non meno! L'invito: su un db semplice che
già avete o su uno con una sola tabella popolata con 32 elementi provate a
fere 32 aggiornamenti su 32 posizioni diverse con una query (chiamata 32
volte): quanto tempo impiega!?!!??!
    Grazie son proprio curioso!!!
                Federico.

 volte): quanto tempo impiega!?!!??!
Mi permetto di consigliarti in questo senso:
Cerca sul Sito Comune VBDAOADO e provalo sul database incriminato e su un
altro.
Il progetto non fa alcuna Update (ma, con i sorgenti a disposizione, puoi
inserirla tu), ma puņ servire per vedere i tempi di apertura e selezione da
paragonarsi poi con quelli del tuo programma.
In ogni caso farņ la prova che hai proposto.

Ecco il mio test.
'Creare un database Access (97 o 2000) C:\p97.mdb
'Creare all'interno una tabella con nome T1
'Creare nella tabella un campo con nome b (boolean) e un campo con nome ID
(long autoincrementante)
'Inserire 32 records assegnando 0 (False/Falso) o -1 (True/Vero) al campo b
'Inserire nel progetto un riferimento a ADO (io ho messo 2.5) e incollare il
codice che segue
'(Eventualmente adeguare l'istruzione "For volte = 1 To 1000")
'Lupo - Risultati ottenuti per 1000 volte (5 elaborazioni)
'(XP Pro, Intel Celeron 1.06GHz, 256Mb, HD 20Gb):
'2,52-2,50-2,47-2,51-2,50
Option Explicit
Private Sub Form_Load()
    Dim db As Object
    Dim rs As Object
    Dim tempo_iniziale As Single
    Dim volte As Integer
'       Apertura connessione
    Set db = New ADODB.Connection
    db.Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=C:\p97.mdb;USER
ID=;PASSWORD=;"
'       Apertura recordset
    Set rs = New ADODB.Recordset
    rs.CursorLocation = adUseServer
    rs.Open "Select * From T1", db, adOpenStatic, adLockOptimistic
    If rs.BOF = 0 Or rs.EOF = 0 Then
        tempo_iniziale = Timer
        For volte = 1 To 1000   '<<< Eventualmente adeguare
            rs.MoveFirst
            Do
                If rs.EOF Then Exit Do
                rs!b = True
                rs.Update
                rs.MoveNext
            Loop
        Next volte
        MsgBox ("Tempo=" & Timer - tempo_iniziale)
    End If
    rs.Close
    Set rs = Nothing
    db.Close
    Set db = Nothing
End Sub

 ha scritto
in tutti i thread di federico, io non ho capito una cosa.
dov'e' il db ? in locale, lan, man, internet ? quante postazioni
devono fare quest'aggiornamento in contemporanea ? e' possibile
prevedere un batch, anche schedulato (bleah!! altro termine a dir poco
acidulato) con at ?
boh
buon fine settimana
--
ciao, j.
www.sundaysw.com
p3/700 laptop (disco lento...), access97, dao 3.51, ado 2.7
con access2k mi sa che i tempi aumenterebbero un po'.
Private Sub Command1_Click()
     Dim tempo_iniziale As Single
     Dim volte As Integer
If optDAO Then
     Dim db As Database, rs As Recordset
    Set db = OpenDatabase("db1.mdb")
    Set rs = db.OpenRecordset("t1")
     If Not rs.BOF = 0 Or rs.EOF = 0 Then
         tempo_iniziale = Timer
         For volte = 1 To 1000   '<<< Eventualmente adeguare
             rs.MoveFirst
             Do
                With rs
                    If .EOF Then Exit Do
                    .Edit
                    !b = True
                    .Update
                    .MoveNext
                End With
             Loop
         Next volte
         MsgBox ("Tempo=" & Timer - tempo_iniziale)
     End If
     rs.Close: Set rs = Nothing
     db.Close: Set db = Nothing
ElseIf optADO Then
     Dim dbA As Object
     Dim rsA As Object
     Set dbA = New ADODB.Connection
     dbA.Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA
SOURCE=C:\vb\prv\db\adodao1\db1.mdb;USER ID=;PASSWORD=;"
     Set rsA = New ADODB.Recordset
     rsA.CursorLocation = adUseServer
     rsA.Open "Select * From T1", dbA, adOpenStatic, adLockOptimistic
     If rsA.BOF = 0 Or rsA.EOF = 0 Then
         tempo_iniziale = Timer
         For volte = 1 To 1000   '<<< Eventualmente adeguare
             rsA.MoveFirst
             Do
                With rsA
                    If .EOF Then Exit Do
                    !b = True
                    .Update
                    .MoveNext
                End With
             Loop
         Next volte
         MsgBox ("Tempo=" & Timer - tempo_iniziale)
     End If
     rsA.Close: Set rsA = Nothing
     dbA.Close: Set dbA = Nothing
End If
End Sub
dao:
1.30
1,30
1,31
1,28
1,30
ado:
3,46
3,39
3,42
3,50
3,47

 Ciao tutti,
Ti sto preparando un programmino abbi fede!!!!
:-)

 wrote in message
Ipml9.155903$ub2.3...@news1.tin.it...
