Newsgroup: it.comp.appl.access
Titolo: Semplificare una condizione

buongiorno a tutti. ANcora una volta per fare cose sempre più impegnative sono andato nel difficile (per me) ed ora sono in un vicolo cieco.
 
In una sottomaschera all'interno della mia maschera principale, ho questa condizione
 
'SE è VALORIZZATO RDA E BUONO/ORDINATIVO/ODA SONO A ZERO VALORIZZA IMPORTO TRANS  ALTRIMENTI LO IMPOSTA A VUOTO
 
If Me.imporRDA > 0 And Me.IMPORTOBuono = 0 And Me.IMPORTOOrdinativo = 0 And Me.IMPORTODA = 0 Then
Me.TRANSRDA = Me.imporRDA
Else
Me.TRANSRDA = ""
End If
 
Al momento ho copiato pedestremente questa condizione facendola funzionare after update SU TUTTE E 4 le caselle di testo:
Me.imporRDA
Me.IMPORTOBuono
Me.IMPORTOOrdinativo
Me.IMPORTODA 
 
La domanda è questa. Se questo codice lo metto su corrente della sottomaschera, si aggiorna sempre automaticamente sia alla modifica di una della 4 caselle sia quando scorro (tramite pulsanti di scorrimento passo al record successivo) la maschera principale ?
Facendo questo, oltre che a risparmiare codice, velocizzo, anche se molto liavemente il funzionamento ?
 
Grazie infinite a chi mi darà una graditissima risposta.
 

Dopo mille peripezie sono riuscito a creare una query "QRYTRANS "che in base al valore dei cinque campi di tabella, ne calcola il sesto, il famoso TRANS.
Ora il mio problema è che vorrei porre l'origine di questo campo in tabella immediatamente pari al valore in uscita dalla query.
ho creato una relazione tra tabella e query ma quando vado in tabella e pongo valido se:
=[QRYTRANS]![TRANS]
Mi cancella tutto......sto sbagliando qualcosa ?
 
Grazie infinite a chi mi potrà rispondere.

 Ora il mio problema è che vorrei porre l'origine di questo campo in tabella immediatamente pari al valore in uscita dalla query.
 
A me sembra gia perfetto cosi come è.
Hai i tuoi valori nella tabella e hai GIA' il tuo campo TRANS sempre aggiornato
 
Perche ti vuoi incasinare la vita a scriverlo nella tabella ????
 
Poi quando cambia uno dei valori di origine devi correggerlo in tabella 
 
Poi non sarai sicuro di avere i dati congruenti e dovrai controllare nella query e in tabella
 
 
UCAS ( Ufficio complicazione affari semplici )

Scusami se sono stato "sgorbutico"
provo a spiegarmi piu semplicemente,
 
Hai una tabella con
Materiale --- Quantita --- Prezzo ---
Quaderno ------- 3 --------- 5 ------
 
Tu vuoi avere nella tabella anche il Prodotto  ( 15 )
 
ma poi succede che se viene modificata la Quantita o il Prezzo 
allora ti devi ricordare/preoccupare di aggiornare anche il Prodotto
 
è quand'anche li aggiorni tutti diligentemente non puoi dormire
sonni tranquilli perche ogni volta che prendi quel record
andrai a controllare che i valori siano congruenti
 
 
invece se ti fai una banale query:
SELECT Quantita, Prezzo, Quantita * Prezzo AS Totale FROM NomeTabella;
non hai nessun problema è hai i valori sempre aggiornati e certi
 
 
Oltre a quanto esposto sopra ci sono anche motivi di 
- risparmio di "spazio" nel DB in quanto crei 1 campo in meno
- risparmio di lavoro del DB per aggiornare sempre quel campo
- risparmio di lavoro tuo per creare le procedure
 
Leggi qualcosa sulla "Normalizzazione DB"

Ciao Mancini,
Il mio problema è (secondo me) leggermente più complesso.
In tabella ho cinque campi che rappresentano cinque valori economici dovuti a un iter economico autorizzativo
il quinto campo in tabella viene calcolato rispetto agli quattro ma non ne è la somma bensì deriva da un IIf.
 
Mi servirebbe per semplicità, se non dico una boiata, che questo campo calcolato frutto della query indicata, venisse restituito dalla tabella.
Grazie per ogni contributo aggiuntivo

 Mi servirebbe per semplicità, se non dico una boiata, che questo campo calcolato frutto della query indicata, venisse restituito dalla tabella.
Si, stai dicendo una boiata ( non lo dico con cattiveria )
il tuo è il tipico errore di un giovane ( beata gioventu ) che ha 
appena cominciato ad usare i DB
 
Intendiamoci,  tecnicamente si puo fare, 
UPDATE NomeTabe SET NomeTabe.TRANSRDA = iif(.......) WHERE ......
ma è un suicidio !!!
 
Proponici la query che hai gia fatto dove hai gia ottenuto il tuo valore
e vediamo come aggiustarla
 

 Grazie per ogni contributo aggiuntivo
 
Non c'ï¿œ peggior sordo di chi non vuol sentire...
Segui il consiglio di Mancini!
I campi calcolati in una tabella (qual ne sia l'algoritmo di calcolo) 
sono cose che nel mondo database gridano vendetta al cospetto di Dio.
Peggio delle condizioni che, potendo essere inserite in tabella, 
vengono inserite sulla scheda.
 
Altra cosa che non grida vendetta ma fa ridere i polli, ï¿œ quella lunga 
serie di Me che usi nel tuo codice.
Ma qui la colpa ï¿œ di MS che esemplifica sempre a livello di utente 
inbecille.
In Access il riferimento all'oggetto Form (o Report) ï¿œ di default, 
quindi il Me diviene necessario solo se funzione.
 
Bruno
 
 

Ciao Mancini,
Grazie per le dritte, l'aiuto graditissimo e per avermi fatto sorridere....
Sono un autodidatta di acces che per il mio lavoro è diventato indispensabile, mi ci diletto anche se mi trovo poco con il VB, ma ho già passato i 55 e quindi mi serve anche e soprattutto per tenere allenato quel popo' di neurone rimastomi....
 
Tornando a noi, perfetto la tua risposta è quella che volevo.
Permettimi un ultimo chiarimento.
Nela mia tabella con riferimento [progr] avrò quindi i 4 campi e nella query relazionata con lo stesso [progr] avrò, nel campo [trans], i risultati della condizione IIf.
 
Ho una maschera che mi consente di scorrere i record della tabella [Numerazioni]. Avrei bisogno di essere sicuro di vedere sempre oltre ai 4 campi il risultato sempre aggiornato della query per quel record, 
 Qual'è il metodo più veloce e che mi consenta con la massima velocità possibile di poter vedere il [trans] aggiornato ?
 
Ho provato a cercare [trans] tra i dati disponibili come origine dati della maschera ma, nonostante la query sia relazionata, vedo solo tabelle.
Grazie per l'aiuto, ora sono a casa via IPAD ma lunedì mattina torno operativo e posso darti eventuale codice o aiuto .....naturalmente scherzo !!!!
 
Grazie infinite, Ciao e buon fine settimana.

 Ho provato a cercare [trans] tra i dati disponibili come origine dati della maschera ma, nonostante la query sia relazionata, vedo solo tabelle.
Questo non lo ho capito
 
 
 
 
Ricapitolando:
1°) La tabella con 4 campi
2°) La query con 1 campo calcolato in piu
3°) Ti DIMENTICHI TOTALMENTE della Tabella
4°) Costruisci la maschera sulla Query  ( Non sulla tabella )
---- Origine record --> NomeDellaQuery
 
 
 
 
 
 
 

 Ho provato a cercare [trans] tra i dati disponibili come origine dati della maschera ma, nonostante la query sia relazionata, vedo solo tabelle. 
Questo non lo ho capito 
 
 
 
 
Ricapitolando: 
1°) La tabella con 4 campi 
2°) La query con 1 campo calcolato in piu 
3°) Ti DIMENTICHI TOTALMENTE della Tabella 
4°) Costruisci la maschera sulla Query  ( Non sulla tabella ) 
---- Origine record --> NomeDellaQuery 
 
 
Grazie per la vostra pazienza infinita.
Capisco di aver pensato e scritto una boiata e vi chiedo di scusarmi per l'insistenza.
Ricapitolo un attimo la mia situazione così cerco di meglio esplicare il concetto, sicuramente male espresso della origine dati della maschera.
 
Ho una tabella di circa 15000 record, in cui ognuno, contraddistinto da un [progr] univoco, rappresenta un lavoro che viene letto dalla maschera [interventi]
Per ciascuno di questi record esistono alcune differenti valorizzazioni economiche in base a diverse modalità di consuntivazione.
Ho quindi 4 di questi valori presenti in tabella e un quinto calcolato da una query contraddistinta dallo stesso [progr].
 
Mi risulta quindi indispensabile all'interno della mia maschera interventi poter visualizzare i (4 +1) campi.
Ho creato una relazione tra la tabella e la query con un join che collega i campi progr.
Se dalla maschera interventi nella visualizzazione struttura vado nel menù e cerco i campi disponibili ad essere importati nella maschera mi fa vedere alcune tabelle con campi che potrei importare ma non la mia query ne tantomeno il desiderato campo trans.
Ho provato con una combo derivata dalla query, con i campi progr e trans, collegata al progr della maschera, si aggancia e funziona quando scorro i record, ma quando vado a modificarla in casella di testo mi rimane solo più il campo progr...
poi sono arrivate improvvisamente  le otto e ho dovuto scappare a casa......
 
 
Grazie infinite per l'attenzione è scusate se vi faccio perdere del tempo prezioso e/o se non vi ho capito prima....
Un caro saluto.
 
 

> Ho creato una relazione tra la tabella e la query con un join ....
 
Non ti serve la relazione ......
Costruisciti questa semplice Demo che assomiglia abbastanza al tuo problema
poi la riadatti al tuo DB:
 
Tabella di nome "Tabe"
 
Campi:
- Progr ------- Numerico ----- Key
- ImpRDA ------ Numerico ----- Richiesto = Si
- ImpBuo ------ Numerico ----- Richiesto = Si 
- ImpOrd ------ Numerico ----- Richiesto = Si 
- ImpDaa ------ Numerico ----- Richiesto = Si 
- Cam1 -------- Testo
- Cam2 -------- Testo
- Cam3 -------- Testo
- eccetera
 
 
Poi fai una query di nome "Q01"
SELECT 
Tabe.Progr, 
Tabe.ImpRDA, 
Tabe.ImpBuo, 
Tabe.ImpOrd, 
Tabe.ImpDaa, 
IIf((IIf([Tabe]![ImpRDA],"x") & IIf([Tabe]![ImpBuo],"y") & IIf([Tabe]![ImpOrd],"z") & IIf([Tabe]![ImpDaa],"w"))="x",[Tabe]![ImpRDA]) AS TraRDA, 
Tabe.Cam1, 
Tabe.Cam2, 
Tabe.Cam3
FROM 
Tabe
;
 
 
 
Poi fai una maschera in visualizzazione struttura  ( Non usare autocomposizioni )
 
Proprieta  --> Dati --> Origine record --> Q01
Proprieta  --> Formato --> Visualizzazione Predefinita --> Foglio Dati
 
nella maschera aggiungi 9 controlli ( Caselle di testo )
che abbiano rispettivamente
Proprieta --> Tutte --> Origine Controllo
- Progr
- ImpRDA
- ImpBuo
- ImpOrd
- ImpDaa
- TraRDA
- Cam1
- Cam2
- Cam3
 
 
 
NB:  Per comprendere quella "IIf"  rileggila cosi:
IIf((IIf([Tabe]![ImpRDA]>0,"x") & IIf([Tabe]![ImpBuo]=0,"y") & IIf([Tabe]![ImpOrd]=0,"z") & IIf([Tabe]![ImpDaa]=0,"w"))="xyzw",[Tabe]![ImpRDA]) AS TraRDA, 

Ciao Mancini,
Sono a casa influenzato e leggendo le tue istruzioni così chiare e precise credo di aver capito.
domani appena riprendo, provo e spero di risolvere.
 
Un unico dubbio mi rimane ancora nella condizione IIf laddove la condizione testa se i campi sono uguali a zero.
Il problema è che Se il campo è vuoto non funziona la condizione, devo mettere '0,00" nei dati in tabella.
Se lo faccio però, il mio collega mi ha scritto @ oggi, che gli sfalso i dati di una pivot che legge direttamente da tabella.
posso risolvere facilmente senza romperti troppo ?
 
Ciao grazie infinite.

 ....... il mio collega mi ha scritto @ oggi, che gli sfalso i dati di una pivot che legge direttamente da tabella.
Fino a quando non "tocchi" la tabella non puoi sfalsare nulla
Un collega che scrive quelle cose significa che non capisce ....
 

ciao Mancini,
scusami ancora....sto provando l'iif
 
Confesso che ho dovuto cambiare le "," in ";" altrimenti mi dava errore,  ora mi si blocca e mi evidenzia quale errore il codice AS (penultima posizione).Non so proprio cosa fare, sto provando a modificare ma molto pedestremente.
Il codice è questo:
 
IIf((IIf([NumerazioniRoberto]![imporRDA];"x") & IIf([NumerazioniRoberto]![IMPORTOBuono];"y") & IIf([NumerazioniRoberto]![IMPORTOOrdinativo];"z") & IIf([NumerazioniRoberto]![IMPORTODA];"w"))="x";[NumerazioniRoberto]![ImpRDA]) AS TraRDA,
 
Una domanda scema, consentimela. E' indispensabile che in tabella i dati siano obbligatoriamente richiesti ?
Se li metto non obbligatori cambia qualcosa nel funzionamento ?
Essendo dati che "compaiono" nel corso dell'iter lavorativo non posso metterli di inserimento obbligato.
 
ti ringrazio veramente tanto e di vero cuore.

 IIf((IIf([NumerazioniRoberto]![imporRDA];"x") & IIf([NumerazioniRoberto]![IMPORTOBuono];"y") & IIf([NumerazioniRoberto]![IMPORTOOrdinativo];"z") & IIf([NumerazioniRoberto]![IMPORTODA];"w"))="x";[NumerazioniRoberto]![ImpRDA]) AS TraRDA,
 
 
Ho risolto con questo codice:
trans: IIf((IIf([NumerazioniRoberto]![imporRDA];"x") & IIf([NumerazioniRoberto]![IMPORTOBuono];"y") & IIf([NumerazioniRoberto]![IMPORTOOrdinativo];"z") & IIf([NumerazioniRoberto]![IMPORTODA];"w"))="x";[NumerazioniRoberto]![ImporRDA])
 
grazie infinite.
un caro saluto.
 

 Una domanda scema, consentimela. E' indispensabile che in tabella i dati siano obbligatoriamente richiesti ?
No in questo caso non è indispensabile perche quella query funziona anche coi valori Null
 
Scroverti di mettere "Richiesto = Si" è stata una mia svista
 
 
Comuque vedo dal tuo post successivo che dovrebbe essere a posto...

 Comuque vedo dal tuo post successivo che dovrebbe essere a posto...
 
tutto perfetto, grazie infinite.
ciao
 
...e se non rompo troppo...alla prossima !!!