Newsgroup: it.comp.lang.visual-basic
Titolo: Eliminare contenuto di una tabella velocemente

Ciao a tutti intanto,
Sto sviluppando un programmino in access 2000 e ho un piccolo problemino di
velocita', mi spiego meglio:
il programma e fatto da due mdb, uno con i dati che deve essere messo sul
server, e uno che deve essere su ogni pc della rete, in quest'ultimo c'e'
una tabella in qui e' inserito il path del server (es.
\\server\discoC\database.mdb)
e il problema e quello di dover eliminare i contenuto di una tabella
velocemente (circa 3000 record) senza usare una query di eliminazione in
quanto non e' possibile collegare le tabelle (il path non e' sempre lo
stesso) e quindi devo farlo con una ricerca SQL e poi per ogni record del
recordset faccio rst.delete.
Preciso che tutto funziona regolarmente pero' non e' super veloce, avete un
idea per accelerare la cosa?
il codice che uso attualmente e questo:
For i = 1 To rst.RecordCount
rst.Edit
rst.Delete
rst.MoveNext
Next i
grazie a tutti.
Ricky

 sbaglio)
infatti.
se riesci a fare il ciclo, in cui peraltro anche a me edit sembra inutile,
dovresti poter fare anche qc tipo:
    str = "DELETE rs.* FROM rs;"
    MainDB.Execute str
ciao, a.

Ciao così non stravolgi le cose, ma ottimizzi il codice che hai scritto, non
ho idea del tempo che risparmi, credo non moltissimo.
   With rst
      a = .recordcount
      For i = 1 To a
         .Delete
         .MoveNext
      Next i
   End With
P.S. quanto tempo impiega la funzione? Prima e dopo
Luca

 Ciao cosě non stravolgi le cose, ma ottimizzi il codice che hai scritto,


 Next i
non so se ho capito bene... non puoi usare DELETE come query SQL?
perché fai rst.Edit? (non mi pare che sia necessario... magari però mi
sbaglio)
Faber

Giovanni
Prova in questo modo
Db.Execute "Delete from [inserire nome tabella]"
Elimina l'intero contenuto della tabella
Db.Execute "Delete * from [inserire nome tabella] Where [inserire nome
campo] = " & [inserire condizione]
Elimina tutto il contenuto del campo specificato nella clausola Where
rispettando la condizione imposta dalla clausola stessa
Esempio
Db.Execute "Delete * From Anagrafica  Where  Nome = 'Mario'"
Elimina dalla tabella Anagrafica tutti coloro che possiedono nel campo nome
il valore Mario
Ciao, fammi sapere

 Ricky
Ciao.
E' la prima volta che mi connetto a questo NG.
Mi permetto di dare subito una risposta solo perche' la domanda, a mio
avviso, era piu' adatta a it.comp.appl.access (il NG cui solitamente mi
collego) che non a questo che e' dedicato a visual basic.
Tu dici che non puoi fare una query di eliminazione perche' la tabella non
e' collegata, ecc., ecc....
Poi, pero', apri un recordset e usi un ciclo che scorre tutti i record per
eliminarli uno a uno.
Fai un errore di fondo: se puoi aprire un recordset (dove ovviamente hai
usato una istruzione SQL) allora puoi scrivere una query di eliminazione:
DoCmd.RunSQL "DELETE ..."
dove, al posto dei puntini, vai a mettere tutto cio' che segue la parola
SELECT nell'istruzione che usi per aprire il recordset.
Ciao, Sib

poi usare come recordsource "DELETE * FROM tabella WHERE ..." come se
fosse una select e poi apri il recordset.
esegue l'operazione e il recordset rimane chiuso.
Anche io sto sviluppando su un mdb di Access 2000. Occhio che cresce
di dimensioni più velocemente della versione 97.
ciao e buon lavoro


