Newsgroup: it.comp.appl.access
Titolo: Create table: + veloce campi calcolati in form oppure un create table esterno

Ciao a tutto NG,
Pongo un problema, data la mia ignoranza, ho una maschera a record
continui, dove tramite due combo filtro i record.
Nella maschera sono presenti 12 controlli, caselle di testo, una delle
quali in particolare calcola al momento un valore abbastanza
complicato. Dopo che è stato trovata questa cifra, gli altri 11
controlli non fanno altro che sommare, magari moltiplicare per una
percentuale.
Il problema è che in base ai record presenti, passa un bel pò di tempo
a macchinare i calcoli.
Se in questo lasso di tempo, io clicco sulla form, mi sembra che i
calcoli vengono bloccati, e infatti sulle caselle di testo compare
#errore.
Risolverei il problema creando un create table, facendo i conti su una
tabella esterna e poi mostrandoli sulla form?
Oppure come potrei fare?
La formula che sta sotto questo controllo è
=IIf(IsError(nz(DSum("[cstarticolo]";"[q_smcstflyTOTMATPRI]";"[dist_id]=
" & [DISTINTAID]);0));0;
(nz(DSum("[cstarticolo]";"[q_smcstflyTOTMATPRI]";"[dist_id]= " &
[DISTINTAID]);0)))
la query q_smcstfly è:
SELECT TBL_DIST.dist_id, TBL_DIST.dist_codice, TBL_DIST.cli_id,
TBL_DIST.dist_data, TBL_DIST.dist_vsid, TBL_DIST.dist_cstgenacq,
TBL_DIST.dist_scarto, TBL_DIST.dist_trasp, TBL_DIST.dist_marg,
TBL_DIST.dist_przlistino, TBL_DIST.dist_valmargs,
TBL_DIST.dist_riferimento, TBL_DIST.dist_fstverslistino
FROM TBL_VSCSTMP INNER JOIN TBL_DIST ON TBL_VSCSTMP.vscstmp_id =
TBL_DIST.dist_vsid
WHERE (((TBL_DIST.cli_id)=[forms]![msc_cstfly]![cbocliente]));
Grazie x qualsiasi suggerimento,
Samantha


Dimenticavo di dire,
che la maschera è lenta, e che ho attivato la formattazione
condizionale su due di questi controlli...
Grazie,
Samantha

Samantha
Vincenzo Turturro
---------------------------------------------
il sito comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------
risorse Access:
http://www.accessgroup.it
---------------------------------------------
Il sito comune di it.comp.as400
http://www.faq400.com
---------------------------------------------

 ---------------------------------------------
Ciao Vincenzo :D
in realtà i campi che rappresentano chiavi esterne erano già
indicizzati con duplicati ammessi.
Mi viene il dubbio che sia la formattazione condizionale a fare quel
scherzetto. Perchè tipo ho bloccato le caselle, bloccate SI abilitate
NO, ma le 2 caselle dove c'è la formattazione condizionale mi permette
di cliccarci dentro. La cosa è strana.
Avevo pensato anche di mettere la form dove faccio i calcoli come
sottomaschera. Le caselle combo metterle in una altra maschera che
diventerebbe la masschera principale.
A questo punto, impostare le proprietà della sottomaschera di modo che
NON consenta modifiche nè filtri (ora li permette) e vedere se in
questo modo quando clicco mentre lei elabora, non abbia problemi.
Ci provo adesso e ti faccio sapere il risultato
Grazie ancora,
Samantha

 Grazie x qualsiasi suggerimento,
Ecco, visto che siamo al "qualsiasi" potresti provare anche questo:
visualizzare il piè di pagina della maschera (se non ce l'hai già),
nel quale inserisci un controllo di testo con associata questa
funzione:
=sblocca_visualizzazione()
poi in un modulo di classe scrivi la relativa funzione:
function sblocca_visualizzazione()
  application.echo true
end function
Teoricamente, trattandosi di maschera continua, il piè di pagina viene
valutato dopo il corpo, quindi se disattivi l'echo in fase di apertura
dovresti essere a posto facendolo riattivare dal piè di pagina.
Poi magari fai sapere se e come hai risolto, grazie :-D
ciao,
Panathos


Ciao Panathos grazie x le dritte, ora ci provo e ti faccio sapere,
Samantha

 Panathos
Ho provato con application.echo, e ho fatto come da tue indicazioni, E
FUNZIONA!!!! , ossia se clicco con il mouse mentre elabora, non gli
crea nessun problema!!!
Cmq in questa maschera ho questi controlli:
FLY1  ==IIf(IsError([sommacostoarticolo]);0;([sommacostoarticolo]))
FLY2  =dist_cstgenacq -> valore noto
FLY3   =[FLY1]+([FLY1]*[FLY2])
sommacostolavorazioni =
=nz(DSum("[cstlavo]";"[q_smdlavo]";"[dlavo_distid]= " & [DISTINTAID]);
0)
FLY4   =IIf(IsError("[sommacostolavorazioni]");0;
("[sommacostolavorazioni]"))
sommacostivari
=nz(DSum("[dcstvari_costo]";"[q_smdcstvari]";"[dcstvari_distid]= " &
[DISTINTAID]);0)
FLY5  ==IIf(IsError("[sommacostivari]");0;("[sommacostivari]"))
Che prima erano
FLY4  =IIf(IsError(nz(DSum("[cstlavo]";"[q_smdlavo]";"[dlavo_distid]=
" & [DISTINTAID]);0));0;
(nz(DSum("[cstlavo]";"[q_smdlavo]";"[dlavo_distid]= " & [DISTINTAID]);
0)))
FLY5
=IIf(IsError(nz(DSum("[dcstvari_costo]";"[q_smdcstvari]";"[dcstvari_distid]
= " & [DISTINTAID]);0));0;
(nz(DSum("[dcstvari_costo]";"[q_smdcstvari]";"[dcstvari_distid]= " &
[DISTINTAID]);0)))
La domanda è, tramite VBA non potrei calcolare questi valori, e non
sarebbe un metodo + veloce?
Grazie infinite,
Samantha


Ciao Panathos,
mi sono accorta di 2 cose:
a) NON METTERE su evento apertura il application.echo false
b) la formattazione condizionale non rallenta i calcoli (cosa della
quale dubitavo)
Non mettere application.echo false su apertura della maschera, perchè
altrimenti quando apri quella maschera, ti si blocca tutto. Prima non
me ne ero accorta, perchè lavoravo da modalità visualizzazione a
struttura. Ma una volta chiuso e aperto il database, il problema si
presenta. Per il resto i tuoi suggerimenti sono stati preziosi.
Ciao,
Samantha

 sarebbe un metodo + veloce?
La risposta è: dal momento che stai facendo calcoli in base a
condizioni, probabilmente con un po' di codice otterresti qualcosa di
più "razionale".
Però non aspettarti che sia in grado di darti qualcosa di risolutivo
solo guardando i codici che mi hai scritto... finché si tratta di dare
consigli generici OK; ma senza vedere l'applicazione comincia a
diventare troppo difficile per me :-D
ciao,
Panathos

 Panathos
Invece mi sei stato effettivamente di aiuto x application.echo true e
false, che ho usato ma non ho  ancora avuto modo di capire come
funziona e cosa fa, e ora vado a studiacchiarmelo!
Grazie
Samantha

 funziona e cosa fa, e ora vado a studiacchiarmelo!
In pratica application.echo permette di disattivare e riattivare
l'aggiornamento della finestra di Access, cmq leggi la guida che fa
sempre bene :-)
ciao,
Panathos