Newsgroup: it.comp.appl.access
Titolo: cancellare tabelle

Vorrei cancellare in una "botta sola" tutte le tabelle che inizino per PIPPO
es PIPPO_1; PIPPO_2; PIPPO_3 etc.etc.
Be...per cancellare una tabella specifica di solito faccio così:;
Dim dbs as database
set dbs = currentDb()
dbs.tabledefs.delete("PIPPO_1")
ma per cancellarle tutte quelle che iniziano per PIPPO ???
GRAZIE BBBBELLI
Ciao

 ha scritto nel messaggio
news:8FKd9.4452$AW6....@twister2.libero.it...

Dim dbs as database, tdf as tabledef
set dbs = currentDb()
for each tdf in dbs.tabledefs
    if 
tdf.name
 like "PIPPO*" THEN dbs.tabledefs.delete(
tdf.name
)
next tdf
Ciao, FABIO


Cicla nell'insieme delle tabelle e controlla con la funzione left(Nome, 5)
se e' uguale a Pippo:
Dim tabella As Tabledef
For Each tabella In CurrentDb.TableDefs
If Left(tabella.Name, 5) = "PIPPO" Then
CurrentDb.TableDefs.Delete(
tabella.name
)
Next tabella
Il codice non l'ho testato fammi sapere se funziona.
Saluti, Antonio.

 Ciao
Anche io in primo tempo pensavo che avrebbe funzionato come indicato da
Fabio e Antonio Ganci, ma cosě non funziona in quanto, tramite il metodo
Delete viene cambiato in corsa il contenuto del TableDefs e quindi la For
Each sbarella e non vengono canellate tutte le tabelle il cui nome inizia
per Pippo, ma solo alcune; perché tutte le tabelle il cui nome inizia per
Pippo vengano cancellate occorre ripetere piů volte la For Each, al limite
tante volte quante sono le tabelle il cui nome inizia per Pippo.
A me ha funzionato con questo codice VBA:
Dim MieTabelle As TableDef
Dim Pluto As Integer
Dim Paperino As Integer
Pluto = 0
For Each MieTabelle In CurrentDb().TableDefs
If Left(MieTabelle.Name, 5) = "Pippo" Then
    Pluto = Pluto + 1
End If
Next
For Paperino = 1 To Pluto
For Each MieTabelle In CurrentDb().TableDefs
If Left(MieTabelle.Name, 5) = "Pippo" Then
    CurrentDb().TableDefs.Delete (MieTabelle.Name)
End If
Next MieTabelle
Next Paperino
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

 Next Paperino
    E cosi'?
  Dim lIndex As Long
  With CurrentDb.TableDefs
    For lIndex = .Count - 1 To 0 Step -1
      If .Item(lIndex).Name Like "PIPPO_*" Then
        .Delete .Item(lIndex).Name
      End If
    Next
    .Refresh
  End With
--
Ciao :-)
Maurizio
--------
?SPQR(C)
 X
--------

 Each sbarella e non vengono canellate tutte le tabelle il cui nome inizia
Per fare questo Roberto, normalmente si usa il metodo del ciclo dall'ultimo
al primo.
Pertanto
for i = currentdb.tabledfs.count -1 to 0 step -1
  elabora currentdb.tabledefs(i)
next
Cosě non ci sono problemi
Antonio

 Maurizio
OK, grazie!


 ha scritto nel messaggio
news:fCMd9.4955$AW6.1...@twister2.libero.it...

OK Antonio, grazie!



Ottime osservazioni (anche quelle proposte da Biso e Borrelli) solo che mi
hai fatto venire un ulteriore dubbio: se è vero che ciclando l'insieme
Tabledefs ed eliminando degli elementi rischio di saltarne alcuni, non è che
anche la proprietà count non dia più un risultato attendibile? Secondo te
non è megli, a questo punto, fare:
    Dim dbs As Database
    Set dbs = CurrentDb
    Dim intNumTab As Integer
    intNumTab = dbs.TableDefs.Count - 1
    While intNumTab >= 0
        If dbs.TableDefs(intNumTab).Name like "PIPPO*" Then
            dbs.TableDefs.Delete dbs.TableDefs(intNumTab).Name
        End If
        intNumTab = intNumTab - 1
    Wend
Fabio

 che anche la proprietà count non dia più un risultato attendibile?
    Scusa, mi intrometto a proposito del "for .. next" che ho usato nel mio
post. Giusta la tua osservazione, errata la conclusione. Devi considerare
che nel codice:
        For i = a To b
a e b vengono valutate all'inizio del ciclo e possono cambiare al suo
interno. ( Il discorso e' diverso, invece, per la variabile incremento
(i). )
    Una prova di questo la ottieni eseguendo:
  Dim i As Integer
  Dim a As Integer
  Dim b As Integer
  a = 0
  b = 9
  Debug.Print " i", " a", " b"
  Debug.Print "---", "---", "---"
  For i = a To b
    a = a + 1
    b = b - 1
    Debug.Print i, a, b
  Next
OUTPUT:
 i             a             b
---           ---           ---
 0             1             8
 1             2             7
 2             3             6
 3             4             5
 4             5             4
 5             6             3
 6             7             2
 7             8             1
 8             9             0
 9             10           -1
    Se il numero delle volte che deve essere effettuato il ciclo fosse
dipendente dal valore *corrente* di a e/o b il risultato sarebbe diverso.


 post. Giusta la tua osservazione, errata la conclusione.
[CUT]
Grazie per il debug-on-line, in effetti mi è venuto il classico
dubbiodacazzeggioinprossimitàdelweekenddoponotteinfullimmersion !
Fabio

 wrote in message
Sf2e9.9705$%z1.1...@twister1.libero.it...

Beh, tanto vale usare una For ... Next, o sbaglio?
Cumunque, come giustamente dice Antonio Biso, l'importante è eseguire il
ciclo dall'ultimo al primo item e non dal primo all'ultimo.
