OsvaldoLaviosa ha scritto:
I miei database portano l'estensione .mdb (uso Access 2003). Quindi, OK, chiarito questo dilemma.
"Per il resto l'uso di OrderByOn come dice la guida serve per Attivare/Disattivare la proprietà OrderBy e di conseguenza il suo valore."
Potresti dirmi il titolo dell'argomento Guida in linea che parla di questo?
Domanda strana... se apri il VBEditor e selezioni dal Menù [VISUALIZZA]--->[VISUALIZZATORE OGGETTI(F2)] si apre un'interfaccia al codice...
se digiti ORDERBY ti elenca gli Oggetti che supportano questo METODO(Funzione).
Se selezioni il Metodo ORDERBY membro dell'oggetto FORM ed apri la GUIDA IN LINEA hai l'HELP con le descrizioni.
OsvaldoLaviosa ha scritto:
Questa volta, davvero non riesco a ritrovare una sintassi macro coerente su sottomaschera. Ho ripiegato sul tuo codice che sembra funzionare davvero. E ho notato che funziona correttamente proprio includendo le due istruzioni OrderByOn.
Ora, tu, suggerendomi quel Form_Load(), mi hai lasciato intendere che dovevo applicare tutto il codice all'evento Su caricamento.
Ho fatto così e funziona, scrivendo la Routine evento direttamente dalla sottomaschera, presa separatamente. Era giusto fare così?
Si.
OsvaldoLaviosa ha scritto:
Quei Me. mi hanno insospettito. Se dopo Me. avessi indicato il NomeSottomaschera e applicato l'evento alla maschera principale, avrebbe funzionato lo stesso?
Il [Me] è il riferimento ESPLICITO all'oggetto nel quale si scrive il CODICE e vale per una FORM e per un MODULO DI CLASSE.
Quindi se dall'interno della [MascheraA] voglio far riferimento al controllo [Text1] posso scriverlo in 4 modi:
Me!Text1
Form!MascheraA!Text1
Me.Controls("Text1")
Form!MascheraA.Controls("Text1")
Come vedi alcune volte uso il PUNTO altre il PUNTOESCLAMATIVO, queste sembrano finezze ma è questione di LINEARITA' nella programmazione.
Il Punto si usa per accedere a METODI/PROPRIETA'/COLLECTION, mentre il PUNTOVIRGOLA fa riferimento ad OGGETTI.
Se dalla FORM principale devi andare alla proprietà della SUBFORM la sintassi cambia...
Me!NomeSubForm.Form.OrderBy="...."
Si aggiunge Form perchè altrimenti il riferimento non è all'oggetto MASCHERA ma alla sua CORNICE...!
OsvaldoLaviosa ha scritto:
Se sì, quale evento era consigliabile prendere in considerazione? Sinceramente non riesco a cogliere le differenze fra le proprietà evento:
Su apertura, Su caricamento
Su attivazione, Su attivato.
Gli eventi che citi sono tutti ESTREMAMENTE DIFFERENTI.
I più usati sono LOAD(Caricamento) e OPEN(Apertura), sono molto diversi ed intervengono in tempi e modi diversi, ad esempio l'evento OPEN si può ANNULLARE
annullando l'apertura della maschera, il LOAD invece NO.
Hanno impatto differente anche sulla controllabilità dei dati e del codice istanziato..., ma questo è un passo avanzato.
Per capire chi viene prima e chi dopo fai delle prove... usando il DEBUG.
Gli altri 2 invece si usano solo quando fai MULTITASKING su diverse FORM aperte per capire quando una Maschera sta per tornare attiva(si verifica prima che accada)
e subito dopo che si è attivata.
OsvaldoLaviosa ha scritto:
Copiando/incollando il tuo codice, nella finestra VBA, ho notato che automaticamente i righi centrali 2 e 3 sono rientrati e che non funzionavano se li portavo allo stesso incolonnamento del rigo 1. E' una questione sostanziale oppure soltanto visivo-estetica?
Me.OrderBy="Campo1; Campo2"
C'è qualcosa di sbagliato nella sintassi? Io ho corretto sostituento punto e virgola con virgola e soltanto così funzionava.
Questo fa parte dell'aspetto ESTETICo di chi programma, diciamo che i BRAVI SVILUPPATORI usano dare profondità al codice, soprattutto quando ci sono LOOP
o condizioni per renderlo LEGGIBILE, si chiama INDENTAZIONE e funziona anche se non si usa... quindi devi aver fatto qualche errore...!
OsvaldoLaviosa ha scritto:
Del resto, l'attuale proprietà Ordina per, adesso presenta l'elenco campi separati da virgola
Me.OrderBy="Campo1, Campo2"
hai sbagliato tu? è indifferente? ho corretto bene?
Comunque grazie mille, adesso funziona come mi aspettavo.
No non abbiamo sbagliato ne io ne te...
La virgola la si usa quando si scrive via CODICE, mentre il PUNTOVIRGOLA se vai a scrivere direttamente nella proprietà... un pò come nelle Funzioni delle Query
e nelle Funzioni VBA.
A cappello di tutto, però, vedo delle evidenti LACUNE di base nel tuo bagaglio, che reputo necessarie colmare con qualche testo o con uno studio MIRATO
allo sviluppo del codice e dei suoi metodi, altrimenti il rischio è che non ci si capisca, e che per ogni cosa serva un MINI-CORSO... ed il FORUM non è il luogo più
adatto.