Newsgroup: it.comp.appl.access
Titolo: "Oggetto FIELDS non valido o non impostato"

Sapete dirmi che c'è di sbagliato in questo codice?
    Dim TBL As dao.TableDef
    Dim FLD As dao.Field
    Set TBL = CurrentDb.TableDefs("tAltriFile")
    For Each FLD In TBL.Fields
nell'ultima istruzione compare l'errore in oggetto.
La libreria DAO è presente fra i riferimenti del db.
Grazie a tutti.
Riccardo Baldinotti


Chiedo scusa, quella parolina ado. è un refuso.
Riccardo Baldinotti

bari...@gmail.com
 ha scritto:


Dove vedi ado. ? Io vedo solo DAO. Mi pare strano che i due dao. nelle Dim
siano in minuscolo, come se mancasse il riferimento alla libreria, di
solito vengono convertiti in automatico in maiuscolo.
Per il resto il codice mi sembra ok.
Torna a verificare i riferimenti, magari togli il DAO, compatta e poi
rimettilo.
Ciao.
-Marco-
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Riccardo Baldinotti
ADO non si legge: se mai DAO. Il riferimento alla libreria ci deve essere
e deve essere posto piů in alto possibile. Inoltre anche se il codice č
corretto lo scriverei cosě:
Dim db AS DAO.Database
Set db = CurrentDb
.
.
Set TBL = db.TableDefs("tAltriFile")
.
.
.
--
sv


 -Marco-
Vero, altro refuso.
Uso A2007 e ho questi riferimenti:
Visual Basic for Applications
Microsoft Access 12.0 Object Library
Microsoft DAO 3.6 Object Library
OLE Automation
Microsoft Visual Basic for Applications Extensibility 5.3
Microsoft ADO Ext.6.0 for DDL and Security
Microsoft ActiveX Data Objects 6.0 Library
Ho tolto, compattato e rimesso, ma è sempre minuscolo, anche se,
quando aggiungo il punto, mi si apre la tendina con le voci pertinenti
e mi accetta sia TableDef che Field. La parolina FIELDS funziona
correttamente quando scorro campi di un recordset, forse farei prima
ad aprirne uno con una SELECT e scorrerlo, ma avevo voglia di provare
cose nuove.
Riccardo Baldinotti

 
barimo...@gmail.com
 ha scritto:

Miracolo! Aggiunte le magiche paroline, non ho più l'errore. E forse
non capirò mai perché... abitualmente scrivo CurrentDb e va bene.
Ora vorrei sapere dove sbaglio qui:
        If FLD.Type = dbBoolean Then
            If FLD.Value = 0 Then
ottenendo errore di run-time 3219, Operazione non valida. Scrivendo
False anziché 0 ho uguale risultato.
Riccardo Baldinotti

 - Mostra testo citato -
Vabbé, quest'ultima domanda dimostrava solo la mia confusione mentale.
Riassumento: aggiungo, come suggerito, le istruzioni
   Dim db AS DAO.Database
   Set db = CurrentDb
.
.
   Set TBL = db.TableDefs("tAltriFile")
e tutto funziona, anche se non ho capito la differenza.
Però, siccome quello che mi interessava era verificare il valore di un
campo Boolean, riporto qui la sub completa.
Private Sub sCopiaFile(chisono)
    Dim FLD As Field
    Set RST = CurrentDb.OpenRecordset("SELECT * FROM tAltriFile WHERE
tAltriFile.nomehost = '" & chisono & "';")
    For Each FLD In RST.Fields
        If FLD.Type = dbBoolean Then
            If FLD.Value = False Then
                FileCopy "T:\pubblica\rick\sw\personale\" & FLD.Name &
".xls", "D:\sw\personale\" & FLD.Name & ".xls"
                CurrentDb.Execute "UPDATE tAltriFile SET " & FLD.Name
& " = -1 WHERE tAltriFile.nomehost = '" & chisono & "';"
            End If
        End If
    Next
End Sub
La variabile "chisono" è passata dalla routine che accetta la parola
d'accesso dell'utente; la tabella tAltriFile contiene un campo testo
col valore di "chisono", e una serie di campi boolean che per ogni
utente indicano se ha già caricato l'ultima versione di una serie di
fogli Excel; se il campo che si chiama FLD.Name è a zero, si copia il
file corrispondente da una cartella di rete al pc dell'utente,
dopodiché si mette a "Vero" il valore corrispondente.
Lo scopo è di avere una serie di file già pronti per l'esportazione di
dati da Access ad Excel, senza dovere scrivere tutte le istruzioni per
modificare larghezza di colonne eccetera.
