Newsgroup: it.comp.appl.access
Titolo: campo richiesto se... valore in altro campo

BuonGiorno a tutti
ho due tabelle Consistenze e Valori
tblConsistenze ha come campi 
id_cons (chiave) cons1 cons2 cons3 etc.
che vengono riempiti all'occorrenza da un utente attraverso formConsis
tblValori ha i campi 
id_cons (che la collega a consistenze) val1 val2 val3 etc 
che devono venir riempiti da un secondo utente attraverso una maschera
formValori (sottomaschera di formConsis - oad essa collegata) con
l'obbligo di riempire almeno i campi per cui in consistenze ci sono dei
dati
ovvero:
se per l'id_cons 001 cons1>0 l'utente non deve poter uscire dalla
maschera valori sino a che non ha inserito un valore in val1 (avvisato
da opportuna msgBox)
se invece cons1=0 (o is null) allora può a suo piacimento inserire
comunque un valore in val1 oppure lasciare la casella vuota
Probabilmente il mio problema risiede nel fatto che sono fusa e non solo
non so da che parte cominciare ma non riesco neppure a mettere a fuoco
il giusto criterio per cercare nel newsgroup o nell Help di access (uso
2002) indicazioni utili ... Considererò, quindi, preziose anche
indicazioni tipo "ne abbiamo già parlato, cerca il post di... o guardati
il tal argomento della guida"
Grazie mille
Nadia 
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 ovvero:
cut
 se vuoi proprio essere cattiva, imposta le condizioni di convalida nella
tabella, vedrai che non ci sara' modo di inserire un record se non le
rispetti.
Sib

"Sib" <si...@SPAMiol.it> wrote in message
news:Rb3Da.34712$
pR3.7...@news1.tin.it

Grazie Sib
Ma le condizioni di convalida a cui ti riferisci sono quelle che si
scrivono in "valido se"?
perchè posto che mettere le condizioni in tabella sarebbe l'optimum, in
tabella però non sono
in alcun modo riuscita a condizionare la validità di un campo a quella
di un altro campo.
Sono riuscita a farlo nel "valido se" della maschera, 
ma nel caso specifico sono bloccata anche in maschera perchè 
non riesco a capire come impostare la condizione.
In effetti il punto è che non devo verificare il valore immesso
ma devo verificare che il valore venga immesso quando un altro campo 
è compilato ...per questo nell'oggetto ho messo "richiesto se" 
cerco di esemplificare con uno schemino
se in Consistenze ho
id_cons    cons1    cons2   consX
001          15        0      20
002          20       20       0
003           0        0       5
in Valori dovrò avere
id_cons     val1      val2         valX
001       richiesto   libero      richiesto
002       richiesto   richiesto   libero
003       libero      libero      richiesto   
dove "libero" significa che l'utente può inserire o non inserire un
valore a sua dscrezione
Quindi se cons è vuoto il campo val corrispondente non è richiesto 
ma comunque compilabile se cons è compilato il campo val corrispondente
è richiesto
e, ovviamente, io non so a priori quali saranno i campi "cons" compilati
e nella
tabella reale ci saranno almeno 30 campi di questo tipo 
Ci ho pensato per mezza sera ma poi ho fuso del tutto e mi riaffido al
NG
e ancora Grazie


 Sono riuscita a farlo nel "valido se" della maschera,
cut
lascia perdere la maschera che non e' "assoluta"
Sib

Sib
ho guardato il “valido se” nelle proprietà della tabella …ma continua a
non essere quello che mi serve in questa fase - mi servirà poi per
dirgli che val2 deve essere > di val1 … ma non mi permette di vedere i
campi di un’altra tabella  - non nel generatore di espressioni almeno e
non conosco altro luogo in cui impostare la condizione che comunque non
è di validità del valore ma di richiesta del valore…
l’ideale sarebbe poter cambiare la proprietà Richiesto sì/no della
tabella valori per il campo val a seconda del fatto che in cons ci sia o
meno un valore … ma non so ne se si può fare ne come!
 
Quindi ho rispulciato un po’ il news group e alla fine ho provato a
scrivere questo codice
sull’evento  “prima di aggiornare” della maschera in cui visualizzo i
dati di entrambe le tabelle (che sono in relazione 1 a 1)
Private Sub Form_BeforeUpdate(Cancel As Integer)
 
  If (IsNull(val1)) Then
        If cons1 > 0 Then
        MsgBox "Inserisci il valore per val1", vbExclamation, "Valore
Richiesto"
        val1.SetFocus
        End If
  End If
End Sub
Sul singolo campo funziona!  
Il punto è che nella realtà dei fatti nella tabella Valori ho almeno 20
campi per i quali fare questa verifica  (che peraltro non si chiamano
val1 val2, ma alla necessità potrei anche chiamarli così)
Ho provato allora a duplicare il codice aggiungendo prima della End Sub
lo stesso in cui ho sostituito val1 con val2 e cons1 con cons2
Ma come prevedibile non da un gran bel risultato! 
Appaiono due maschere in sequenza e il focus va solo sull’ultimo
controllo a cui manca il valore
Allora ho provato ad inventarmi una cosa di questo tipo:
Dim Num As Integer
Dim Campo As Variant
Dim Base As Variant
For num = 1 To 5
Campo = "val" & Num
Base = "cons" & Num
If (IsNull(Campo)) Then
      If base > 0 Then
      MsgBox "Inserisci il valore per" & Campo, vbExclamation, "Valore
Richiesto"
      Campo.SetFocus
      End If
End If
Next Num
NON succede niente! Ovvero non viene fatto nessun controllo e non viene
dato alcun messaggio di errore
…non so più cosa fare!!!
Mendico di nuovo aiuto!


 Allora ho provato ad inventarmi una cosa di questo tipo:
cut
usando il for to next metti un "exit sub" subito dopo il setfocus.
Sib

 Sib
BINGO!
l'ho scritta così e nel db di prova funziona benissimo! Mille Grazie Sib
Private Sub Form_BeforeUpdate(Cancel As Integer)
 
  Dim num As Integer
  For num = 1 To 5
    If (IsNull(Me("val" & num))) Then
        If Me("cons" & num) > 0 Then
            MsgBox "Inserisci il valore per val" & num, vbExclamation,
"Valore Richiesto"
            Me("val" & num).SetFocus
            Exit Sub
        End If
    End If
  Next num
End Sub
NAdia
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it