Newsgroup: it.comp.appl.access
Titolo: Maschera con tolleranze

ho fatto due tabelle:_
tblQualita con
idQualita -chiave primaria contatore
Qualita   -testo
tblTolleranze con
idTolleranza -chiave primaria contatore
Da        -numerico
A         -numerico
idQualita -numerico chiave esterna
vorrei fare questo:
in una maschera una combo non associata dove scelgo la qualita,
e due controlli uno dove digito un numero e
in relazione  alla qualita che scelgo es:
g20
f40
h10
se il numero digitato è in tolleranza cioè compreso nell'intervallo (da a)
nell'altro controllo non scrive nulla
altrimenti deve scrivere "fuori tolleranza".
esempio:
g20 1340-1370
f40 1200-1270
h10 1600-1650
scelgo nella combo g20
scrivo nel controllo 1345 ok
scrivo nel controllo 1375 "fuori tolleranza"
pensavo di fare una query query1:
SELECT tblQualita.QUALITA, tblTolleranze.DA, tblTolleranze.A
FROM tblQualita INNER JOIN tblTolleranze ON tblQualita.IDQUALITA =
tblTolleranze.idQualita;
epoi con un DLooKUp fare una struttura if
ma non ne vengo fuori mi aiutate?
grazie
--
ciao

> "ferplus" [...]:

Query "orQualitàETolleranze":
SELECT
    tblQualità.Qualità
  , tblTolleranze.Da
  , tblTolleranze.A
  , tblQualità.idQualità
FROM
    tblQualità
    INNER JOIN
    tblTolleranze
    ON tblQualità.idQualità = tblTolleranze.idQualità
ORDER BY
    tblQualità.Qualità
;
Maschera "x_ferplus Qualità e Tolleranze":
'
' ccQualita, Casella combinata
'   Origine riga: orQualitàETolleranze
'   Numero colonne: 4
'   Larghezza: 3 cm
'   Larghezza colonne: 0,99 cm;0,99 cm;0,99 cm;0 cm
'   Colonna associata: 4
' cdtValore, Casella di testo
' cdtMessaggio, Casella di testo
'
Option Compare Database: Option Explicit
Private Sub ccQualità_Change()
  With Me
    .cdtValore.Value = Null
    .cdtMessaggio.Value = Null
  End With
End Sub
Private Sub cdtValore_Exit( _
  ByRef Cancel As Integer)
  Const c_sMsgOk = "Ok."
  Const c_sMsgKo = "Fuori tolleranza."
  Const c_lColDa = 1
  Const c_lColA = 2
  Dim lVal  As Long
  Dim lDa   As Long
  Dim lA    As Long
  If IsNull(Me.ccQualità.Value) Then Exit Sub
  If IsNull(Me.cdtValore.Value) Then Exit Sub
  With Me
    With .ccQualità
      lDa = .Column(c_lColDa, .ListIndex)
      lA = .Column(c_lColA, .ListIndex)
    End With
    lVal = Val(.cdtValore.Value)
    With .cdtMessaggio
      If ((lDa <= lVal) And (lVal <= lA)) Then
        .Value = c_sMsgOk
      Else
        .Value = c_sMsgKo
      End If
    End With
  End With
End Sub
Private Sub Form_Load()
  With Me
    With .ccQualità
      .DefaultValue _
        = Chr$(34) _
        & .Column(.BoundColumn - 1, 0) _
        & Chr$(34)
    End With
  End With
End Sub
--
Ciao :-)
Maurizio
--------
?SPQR(C)
 X
--------

 ha scritto nel messaggio
news:t1Qd9.6256$AW6.1...@twister2.libero.it...

Posso non aver capito nulla, ma mi è sembrato di capire che ogni Qualità ha
solamente un range di valori Da e A; se questo è vero non capisco perche
lavori con due tabelle e non con una sola che abiia la seguente struttura:
tblQualita con
idQualita -chiave primaria contatore
Qualita   -testo
Da        -numerico
A         -numerico
Una struttura del genere ti eviterebbe un sacco di problemi.
Ipotizziamo che si lavori con una sola tabella, come penso io.
Se nella maschera il controllo in cui digiti la Qualità si chiama
txtQualita.
Se nella maschera il controllo in cui digiti il numero di cui verificare la
congruità si chiama txtNumero.
Nell'origine controllo della casella di testo non associata in cui vuoi
evidenziare l'eventuale errore scrivi:
=IIf(IsNull([txtQualita]) Or
IsNull([txtNumero]);"";IIf([txtNumero]>=DLookUp("Da";"tblQualita";"Qualita="
& Chr$(34) & [txtQualita] & Chr$(34)) And
[txtNumero]<=DLookUp("A";"tblQualita";"Qualita=" & Chr$(34) & [txtQualita] &
Chr$(34));"";"Fuori tolleranza"))
Già che ci sei, ti consiglio anche di verificare l'esattezza della qualità
digitata in txtQualita: a fronte dell'evento "Prima di aggiornare" di
txtQualita genera il seguente codice VBA:
Private Sub txtQualita_BeforeUpdate(Cancel As Integer)
If IsNull(DLookup("IDQualita", "tblQualita", _
"Qualita =" & Chr$(34) & Me!txtQualita & Chr$(34))) Then
    MsgBox "La qualità " & Me!txtQualita & " non esiste"
    Cancel = True
    Me!txtQualita.Undo
End If
End Sub
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

 ?SPQR(C)
ma che vordi'
--
a.cara

 ciao
Scusami, ma c'è qualcosa che non mi quadra; se per una Qualita esistono più
range di tolleranza, al momento che digiti solo la qualità come fa Access a
capire a quale dei tanti range di tolleranza di quella qualità deve far
riferimento?
Insomma se, come dici, non c'è univocità tra la qualità ed la tolleranza
(alias range Da-A) non credi che c'è qualcosa che non va?


 > qualità.
    Allora dillo che mi vuoi male, cosi' facciamo prima.



perche mi va bene il tuo codice per questa cosa
intendo dire che la qualita ha piu tolleranze ma non della stessa cosa
ci sono le tolleranze della durezza dei materiali
           le tolleranze delle percentuali di componenti ecc... ecc....
ciaoooooooo

 Chr$(34));"";"Fuori tolleranza"))
**************************************************************
è possibile che se il numero è fuori tolleranza, lo stesso numero diventi
rosso.
senza altri controlli oltre a quello txtqualità e txtnumero?

 wrote in message
UJie9.12918$%z1.2...@twister1.libero.it...

A fronte dell'evento "Dopo aggiornamento" di txtnumero prova con:
If Me!txtNumero >=DLookUp("Da", "tblQualita", "Qualita=" _
& Chr$(34) & Me!txtQualita & Chr$(34)) And
Me!txtNumero <= DLookUp("A","tblQualita", "Qualita=" _
& Chr$(34) & Me!txtQualita & Chr$(34)) Then
    Me!txtNumero.ForeColor = 0
Else
    Me!txtNumero.ForeColor = 255
End If
Però ti funzionerà solo se la maschera ha una visualizzazione a Maschera
Singola.
Se invece la tua maschera ha una visualizzazione a Maschere continue la
soluzione la trovi tra le FAQ del Sito Comune (link qui sotto) o, se usi
A2000 o AXP, nella formattazione condizionale.



non funziona mi da il numero sempre in rosso probabilmente la struttura a
qualche problema
ho provato a fare qualche cambiamento ma niente???????????''

 ho provato a fare qualche cambiamento ma niente???????????''
Beh, la mia soluzione presuppone che tu abbia una tabella unica
Qualita/Tolleranze; mi sono dimenticato che tu operi con due tabelle
combinate; comunque continua a sfuggirmi come fai a identificare il renge di
valori conoscendo solo la qualità.
