Newsgroup: it.comp.appl.access
Titolo: aiuto divisione con zero ERROR

Ciao a tutti,
premetto non sono esperto.
ho 1 problema in un report faccio una divisione C=A/B se B � zero su C 
di mi esce ERROR anzich� zero.
aiutatemi come posso ottenere zero?
grazie tante
rino 

 rino
Ciao rino, la cosa più giusta secondo me è che se B=0 C dovrebbe
essere uguale al valore A oppure a Null:
C=A/IIf(B<>0,B,Null)
se poi vuoi ottenere C=0 allora:
C=A / IIf(B <> 0, B, A) - 1
Ciao Vladimiro

 rino
Ciao rino, la cosa pi� giusta secondo me � che se B=0 C dovrebbe
essere uguale al valore A oppure a Null:
C=A/IIf(B<>0,B,Null)
se poi vuoi ottenere C=0 allora:
C=A / IIf(B <> 0, B, A) - 1
Ciao Vladimiro
grazie Vladimiro per la risposta
chiarisco meglio il mio problema:
C=A/B > B � un valore dinamico se contiene es. da 1 in poi non mi da 
errore se contiene zero mi da l'errore che ti ho detto.
quindi, vorrei in questo caso, che il risultato di C fosse zero e non 
errore.
grazie
rino

 ha scritto nel messaggio 
news:4ae3ebd8$0$1095$4faf...@reader3.news.tin.it...

Forse Vladimiro ha tralasciato qualcosa.
Non so dove vuoi mettere questa istruzione, ma su un controllo sul report 
credo che potrebbe andare bene cos�:
=iif (b<>0;C=A/B;C=0)
Ciao
Antonio

 ha scritto nel messaggio 
news:4ae3f0bc$0$692$5fc...@news.tiscali.it...

 io ho questo:     C = [A]/[B] se racchiudo tutto in 2 solo parentesi () 
es. antonio, mi da errorre, se lascio quelle quadre se metto l'una e 
l'altra mi da sempre l'errore
ho messo =IIf([B]<>0;[C]=0) mi sempre l'errore
scusatemi x l'imbranamento
rino

 ha scritto nel messaggio 
news:4ae3faa5$0$1103$4faf...@reader3.news.tin.it...

Prova cos�:
C=iif(B<>0;A/B;0)
Le parentesi quadre puoi metterle oppure no, come vuoi fare tu. Si usano 
particolarmente quando il nome di un campo contiene uno spazio in mezzo. Per 
es.: [Importo IVA]=[Saldo Imponibile] * [Aliquota IVA]

 ha scritto nel messaggio 
news:4ae40091$0$709$5fc...@news.tiscali.it...

strano ho provato con  C=iif(B<>0;A/B;0) mi da ZERO dove non ho inserito 
i numeri, (ho 4 report dinamici con stesse condizioni  dove attraverso 
la form  inserisco i numeri) mentre dove non sono inseriti mi da 
predefinito zero
grazie

 ha scritto nel messaggio 
news:4ae40091$0$709$5fc...@news.tiscali.it...

scusatemi mi sono espresso male prima volevo dire: strano ho provato con 
C=iif(B<>0;A/B;0) mi da ZERO dove non ho inserito
i numeri, (ho 4 report dinamici con stesse condizioni  dove attraverso
la form  inserisco i numeri) mi da errore, mentre dove non sono inseriti 


 ha scritto nel messaggio 
news:4ae4089d$0$1098$4faf...@reader3.news.tin.it...

Controlla bene come hai scritto la formula. Poi, procediamo in ordine.
Tu tramite la form hai inserito i numeri (che non so cosa siano) in una 
tabella. Suppongo che tu abbia prodotto il report con la creazione guidata 
del report. Quindi, immaginando che i tre campi della tabella si chiamino 
A,B e C (come nell'esempio), la creazione guidata ha generato il controllo 
per l'esposizione del campo C che ha, fra altre cose, le seguenti propriet�:
Nome elemento: C
Origine controllo: C
Ora tu vuoi determinare C in base ai valori inseriti nella tabella per A e 
B, quindi quelle propriet� per C le dovrai cambiare cos�:
Nome elemento: X (o qualsiasi cosa ma diversa da C)
Origine controllo: =iif(B<>0;A/B;0) (senza che prima dell'uguale ci sia la 
lettera C)
Ciao
Antonio

 ha scritto nel messaggio 
news:4ae4101b$0$6834$5fc...@news.tiscali.it...

scusami Antonio se insisto, ma mi da sempre l'errore dove calcolo, 
PRECISO che il calcolo C lo faccio nella casella di testo del report in 
riferimento a 2 caselle del report stesso che contengono numeri 
calcolati dalla Form.
nella casella di testo scrivendo la formula compreso la tua, ma mi da 
ERRORE mentre negli altri 3 report che non contengono i numeri mi da 
predefinito lo zero
non so se sono stato chiaro nell'esprimermi
grazie per la pazienza
rino

>>> [cut]

Tranquillo, perdo la pazienza solo con chi � scortese... pensa, riesco a 
sopportare persino mia moglie :-)))
Tieni presente che il report lo basi su una tabella (o query), non su una 
form. In definitiva, qual � il modus operandi ? Vediamo se indovino. Hai una 
tabella con alcuni campi. Aggiorni questi campi mediante una form. Stampi 
con un report la tabella aggiornata dalla form. E' cos� o sbaglio qualcosa ?
Immaginiamo che l'iter sia quello giusto.
Allora nel report o hai valori che rivengono dalla tabella cos� come sono, o 
li calcoli dentro il report stesso, magari basandosi sui valori di qualche 
campo di tabella.
Non riesco ad immaginare uno scenario differente. Con questo scenario 
dovrebbe funzionare (quindi controlla bene prima di cambiare tattica). Se 
dopo tutti i tentativi la soluzione non viene fuori (ma ripeto, se ho 
indovinato lo scenario ti deve funzionare per forza), prova a fare in 
quest'altro modo.
Inserisci una nuova routine di tipo Function in un modulo (se nel DB non c'� 
nessun modulo lo puoi creare adesso) cos�:
Public Function CalcolaC(CampoA As Integer, CampoB As Integer) As Integer
    If Nz(CampoB) = 0 Then CalcolaC = 0
    If Nz(CampoB) <> 0 Then CalcolaC = Nz(CampoA) / CampoB
End Function
poi sul tuo report nell'origine controllo di C scrivi:
= CalcolaC (A;B)
ma ricordati che se C � anche un campo della tabella, questo controllo lo 
devi rinominare in un modo diverso, magari X come avevo detto 
precedentemente.
Per� fare cos� � sicuramente pi� complicato che cercare sistemare le cose 
con l'altro metodo.

 ha scritto nel messaggio 
news:4ae41ea7$0$6838$5fc...@news.tiscali.it...

Antonio ti chiedo scusa e ti ringrazio per la pazienza.
l'esempio del mio problema non riguarda solo 3 campi A,B,C ma sono 
diversi ma tutti con il criterio identico, quindi se risolvo l'esempio 
del mio problema di fatto risolvo anche gli altri. Posso gentilmente 
chiederti una risoluzione pi� semplice dove nella casella di testo (C) 
deve contenere zero e non errore se B � zero dopo la divisione C=A/B?
scusami e ti ringrazio far� sicuramente un corso da programmatore.
curiosita sei Antonio che conosco io di B... e tu nativo della S....?
rino
 

 ha scritto nel messaggio 
news:4ae423bc$0$1098$4faf...@reader3.news.tin.it...

Non sono quell'Antonio che dici tu, io sono del meridione ma vivo in 
Toscana.
Perch� non mi rispondi passo-passo a quell'ipotesi che ho fatto poco fa ?
E' vero che in primis c'� una tabella con dei campi che vengono aggiornati 
dal form ?
Se � cos�, prova a vedere il contenuto dei campi e scrivimi qui sotto quelli 
che ti sembrano pi� significativi. Es.
CampoA    CampoB    CampoC
10                niente        niente
20                5                8
etc. etc.
Poi passiamo al report. Se il report si basa sui campi della tabella non pu� 
darti errore. A meno che � nel report stesso che prima calcoli un controllo 
e poi vuoi utilizzare il risultato di questo controllo per calcolarne un 
altro... ma questo sistema mi sembra pi� complicato e non credo che sia il 
caso tuo.

 ha scritto nel messaggio 
news:4ae42717$0$700$5fc...@news.tiscali.it...

Si Antonio scusami per passo passo, hai capito bene c'� una tabella con 
dei campi che vengono aggiornati
dal form. ma il report si riferisce a una Query della tabella.
gli esempi A,B,C, che tu fai sono esatti, ma sono riferiti a un singolo 
calcolo, con lo stesso criterio vi sono nello stesso report altri Campi 
D,E,F ecc.
cerco di spiegarmi (spero)  il campo A e B sono aggiornati dalla tabella 
mentre il Campo C calcola A/B ma se B � ZERO su C mi da ERRORE per 
questo dico che se risolvo con il primo esempio risolvo anche gli altri.
non capisco come mai se B contiene un numero superiore a 1 mi da il 
risultato giusto invece se contiene ZERO mi da errore

 ha scritto nel messaggio 
news:4ae42cb0$0$1095$4faf...@reader3.news.tin.it...

In matematica che risultato avresti se tu facessi 123 diviso zero ? Avresti 
infinito (non zero). E' per questo che Access si rifiuta di calcolartelo. Ma 
tu dici non me ne frega niente, se il divisore � zero il risultato deve 
essere zero (in programmazione puoi persino decidere di dare un risultato 
non matematicamente corretto). E allora torno a dirti la stessa cosa di 
prima. Se C non � un campo di tabella ma un controllo "Casella di testo" che 
hai inserito sul report dagli queste propriet� e ti funzionar� sicuramente.
    Nome elemento: X1 (l'altro poi X2, l'altro ancora X3 e cos� via)
    Origine controllo: =iif(B<>0;A/B;0)
Se non ti funziona, scrivimi con precisione (meglio se usi il copia/incolla) 
queste due propriet� del controllo che hai sul report e dimmi se questo 
controllo � associato ad un campo della query oppure no.
In ogni caso aspetto una risposta. Non fare come tanti che, avuta la 
risposta risolutiva, non ti dicono neache "ha funzionato".

 ha scritto nel messaggio 
news:4ae430fb$0$6840$5fc...@news.tiscali.it...

no Antonio sono una persona seria non rientra nei miei parametri di vita 
mi sforzo ogni giorno di essere persona normale.
cmq per ritornare alla risoluzione, ho adattato la tua formula,
iif(Testo203<>0; SommaDiE1/ Testo203;0)  il risultato nella (Casella di 
TestoC) da ERRORE.
perch� il Testo203 � ZERO invece se contiene un numero superiore a ZERO 
mi calcola giusto
da predefinito lo ZERO nelle altre pagine stesso criterio stessa 
(casella TestoC) stessi riferimenti ecc.dove non vi sono calcoli e 
numeri
grazie Antonio

>>> [cut]

Se quella scritta da te � proprio la formula che hai scritto in Origine 
controllo, devi metterci il simbolo dell'uguale in testa. Cos�:
=iif(Testo203<>0; SommaDiE1/ Testo203;0)
Forse era solo questo l'errore che commettevi.

 ha scritto nel messaggio 
news:4ae438d4$0$697$5fc...@news.tiscali.it...

no antonio =  � compreso nell'origine controllo

 ha scritto nel messaggio 
news:4ae43b7a$0$1099$4faf...@reader3.news.tin.it...

Allora � scritta correttamente, ma tu l'avevi scritta con un errore. Per 
favore, scrivi con rigore matematico quello che c'� nelle propriet� "Origine 
controllo" e "Nome elemento".
Cos�:
Nome elemento. . . .: ilnomeassegnatoalcontrollo
Origine controllo. . . .: =iif(Testo203<>0; SommaDiE1/ Testo203;0)
Poi dimmi SommaDiE1 cosa contiene ? forse � lui che contiene l'errore ? 
Metti un altro controllo in cui fai vedere cosa c'� in SommaDiE1 cos� puoi 
capire meglio come vanno le cose. In ultimo, SommaDiE1 � per caso un 
controllo calcolato sul report stesso ? Se s�, prova a spostarlo nella parte 
alta del report.
Aspetto incuriosito

 ha scritto nel messaggio 
news:4ae440b0$0$6819$5fc...@news.tiscali.it...

Tu curioso io ansioso :-)
Nome elemento: SommaDiDelAssE1
nell'Origine controllo. . . .: =iif(Testo203<>0; SommaDiE1/ Testo203;0)
SommaDiE1 � un campo calcolato dalla query che somma ed � numerico e di 
riferimento al report in questione (come metto altro controllo se devo 
fare riferimento a lui)?
stava nell'intestazione di pagina ed � nascosto l'ho messo nel corpo ma 
nulla.
ma come mai se Testo203 contiene 1 numero sup a ZERO mi da il risultato 
giusto

 ha scritto nel messaggio 
news:4ae444c7$0$1096$4faf...@reader3.news.tin.it...

Mi sto convincendo che l'errore sta nel SommaDiE1.
Innanzi tutto il nome SommaDiDelAssE1 mi confermi che non � un nome di campo 
della query ? Se per caso lo fosse, il controllo che d� l'errore chiamalo 
SommaDiDelAssE1xxx.
Poi fai click sul soliti controllo col tasto destro, lo copi e lo incolli in 
un'altra zona del report. Esamina le propriet� del nuovo controllo appena 
creato. Dovrebbero essere:
Nome elemento. . .: un nome univoco scelto da Access
Origine controllo . .: =iif(Testo203<>0; SommaDiE1/ Testo203;0)
Sostituisci quanto appare in Origine controllo con SommaDiE1. Sii preciso, 
fai cos�:
Origine controllo . .: SommaDiE1
Se nel report vedi che in questo nuovo controllo c'� l'errore, vuol dire che 
l'errore che vedevi prima nel controllo C non dipendeva dalla formula ma dal 
fatto che uno dei fattori della divisione conteneva gi� un errore.

 ha scritto nel messaggio 
news:4ae44c16$0$6836$5fc...@news.tiscali.it...

la casella di SommaDiE1 che esiste l'abbiamo chiamata A esiste e calcola 
giusto, cmq ho fatto come tu hai detto ed esce lo stesso risultato di 
SommaDiE1
quindi due caselle stesso numero.
invece dato che nel frattempo provo e riprovo leggo ecc. ho provato 
nella form a mettere ZERO nella casella che si riferisce alla stessa 
tab,query e casella di report in argomento mi da errore run time (non fa 
la divisione x zero. (va be questo e altra cosa)
Ma non c'� una formula semplice che dice: se Testo203 � ZERO nella 
casella di (TestoC) scrivi Zero altrimenti calcola A/B (Testo203) che 
funziona come ti ho detto.


Abbi pazienza, ma tu continui a fare confusione coi nomi dei controlli e 
degli oggetti che utilizzi. Cosa vuoi dire dicendo ho messo ZERO nella form 
che si riferisce alla tab ? Cosa c'entra la form in questo contesto ? Non 
sono riuscito ancora a capire quali sono i nomi dei campi della query ed il 
loro contenuto, i controlli creati nel report e le relative propriet�. Se ti 
imponi un certo rigore nello scrivere i controlli e le formule vedrai che 
non avrai pi� l'errore.

 controlli e le formule vedrai che non avrai pi� l'errore.
si scusami la form non centra con la discussione n/s ma l'ho scritto 
ancora ti poteva servire a risolvere. Si riferisce alla tab
che in una query viene sommata e poi elaborata ancora su report in 
argomento. e poi i problemi che si presentano nel report che ho citato


Abbi ancora pazienza, ma continuo a non capirti. Sembra che io ti chieda 
informazioni sulla tua automobile e tu mi rispondi che il mare � inquinato. 
Sembra un dialogo fra sordi. Se vuoi e se il database non � particolarmente 
grosso, potresti mandarmelo zippato. Se sei d'accordo, invialo a 
antone...@tiscali.it

 ha scritto nel messaggio 
news:4ae46216$0$698$5fc...@news.tiscali.it...

grazie antonio,
avevo premesso che sono autodidatta.
il file contiene 1 sacco di cose sarebbe complesso inviartelo. l'unica 
cosa che posso dirti a questo punto � che sei stato molto gentile e 
disponibile. Legger� e prover�
ti ringrazio
rino

 rino
Il thread ï¿œ lunghissimo ... magari ti ï¿œ giï¿œ stato suggerito e mi ï¿œ 
sfuggito. In caso contrario prova cosï¿œ:
=IIf(Nz(Testo203;0)<>0; SommaDiE1/ Testo203;0)
Ciao
-- 
Alberto S

 Alberto S
Ciao rino,
Mi rendo conto che ieri, rispondendoti in maniera affrettata, ho
commesso degli errori; proverò a riparare, anche perchè ho la
sensazione che ti sei un pò scoraggiato.
apri l'origine record del report e inserisci:
C: IIf([A] Or [B]=Null;IIf([B]<>0;[A]/[B];0);Null)
modificando naturalmente il nome dei campi.
Ciao Vladimiro.

 rino
C=IIf([B]=0;0;[A]/[B])
-- 
Ciao
Pablitomf
-----------------------------------
Napoli nel "Q"uore.... sempre e comunque.
-----------------------------------
Chi parla senza modestia trover� difficile rendere buone le proprie parole.
Confucio 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 - Mostra testo citato -
Stavo pensando che potresti trovarti nella situazione di avere anche
il campo A vuoto o = 0, allora è meglio modificare la condizione
(campo C nella query del report) così:
C: IIf([A] Or [B]=Null;IIf([B]=0;0;[A]/[B]);Null)
In questo modo, se i campi A o B o uno di essi è vuoto oppure il campo
A è = 0 anche il campo C sarà vuoto, se il campo A é > 0 ed il campo B
è = 0, il campo C sarà = 0
Di nuovo Vladimiro.

 ha scritto nel messaggio 
news:4ae4734e$0$1111$4faf...@reader2.news.tin.it...

 Albert ti ringrazio tanto sei stato di aiuto. ho risolto tutto
grazie
rino