Newsgroup: it.comp.appl.access
Titolo: Flag in base a maschera selezionata.

"Buongiorno" a tutto il n.g.
 
Sto costruendo un db per la gestione delle spese familiari e del conto 
corrente. Ho creato una sola tabella per non complicare la questione e 
ci sono dei campi che vengono condivisi:
 
Data operazione;
Ragione sociale;
Gruppo merceologico;
Descrizione operazione;
Movimento dare.
 
 
Siccome non voglio riportare tutte le spese dal conto corrente al 
bilancio familiare (per esempio le commissioni bancarie) solo quelle 
inerenti agli acquisti, nella maschera di inserimento movimento del 
conto corrente ho previsto una casella di controllo e metto la flag 
quando il movimento dev'essere visualizzato anche nella maschera Ricerca 
spese per periodo del bilancio familiare. Poi con la seguente query
 
SELECT Amministrazione.DataOp, Amministrazione.RagSoc, 
Amministrazione.GrupMer, Amministrazione.DescOp, Amministrazione.MovDar, 
Amministrazione.InBf, Year([DataOp]) AS Espr1, Month([DataOp]) AS Espr2
FROM Amministrazione
WHERE (((Amministrazione.InBf)=True) AND 
((Year([DataOp]))=[Forms]![frmRicercaSpesePeriodo]![txtAnno]) AND 
((Month([DataOp]))=[Forms]![frmRicercaSpesePeriodo]![cboMese]))
ORDER BY Amministrazione.DataOp;
 
 
visualizzo le spese dell'anno e relativo mese prescelti. Con tale query 
però le spese che inserisco nel bilancio familiare non mi vengono 
visualizzate...
 
Per quanto di mia conoscenza ho provato sia in VBA sia con una query 
senza ottenere risultati positivi. L'intento è quello di inserire una 
condizione che mi vada a flaggare il campo "in bilancio familiare" se 
l'inserimento viene fatto da maschera "Inserimento spesa".
 
Non so se sto percorrendo la strada giusto, mi potete dare una dritta in 
merito?
 
Grazie.
 
Rob.
 
 
 

 Rob.
 
SE AVESSI CAPITO
infatti cio' che ho capito è questo:
 
1)inserisci i dati da due maschere diverse
2)oppure da una maschera sola e comunque riesci a diversificare il loro significato dell'insieme della loro valorizzazione
 
ALLORA
1) metti il flag NASCOSTO, e valorizzato a vero, nella form dove è necessario
2) all'evento BeforeUpdate del record (e quindi della form)
valuti il significato dei dati presenti nel record 
e metti il flag da codice se necessario

 e metti il flag da codice se necessario
 
 
Grazie Giorgio per avermi risposto.
 
Si, hai capito giusto. In sintesi:
 
- Tabella unica;
- Maschera inserimento spesa, faccio l'inserimento a bilancio diciamo 
tutto quello che pago per contante;
- Maschera Inserimento movimenti, faccio l'inserimento in conto corrente 
dove ho previsto il flag nel caso tale movimento debba essere 
visualizzato con la maschera di bilancio "Ricerca spese per periodo". La 
spesa per contante, dovrebbe di default comparire nella Ricerca spese 
per periodo. Quello che mi consigli di fare l'avevo già pensato, mettere 
il flag nascosto già flaggato nel piede della maschera. Sinceramente 
però mi è sembrato più un escamotage che un sistema elegante di 
risolvere la questione, sebbene sia professionale. Se non riuscirò 
nell'intento, metterò il flag nascosto.
 
Grazie.
 
Rob.
 
 


Io avrei fatto esattamente il contrario: in tabella flag NonInBil posto
a False di default, settabile a True solo dalla scheda c/c.
 
Ma tornando a noi... è la query che non ti mostra le spese inserite in
bilancio dalla scheda c/c, spese che appaiono regolarmente inserite in
tabella col flag posto a True, o è che nella tabella il flag
corrispondente a tali spese non è posto a True?
Da un esame della query propenderei per la prima ipotesi.
 
Bruno

 Rob.
 
una soluzione specie se persistente e non complicata, (così che tale si mantiene e tale la si ricorda) ha sempre grande valore, BEN riconoscibile (al pari dell'eleganza, e quindi assimilabile ad essa)

 una soluzione specie se persistente e non complicata, (così che tale si mantiene e tale la si ricorda) ha sempre grande valore, BEN riconoscibile (al pari dell'eleganza, e quindi assimilabile ad essa)
 
Concordo perfettamente su quanto esponi, solitamente ho operato spesso 
in questo modo, ritenendo importante raggiungere l'obiettivo. Ovviamente 
se posso, cerco di utilizzare metodi corretti senza escamotage.
 
R.

 Bruno
 
Quando faccio un inserimento in bilancio vorrei fare in modo senza 
predisporre la maschera con la relativa casella di controllo da flaggare 
o meno, che l'inserimento di default fosse per tutti true.
Invece quando vado ad inserire un movimento di conto corrente, ho 
predisposto la maschera con l'apposita casella di controllo, dove metto 
la flag a seconda del tipo di movimento.
 
In fine se tutto funzionasse a dovere, interrogando la tabella con la 
maschera "Ricerca spese per periodo" inserendo l'anno e scegliendo il 
mese, il risultato ottenuto dei movimenti dovrà rientrare nel range 
"anno e mese" e mi restituirà tutti i movimenti flaggati.
 
Grazie per l'attenzione.
 
R.


SE, come sembra essere in questo caso, 
l'eleganza ha il riflesso pratico di registrazione "trasparente" 
(non impegnativa) per l'utente
 
in altre parole: valorizzare il flag è una decisione 
che è meglio non sia a carico dell'utente, 
poiché E' CHIARA dall'insieme dei dati, 
e quindi può essere a carico del programmatore
 
ALLORA
va bene valorizzare a VERO, PREDEFINITO IN TABELLA, il flag
e portarlo a falso, da codice sull'evento BeforeUpdate 
nella form in cui il programmatore è in grado, 
(SEMPRE E COMUNQUE con il  riscontro del riempimento dei dati)
di effettuare la distinzione necessaria
 
ALTRIMENTI
resta valido l'inserimento del flag nascosto predefinito a vero 
SOLO nella form che, di fatto, lo valorizza.
Il Flag nella tabella è predefinito a falso.
 

 Il Flag nella tabella è predefinito a falso.
 
AGGIUNTA
non so se hai presente questo rilievo
http://allenbrowne.com/casu-23.html
 
 
ho seguito il consiglio e adopero un tipo dato intero per i flag SiNo
e un controllo, associato, "option" o "check" nella form
(quello che Access inserisce automaticamente per un tipo dati booleano):
con la selezione si ha il valore -1 nel campo
con la deselezione si ha il valore 0 nel campo


Grazie per i consigli, proverò a metterli in pratica. Ieri ho provato a 
mettere una condizione nella query, ottenendo solo errori...
 
A mio avviso, considerando che l'inserimento di una spesa "per cassa" 
non ha l'Istituto Bancario inserito, tentavo di mettere tale condizione:
Se il campo Istituto è uguale a niente "", true, altrimenti false.
 
R.

> con la deselezione si ha il valore 0 nel campo
 
 
Ho risolto agendo in tale maniera.
 
Su dopo inserimento, da VBA mando in esecuzione una query di aggiornamento.
 
La query di aggiornamento:
 
UPDATE Amministrazione SET Amministrazione.InBf = True
WHERE (((Amministrazione.Istituto) Is Null));
 
 
 
Il codice VBA:
 
Private Sub Form_AfterInsert()
 
DoCmd.SetWarnings False
DoCmd.OpenQuery "True"
 
End Sub
 
Ora sto cercando come fare per avere la query scritta nel codice VBA per 
non averla nel database.
 
Ho provato con
 
currentdb.execute "UPDATE Amministrazione" SET Amministrazione.InBf = True
WHERE (((Amministrazione.Istituto) Is Null));
 
 
Va in errore...
 
R.

 Va in errore...
 
Le virgolette sono in posizione sbagliata:
 
currentdb.execute "UPDATE Amministrazione SET Amministrazione.InBf = True WHERE (((Amministrazione.Istituto) Is Null))"
 
Ciao

 
 
 bene 
con un appunto
 
con questa query, di fatto, 
NON stai agendo sulle registrazioni record per record
(è un aggiornamento "massivo", lo puoi fare anche in altri frangenti)
 
 
DOPO questa rivisitazione la WHERE iniziale forse poteva essere così
 
......
WHERE (Amministrazione.InBf=True OR Amministrazione.Istituto Is Null)
.....

Chiedo scusa se rispondo con un gigantesco ritardo. Ho risolto il tutto 
con i consigli che mi avete dato, usando l'update.
 
Grazie a voi.
 
Roberto