Newsgroup: it.comp.appl.access
Titolo: Cancellare tutti i record di un recordset con ADO

Ciao a tutti. Ho iniziato a programmare secondo il codice ADO, ed ho già 
trovato delle difficoltà su una cosa banale. Ho delle tabelle che devo 
svuotare, e non riesco a utilizzare nel modo corretto il comando Delete.
Ho scritto il seguente codice ma non funziona, qualcuno mi può aiutare? la 
riga "rstRoySched.Delete adAffectAll" mi genera un errore, in efetti 
nell'help non è possibile associare la costante adAffectAll. Se la 
sostituisco con "rstRoySched.Delete" ed eseguo l'istruzione successiva mi 
cancella solo un record. Come posso svuotare la tabella?
Ciao e grazie.
Sub AllTables()
Dim obj As AccessObject
Dim dbs, strCnn As Object
Dim rstRoySched As ADODB.Recordset
Dim NTab As String
 Set strCnn = Application.CurrentProject.Connection
 Set rstRoySched = New ADODB.Recordset
 Set dbs = Application.CurrentData
  For Each obj In dbs.AllTables
   If (NTab <> "SIC_") And (NTab <> "ZPS_") And (NTab <> "MSys") Then
    rstRoySched.Open obj.Name, strCnn, adOpenDynamic, adLockBatchOptimistic, 
adCmdTable
    rstRoySched.Delete adAffectAll
    rstRoySched.UpdateBatch adAffectAll
    rstRoySched.Close
   End If
   Next obj
End Sub 

 ha scritto nel messaggio
news:cm81fn$1l9$1...@newsserver.cilea.it...

Ciao Carmelo,
ti conviene usare l'oggetto Command ed eseguire delle query di cancellazione
Dovrebbe funzionare più o meno così (sono andata a memoria  controlla i nomi
delle proprietà.... )
Dim cmd as ADO.Command
For Each obj In dbs.AllTables
    ' Dov'è l'assegnazione di NTab??
    If (NTab <> "SIC_") And (NTab <> "ZPS_") And (NTab <> "MSys") Then
        set cmd = New ADODB.Command
        cmd.Connection = CurrentProject.ActiveConnection
        cmd.CommandType = AcCmdText
        cmd.CommandText = "Delete * from " & NTab
        cmd.execute
        set cmd = nothing
   end if
next Obj
Saluti
Cinzia

 ha scritto nel messaggio 
news:cm863n$miv$1...@lacerta.tiscalinet.it...

Approfitto della tua disponibilità e ti chiedo un'altra dritta. Mi si pone 
un'altro problema, quello di creare delle query (in realtà una query di 
unione) e di copiare il risultato in una tabella. Purtroppo le query di 
unione non mi permettono in un solo passaggio copiare i record in una 
tabella tramite il comando into. Con DAO utilizzerei il comando 
createquerydef, in ADO c'è un corrispondente?
Altrimenti posso copiare il contenuto di un recordset in una tabella senza 
usare un'istruzione di intoo un ciclo di while do facendo la copia campo per 
campo?
Cioè posso fare:
Nometabella = Recordset,
Oppure copiare l'intero record nel seguente modo:
while do Recordset1.EOF
 Recordset2=Recordset1
Grazie 1000 per la disponibilità


Ciao Carmelo,
è vero che non puoi usare una Insert INTO in una query di unione ma puoi
fare una secondda query che prelevi i dati dalla query di unione e li
inserisca nella tabella che vuoi:
Supponendo che la tua query di unione sia QueryUnione sarebbe:
SELECT QueryUnione .Campo1, QueryUnione .Campo2, QueryUnione .Campo3 INTO
TabellaNuova
FROM QueryUnione
e a questo punto la esegui come le query precedenti.
Puoi anche aprire il recordset  sulla tabella dove vuoi inserire, aprire il
recordset2 della query di unione e fare una cosa di questo tipo:
while not recordset2.Eof
    recordset.addnew
    for each fld in recordset2.fields
        recordset.Fileds(
fld.name
)=fld.value
    next
    recordset2.movnext
wend
ma non è molto conveniente!
Saluti
Cinzia