Newsgroup: it.comp.appl.access
Titolo: le relazioni pericolose

Prima di tutto, bentrovati tutti. Da un pezzo per vari motivi non facevo un
salto da queste parti.
Domandina facile facile:
Ho un db i cui campi principali sono [tipo operazione] (dare o avere),
[importo] e [socio pagante].
Vorrei mettere in relazione il campo testo [tipo movimento] dove ho inserito
la regola di convalida "D or A" (Dare o Avere) con i campi [importo] e
[socio pagante].
Più precisamente vorrei che:
1) inserendo D(are) nel campo [tipo movimento], nel successivo campo
[importo] la cifra appaia negativa ed in rosso e che nel campo [socio
pagante] non sia possibile inserire erroneamente un nominativo (che,
ovviamente verrà inserito solo nelle operazioni A(vere).
Sperando di essere stoto chiaro, ringrazio anticipatamente chi vorrà darmi
qualche dritta.
FrancescoFranz

 ha scritto nel messaggio
news:8n9piu$gml$1...@nslave2.tin.it...

Ciao,
Prima di tutto, buon Ferragosto.
Mi sembra di capire che hai una tabella (Tabella1) che tra gli altri ha tre
campi (TipoMovimento, Importo e SocioPagante). Il campo Importo deve
risultare negativo se il TipoMovimento è uguale a D(are).
In una maschera per l'inserimento di questi dati (Maschera1) avrai
altrettanti controlli associati con lo stesso nome: vuoi che Importo sia
negativo e scritto in rosso se TipoMovimento è = a D(are) e vuoi che il
controllo SocioPagante compaia solo se TipoMovimento è uguale ad A(vere).
Se così è, a fronte dell'evento "Su corrente" di Maschera1 genera il
seguente codice VBA:
If Me![TipoMovimento] = "D" Then
    Me![Importo].ForeColor = 255
    Me![SocioPagante].Visible = False
Else
    Me![Importo].ForeColor = -
2147483640
    Me![SocioPagante].Visible = True
End If
a fronte dell'evento "Dopo aggiornamento" di TipoMovimento genera il
seguente codice VBA:
If Me![TipoMovimento] = "D" Then
    Me![Importo].ForeColor = 255
    Me![SocioPagante] = " "
    Me![SocioPagante].Visible = False
    If Not IsNull(Me![Importo]) Then
        If Me![Importo] > 0 Then
            Me![Importo] = Me![Importo] * -1
        End If
    End If
Else
    Me![Importo].ForeColor = -
2147483640
    Me![SocioPagante].Visible = True
    If Not IsNull(Me![Importo]) Then
        If Me![Importo] < 0 Then
            Me![Importo] = Me![Importo] * -1
        End If
    End If
End If
e a fronte dell'evento "Dopo aggiornamento" di Importo genera il seguente
codice VBA:
If Not IsNull(Me![Importo]) Then
    If Me![TipoMovimento] = "D" Then
        If Me![Importo] > 0 Then
            Me![Importo] = Me![Importo] * -1
        End If
    Else
        If Me![Importo] < 0 Then
            Me![Importo] = Me![Importo] * -1
        End If
    End If
End If
Roberto

Mi ero dimenticato di dirti che il tutto funziona a condizione che Maschera1
abbia una visualizzazione a Maschera singola.
Roberto

 Se cosě č, a fronte dell'evento "Su corrente" di Maschera1 genera il

Ho eseguito alla lettera, ottengo l'importo in rosso in caso di [tipo mov]=D
ma appena mi sposto sul campo [nome pagante] viene visualizzato il seguente
"errore di run-time 2165: impossibile nascondere il controllo che ha loi
stato attivo".
La stringa che viene evidenziata é:
 Me![Nome Pagante].Visible = False
Grazie ancora per l'aiuto.
FrancescoFranz

 > Se così è, a fronte dell'evento "Su corrente" di Maschera1 genera il

Probabilmente il controllo [Nome Pagante], nella maschera, è subito dopo il
controllo [tipo mov] e prima di [Importo].
Se così è, la routine che ti ho detto di inserire nell'evento "Dopo
aggiornamento" del controllo [tipo mov], cancellala da lì ed inseriscila
nell'evento "Prima di aggiornare" sempre del controllo [tipo mov].
Fammi sapere.
Roberto


La maschera é così composta:
[data]
[tipo mov]                   D(are) o A(vere)
[importo]                    negativo e rosso se D(are)
[nome pagante]        campo non visibile o inabilitato se [tipo mov]=D
FrancescoFranz


Dovresti controllare l'"Ordine di spostamento" dei 4 controlli; deve essere
0 per Data, 1 per TipoMov, 2 per Importo e 3 per NomePagante.
Comunque invio al tuo indirizzo e-mail il mio esempio funzionante; verifica
con il tuo db dove sono le differenze.
Roberto