Newsgroup: it.comp.appl.access
Titolo: IF nidificato. problemi value in campo del record corrente.

Access 00/XP
Ciao a tutti, il caldo si fa sentire, in particolare in Sardegna.
All'interno della maschera "frmFlightLogWPT" č presente un campo nominato 
"Rv" che sta per Rotta vera. Nel codice della maschera, precisamente su 
record corrente, ho inserito il codice sottomenzionato, diciamo che ho 
provato....; il  valore viene inserito nel campo, ma dą un primo valore 
uguale in tutti i record, poi se clicco su un record diverso, in tutti i 
record appare il valore uguale al record dove ho fatto clic, cosa che non 
dovrebbe acadere, infatti in ogni record deve esserci il valore calcolato in 
funzione del valore letto nel campo calcolato di riferimento.
Prima di privare a scrivere queste due righe di codice, righe fallimentari, 
nel campo Rv era presente il seguente formulone perfettamente funzionante; 
prima o poi dovrņ iniziare a scrivere un pņ di codice!!!
Come posso risolvere il problema ?
Grazie, Bruno
------------------------
=IIf([DiffLat]=0 And 
[DiffLongInv]=0;"FERMO";IIf([Cardini_Rotta_Q]="NE";[Rotta_Q];IIf([Cardini_Rotta_Q]="SE";180-[Rotta_Q];IIf([Cardini_Rotta_Q]="SW";180+[Rotta_Q];IIf([Cardini_Rotta_Q]="NW";360-[Rotta_Q];IIf([Cardini_Rotta_Q]="N";360;IIf([Cardini_Rotta_Q]="S";180;IIf([Cardini_Rotta_Q]="E";90;IIf([Cardini_Rotta_Q]="W";270)))))))))
-----------------------------
If Me.[DiffLat] = 0 And Me.[DiffLongInv] = 0 Then
    Me.Rv = "FERMO"
Else
    If Me.[Cardini_Rotta_Q] = "NE" Then
        Me.Rv.Value = [Rotta_Q]
Else
    If Me.[Cardini_Rotta_Q] = "SE" Then
        Me.Rv.Value = 180 - [Rotta_Q]
Else
    If Me.[Cardini_Rotta_Q] = "SW" Then
        Me.Rv.Value = 180 + [Rotta_Q]
Else
    If Me.[Cardini_Rotta_Q] = "NW" Then
        Me.Rv.Value = 360 - [Rotta_Q]
Else
    If Me.[Cardini_Rotta_Q] = "N" Then
        Me.Rv.Value = 360
Else
    If Me.[Cardini_Rotta_Q] = "S" Then
        Me.Rv.Value = 180
Else
    If Me.[Cardini_Rotta_Q] = "E" Then
        Me.Rv.Value = 90
Else
    If Me.[Cardini_Rotta_Q] = "W" Then
        Me.Rv.Value = 270
End If
    End If
        End If
            End If
                End If
                    End If
                        End If
                            End If
                                End If 

 prima o poi dovrň iniziare a scrivere un pň di codice!!!

Stai commettendo un errore... i condizionamenti con IF si fanno cosě:
If Condizione="AA". Then
    ' Esecuzione condizione
ElseIf Condizione="BB" Then
    ' Esecuzione condizione
ElseIf Condizione="CC" Then
    ' Esecuzione condizione
ElseIf Condizione="ZZ" Then
    ' Esecuzione condizione
End if
-- 
@Alex (Alessandro Baraldi)
---------------------------------------------------------------------------
http://www.sitocomune.com/
http://www.alessandrobaraldi.it
---------------------------------------------------------------------------


Ciao Alessandro, ho corretto come di seguito, mettendo il codice su record 
corrente, ma resta il problema dei valori uguali in tutti i campi, i quali 
quando clicco su un campo di un record qualsiasi i resetanti prendono lo 
stesso valore. Come mai, cosa può essere? Preciso che si tratta di una 
maschera continua.
Private Sub Form_Current()
        If Me.[DiffLat] = 0 And Me.[DiffLongInv] = 0 Then
            Me.RV = "FERMO"
    ElseIf Me.[Cardini_Rotta_Q] = "NE" Then
            Me.RV.Value = Me.[Rotta_Q]
    ElseIf Me.[Cardini_Rotta_Q] = "SE" Then
            Me.RV.Value = 180 - Me.[Rotta_Q]
    ElseIf Me.[Cardini_Rotta_Q] = "SW" Then
            Me.RV.Value = 180 + Me.[Rotta_Q]
    ElseIf Me.[Cardini_Rotta_Q] = "NW" Then
            Me.RV.Value = 360 - Me.[Rotta_Q]
    ElseIf Me.[Cardini_Rotta_Q] = "N" Then
            Me.RV.Value = 360
    ElseIf Me.[Cardini_Rotta_Q] = "S" Then
            Me.RV.Value = 180
    ElseIf Me.[Cardini_Rotta_Q] = "E" Then
            Me.RV.Value = 90
    ElseIf Me.[Cardini_Rotta_Q] = "W" Then
            Me.RV.Value = 270
End If 

 Else
[CUT]
Ciao Bruno,
il codice è poco leggibile ma a prima vista dovrebbe andare bene, infatti il 
problema non è nel codice ma nell'assegnazione di un valore costante a una 
casella testo non associata, quindi i valori dei campi usati nel calcolo 
sono riferiti al solo record corrente e il risultato si riperquote su tutte 
le righe.
per risolvere crea una funzione nella maschera ( la scrivo in un modo che a 
me sembra più leggibile)
----
Function CalcolaRv(Frm As Form) As Variant
If Me.[DiffLat] = 0 And Me.[DiffLongInv] = 0 Then
   CalcolaRv = "FERMO"
   Exit Function
End If
Dim Result As Variant
Select Case Me.[Cardini_Rotta_Q]
  Case "NE"
       Result = [Rotta_Q]
  Case "SE"
       Result = 180 - [Rotta_Q]
  Case "SW"
       Result = 180 + [Rotta_Q]
  Case "NW"
       Result = 360 - [Rotta_Q]
  Case "N"
       Result = 360
  Case "S"
       Result = 180
  Case "E"
       Result = 90
  Case "W"
       Result = 270
  Case Else
       Result = "Valore non valido"
End Select
CalcolaRv = Result
End Function
----
poi nell'origine controllo della casella testo Rv metti
----
=CalcolaRv([Form])
----
In questo modo la casella testo è associata a una funzione che ha come 
parametro l'oggetto maschera, quindi viene invocata anche quando Access 
compone le righe che non sono record corrente.
Ciao
-- 
Giorgio Rancati
[Office Access MVP] 

 ha scritto nel 
messaggio news:46706009$0$16025$5fc...@news.tiscali.it...

------------------------
Mille Grazie Giorgio, funziona alla grande. Ora mi studio la tua funzione, 
con libro alla mano, sperando di imparare qualcosa.
Ancora grazie.
Bruno 

 Bruno
Ciao.
-- 
Sergio MAZZA