OsvaldoLaviosa ha scritto:
1) Vorrei sapere: Leggo da un libro che si può fare riferimento a un oggetto (in questo caso query) anche con la sintassi NomeInsieme(NumeroRelativoOggetto). Io pensavo che le mie 12 query fossero così considerate:
DAreaGeo = QueryDefs(0)
DDiffDanza = QueryDefs(1)
DFama = QueryDefs(2)
...
TTitolo = QueryDefs(11)
So anche che QueryDefs.Count conta tutte le query, quindi potrei anche generalizzare il discorso sfruttando la proprietà Count. Se quello che ho scritto equivale al concetto espresso dal mio libro, io pensavo più a un ciclo con una variabile contatore K (Dim K As Integer) e poi un tradizionale For K = 0 To 11 (o Count-1)...Next. Questo mio ragionamento può essere equivalente?
QueryDefs(n-1) posso scriverlo così nudo e crudo oppure occorre precederlo sempre con il nome del database...non so...leggo sintassi che non mi tornano da questo libro.
CurrentDb.QueryDefs.Count rischia di diventare troppo lungo. È buona prassi dimensionare una variabile e metterci dentro SEMPRE un "concetto" lungo?
Si quello che dici è concettualmente corretto...(ma sintatticamente errato, poi ti spiego...) ma come hai visto nel mio esempio non serve nemmeno sapere l'indice o sapere quanti oggetti ci sono nell'insieme...!
Se osservi questo codice
Dim qdf As DAO.QueryDef
For each qdf in Currentdb.QueryDefs
MsgBox qdf.Name
Next
Questo ti mostra che nell'insieme QueryDefs, ci sono degli Oggetti QueryDef, come ti dicevo fai attenzione alla [S]... e non serve sapere nè quanti sono ne quali sono gli indici...!
Come dicevo quello che hai scritto è parzialmente errato...
Quello che tu indichi così:
DAreaGeo = QueryDefs(0)
In realtà ha 2 errori:
1) Per puntare all'Oggetto Query di INDICE(0) devi riferirti all'Insieme ma in modo ESPLICITO deve contenere il PADRE dell'insieme... e le sintassi sono 2
Currentdb.QueryDefs(0)
DbEngine(0)(0).QueryDefs(0)
2) Questo riferimento tuttavia non corrisponde al NOME della query, ma all'Oggetto Query che per il VBA è un'oggetto QueryDef, quindi
Dim DAreaGeo As DAO.QueryDef
Set DAreaGeo = QueryDefs(0)
Il Set serve per l'assegnazione degli OGGETTI...!
Se vuoi assegnare il NOME invece serve una Variabile STRINGA e serve recuperare la Proprietà NAME dell'Oggetto QueryDef:
Dim DAreaGeo As String
DAreaGeo = QueryDefs(0).Name
OsvaldoLaviosa ha scritto:
3) Mi suona ancora arabo. Non importa, non devi darmi ulteriori spiegazioni.
4) Non ho raccolto ancora i benefici del tuo tutorial. Piuttosto vorrei capire...analizziamo la linea di codice:
DoCmd.OutputTo acOutputQuery, "DDiffDanza", acFormatHTML, H
- Quando nella finestra VBA digito DoCmd. appare subito dopo una casella combinata dove poter scegliere l'azione (credo si chiami Metodo tecnicamente: vero?): OK
OsvaldoLaviosa ha scritto:
- Poi metto uno spazio e mi appare una nuova casella combinata dove posso scegliere comodamente acOutputQuery: anche qui OK
- Poi metto virgola e da questo punto in poi non mi appariranno più caselle combinate che mi tornerebbero molto comode: perchè? L'errore di aver digitato (sul terzo argomento) inizialmente HTML e poi corretto in acFormatHTML è nato da una digitazione "a colpo di fortuna"...poi ho letto la guida il linea su OutputTo e ho corretto...ma almeno per il terzo argomento, sarebbe stato pertinente proporre una casella combinata anche lì. Nelle corrispettive proprietà nella macro, dove possibile, appare sempre la casella combinata. Potresti delucidarmi questo aspetto della digitazione del codice?
Si chiama INTELLISENSE questo, e mostra METODI(Funzioni e Sub), PROPRIETA' ed EVENTI degli Oggetti.
La differenza è mostrata delle ICONE.
In sostanza questa è la programmazione ad OGGETTI, ed ogni Oggetto espone queste 3 tipologie.