Newsgroup: it.comp.appl.access
Titolo: Openform da Casella Combinata lento

Ciao a tutti amici !!
Mi sapete dire come mai il comando DoCmd.OpenForm è a due velocità?
Cioè, se lo inserisco "Su Click" di una etichetta, ad esempio, mi apre
la maschera immediatamente, se lo inserisco su "Dopo aggiornamento" di
una Casella Combinata, mi apre la maschera lentamente e "a
chiazze" (cioè prima una parte della maschera, poi un'altra, poi
un'altra ancora). Come faccio a velocizzare l'apertura da Casella
Combinata? Grazie 1000 ; )


wrote:

Con la CasellaCombinata passi un Parametro di filtro oppure il codice
VBA è esattamente lo stesso che da Click...?
@Alex


Per testare la velocità ed evitare equivoci, ho tolto i filtri e ho
usato in tutti e due i casi lo stesso semplicissimo codice:
    DoCmd.OpenForm "Clienti", acNormal, "", "", , acNormal
Uno da click, l'altro da dopo aggiornamento.



Un parametro a stringa Vuota non è come un parametro Omesso...!
Usa questa che di Default passa i parametri che vorresti:
DoCmd.OpenForm "Clienti"
Sinceramente non mi spiego tecnicamente quello che ti accade... posso
provare a suggerirti una cosa inusuale, vale a dire
di usare l'evento Click di Combo invece di AfterUpdate, solo per fare
una prova ulteriore...!
Devi però fare anche un Check sul Valore che non sia quello
precedente, solitamente si usa una Variabile Static nella Routine
Evento...
Private Sub NomeCombo_Click()
   Stati oldVal as String
   If Me!Nomecombo.Value<>oldValue Then
      oldVal=Me!Nomecombo.Value
      DoCmd.OpenForm "Clienti"
   End If
End Sub
Ciao
@Alex

 - Mostra testo citato -
Grazie @Alex, ho provato anche su evento click di combo, ma l'apertura
rimane a macchia di leopardo..
Se invece importo in un nuovo db solo le tabelle e maschere
interessate, il problema scompare.
Quindi viene a mancare il carattere scientifico della
riproducibilità...

"Un parametro a stringa Vuota non è come un parametro Omesso...! "
Nel caso in cui non abbia dei filtri da inserire, ma delle condizioni,
il codice giusto è questo?
DoCmd.OpenForm "Clienti", , , "(IDUTENTE)=[Forms]![Ordini]![IDCLI]"


wrote:

Io preferisco questo:
DoCmd.OpenForm "Clienti", , , "[IDUTENTE]=" & [Forms]![Ordini]![IDCLI]
fai attenzione alle parentesi, usa le QUADRE.
La differenza tra le 2 espressioni è su chi risolve la stringa del
Filtro.
La tua proposta delega la risoluzione a JET, e, nel caso tu sposti su
un Server SQL il tuo lavoro rendi vano l'uso di un DB_SERVER in quanto
fai lavorare il filtro in Locale.
La mia soluzione effettua una conversione esplicita esterna e funziona
sempre in tutti i modi ottimizzando l'azione del Filtro in caso di
DB_Server.
Ciao
@Alex


Dimmi se ho capito bene: se al posto del computer locale utilizzo un
server per l'archivio dei dati, quel comando non funziona?



No non hai capito.
Access o meglio JET lavora solo in LOCALE, anche se hai un BackEnd in
rete..., e questo perchè JET non è un RDBMS, non è strutturato per
lavorare in logica di Rete.
Quindi il comando come lo hai scritto tu in caso di uso di Access(FE)
+ JET(BE) funzionerà sempre sia JET in locale che in rete su server.
Se al posto di JET usi ad esempio SQLSERVER o MYSQL, DB strutturati
per elaborare una Query la to server non saranno capaci di Risolvere
il predicato IMPLICITO sql
che hai scritto, quindi il Server sarebbe obbligato a restituire al
Client tutto l'intero Recordset, che si troverebbe a risolvere il
criterio in locale.
Questo ha provocato il traffico dal server al Client di tutta la
tabella completa per poi filtrare 1 Record.
Se scrivi come l'ho scritto io, in caso di JET funziona come sempre,
in caso di SQLSERVER verrà ottimizzato il funzionamento e SQLSERVER
riconosce il predicato
inviando al Client solo il/i Records che soddisfano il criterio... con
una riduzione drastica di tempi di risposta e di traffico.
@Alex

 - Mostra testo citato -
Whow, interessante, ne terrò conto.. Grazie!! ; )

 - Mostra testo citato -
Ma.. se le Condizioni sono due, come ci si comporta? Ho visto che il
codice sottostante non va bene:
DoCmd.OpenForm "Clienti", , , "[IDUTENTE]=" & [Forms]![Ordini]![IDCLI]
And "[IDORD] =" & [Forms]![Ordini]![ID]




& " And [IDORD] =" & [Forms]![Ordini]![ID]
@Alex


Merci beaucoup ! ; )