Newsgroup: it.comp.appl.access
Titolo: Delete field

Ciao a tutti...
avrei un problemino
ho bisogno di eliminare uno o più campi da codice.
Ho impostato questa funzione che , tra le altre cose, crea il campo "via" ,
lo aggiorna e dovrebbe poi eliminarlo  da tutte le tabelle  Ma il problema è
che la funzione ..funziona tranne che nell'eliminare il campo "via"
Dopo un bel po' che ci litigavo ho pensato che qualcuno..a
"mente fresca" mi potesse dire dov'è l'errore
        Dim dbs As Database
        Dim tdf As TableDef, ntbl As String
        Dim fld As Field
        Set dbs = CurrentDb
        DoCmd.SetWarnings False
        For Each tdf In dbs.tabledefs
        ntbl = tdf.Name
        If Left(ntbl, 4) <> "MSys" Then
        MsgBox "E' in corso la creazione del campo ' Via '  nella tabella "
& ntbl & "."
        Set fld = tdf.CreateField("Via", dbText)
        tdf.Fields.Append fld
        Forms!AggiornaVia.RecordSource = ntbl        'imposta origine dati
        ok = Len(a)                       ' campi nella form
        Sx = Mid(a, 2, (ok - 2))      ' campi nella form
        SxDx = Sx & " " & Dx         ' campi nella form
        Dim X, C, tot As Integer
        tot = DCount("*", ntbl, "campo3")
        For X = 1 To tot
        'Aggiorna il campo "via" della tabelle
         DoCmd.RunSQL "UPDATE " & ntbl & " SET " & ntbl & ".Via =SxDx WHERE
(((" & ntbl & ".Campo3)=B) AND ((" & ntbl & ".Campo4)=A));"
        DoCmd.GoToRecord , , acNext
        Next X
        DoCmd.GoToRecord , , acFirst
         C = DCount("*", ntbl, "via")
MsgBox "la tabella " & ntbl & " contiene n° " & C & " record aggiornati su "
& tot & " nel campo ' Via ' "
       tdf.Fields.Delete fld.Name
       tdf.Fields.Refresh
       Set dbs = Nothing
           Dim R As Integer                                              '
verifica l'esistenza del campo "Via"
        R = DCount("*", ntbl, "via")
        If R > 0 Then
        MsgBox "la tabella" & ntbl & "  ha ancora il campo ' Via '"
        Else
        MsgBox "la tabella" & ntbl & "  non contiene il campo ' Via '"
       End if
       End If
       Next tdf
E' da considerare che, però i campi da eliminare sono 2 e non il campo
"Via", quindi avrei anche bisogno di sapere come impostare 
fld.name
 col nome
dei campi da eliminare.
grazie in anticipo e......
buone vacanze..per chi ci va...
                                                                         Lu

 dei campi da eliminare.
Prima di tutto da me il tuo codice lo cancella perfettamente il campo.
Comunque hai fatto un errore. La riga di codice:
R = DCount("*", ntbl, "via")
non puo' funzionare.
Nel momento in cui il campo viene eliminato, questa riga ti genera un errore
perche' non trova piu' il campo via da conteggiare.
Per eliminare piu' di un campo, se ne sai il nome, basta dare l'istruzione
che hai gia' usato per il primo:
tdf.Fields.Delete "NomeDelCampo"
Per concludere consentimi una domanda:
perche' tutti questi giri? sei assolutamente certo che non avresti potuto
risolvere tutto con una query invece di metterti li a creare ed eliminare
campi (cosa sempre traumatica in un db dato che ne aumenta inesorabilmente
la dimensione)?
Sib

 Sib
**** perchè le tabelle non sono mai le stesse,sono sempre in un gran n° e,
per evitare di creare query tutte le volte, volevo automatizzare tutto.
cmq sono convinto anche io che il codice di eliminazione campo è giusto ma,
non so xchè....non mi vuole funzionare.
In ogni caso, grazie per il velocissimo aiuto che mi hai dato.
Lu

 non so xchè....non mi vuole funzionare.
Potrebbe essere un problema di "codice residuo" nel db.
Prova a fare un "compila e salva tutto", ripristino e compattazione. Alla
peggio anche a creare un nuovo db e a importare tutti gli oggetti.
Comunque non e' che le query le devi creare prima. Le query sono molt
semplici da creare anche dinamicamente, restano quindi la via migliore per
eseguire i calcoli. Se non hai esigenze particolari ti suggerisco di
modificare il tuo codice per usare le query.
Ciao
Sib