PDA

View Full Version : [ACCESS] operazione tra campi


hondaXR
30-04-2006, 16:52
ciao gente,

vi spiego un po il mio problema.... Ho una tabella con diversi campi. Ora il mio problema è il non saper effettuare una sottrazione tra due e scriverla in un altro (tutti e tre campi tipo VALUTA).

Ci sono riuscito con la maschera( con l'espressione: =[campo1]-[campo2].... ma dato che l'operazione la effettua solo all'apertura della maschera, non mi salva il valore effettuato nella tabella relativa.

Naturalmente quando creo il report per la stampa/visualizzazione il campo3 risulta vuoto e non me lo stampa/visualizza.


come fare per passare/salvare il valore del campo3 (dalla maschera) nella tabella relativa?

84seawolf
30-04-2006, 17:26
Prima di rispondere alla tua domanda ti faccio notare una cosa:

quando si progetta una base di dati (specialmente di grandi dimensioni) si cerca sempre di evitare ridondanze di dati. Mettere un campo nel quale va inserita la differenza tra due altri campi è l'esempio classico di ridondanza di dati. L'informazione che tu vuoi ricavare (come differenza di due campi) è buona norma fornirla all'utente nel momento di interrogazione del database. (ad esempio con una select campo1-campo2 as differenza from...).

Detto questo...in access non so bene come si possa fare. Però in altri DBMS (per esempio DB2) è possibile creare dei trigger (procedure eseguite al verificarsi di determinati eventi) che permettono tra le altre cose di fare ciò che tu richiedi.

hondaXR
30-04-2006, 18:08
ho capito, ti rigrazio per il consiglio però nemmeno io ho idea di come si possa risolvere il problema in access

:mc: :mc: :mc: :mc:

84seawolf
30-04-2006, 18:45
mmmhhh....access lo conosco poco e niente. Prova cmq a vedere su internet se si possono implementare i trigger in access.

ginogino65
30-04-2006, 20:57
ciao gente,

vi spiego un po il mio problema.... Ho una tabella con diversi campi. Ora il mio problema è il non saper effettuare una sottrazione tra due e scriverla in un altro (tutti e tre campi tipo VALUTA).

Ci sono riuscito con la maschera( con l'espressione: =[campo1]-[campo2].... ma dato che l'operazione la effettua solo all'apertura della maschera, non mi salva il valore effettuato nella tabella relativa.

Naturalmente quando creo il report per la stampa/visualizzazione il campo3 risulta vuoto e non me lo stampa/visualizza.


come fare per passare/salvare il valore del campo3 (dalla maschera) nella tabella relativa?

Il miglior consiglio è quello che ti ha già dato 85seawolf, comunque se proprio vuoi duplicare i dati, è sufficiente che nel campo che ti interessa imposti come valore predefinito =[campo_1]-[campo_2] poi nell'evento change dei rispettivi campi inserisci [campo_3]=[campo_1]-[campo_2] in questo modo ad ogni cambio di valore dei campi 1 e 2 viene salvato nel campo 3, ti consiglio però di fare le operazioni da modulo, in questo modo puoi inserire un controllo di validità sui numeri inseriti, del tipo:

if isNumeric([CAMPO_1]) AND isNumeric([CAMPO_2]) THEN
[CAMPO_3]=[CAMPO_1]-[CAMPO_2]
else
msgbox "ATTENZIONE: E' necessario inserire un valore numerico valido nei campi: CAMPO_1 e CAMPO_2", vbokonly+vbinformation,"Attenzione !!"
end if

hondaXR
01-05-2006, 11:02
@ginogino65

l'operazione va fatta nella tabella o nella maschera? (nella tabella mi da errore)

evento change sarebbe scheda evento... dopo aggiornamento? :mbe:

:doh: che casino!!!!!!

ginogino65
01-05-2006, 19:31
@ginogino65

l'operazione va fatta nella tabella o nella maschera? (nella tabella mi da errore)

evento change sarebbe scheda evento... dopo aggiornamento? :mbe:

:doh: che casino!!!!!!

Va messa nella maschera, l'evento change sarebbe evento che avviene dopo un aggiornamento del campo o di altro oggetto, puoi inserire sia una macro o del codice, io per un miglior controllo uso sempre il codice.

candela
02-05-2006, 12:20
dunque,
il problema della visualizzazione nel report è piuttosto semplice:
basta mettere, esattamente come fai nella maschera, come origine del campo la differenza dei due campi e non il CAMPO_3 che così non ti serve più e risolvi anche il problema della ridondanza.

se vuoi mantere i tre campi devi inserire quel codice in un evento, a seconda della logica con cui preferisci che si proceda, mi viene in mente:
- evento change del recordest (in access credo che venga sollevato quando chiudi la maschera o passi ad un altro record... quindi non lo vedi sul record corrente.... sempre se mi ricordo bene)
- su evento change di uno dei due campi (in questo caso, la logica dovrebbe essere una compilazione sequenziale, prima un campo, poi l'altro, e su questo secondo mettere il controllo)
- su evento click, di un pulsante, in questo caso dobbiamo essere sicuro della affidabilità dell'utente che usa la maschera....

ps. che vuol dire "nella tabella mi da errore"? come fai ad associare una operazione alla tabella!? :eek:

hondaXR
03-05-2006, 14:46
dunque,
il problema della visualizzazione nel report è piuttosto semplice:
basta mettere, esattamente come fai nella maschera, come origine del campo la differenza dei due campi e non il CAMPO_3 che così non ti serve più e risolvi anche il problema della ridondanza.

se vuoi mantere i tre campi devi inserire quel codice in un evento, a seconda della logica con cui preferisci che si proceda, mi viene in mente:
- evento change del recordest (in access credo che venga sollevato quando chiudi la maschera o passi ad un altro record... quindi non lo vedi sul record corrente.... sempre se mi ricordo bene)
- su evento change di uno dei due campi (in questo caso, la logica dovrebbe essere una compilazione sequenziale, prima un campo, poi l'altro, e su questo secondo mettere il controllo)
- su evento click, di un pulsante, in questo caso dobbiamo essere sicuro della affidabilità dell'utente che usa la maschera....

ps. che vuol dire "nella tabella mi da errore"? come fai ad associare una operazione alla tabella!? :eek:


nella tabella mi da errore se scrivo nel campo3 "=campo1-campo2" :D :D :D :D

ok ho risolto il problema nel report come mi hai consigliato (mettere l'espressione come ho fatto nella maschera) :D :D

mi resta il problema di come salvare il risultato nel campo 3 della tabella :cry: :cry:

che espressione (o meglio SINTASSI) devo usare è dove metterla?