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
Sib
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
Devi usare la proprieta' "ValidoSe" della tabella, apri le proprieta' della
tabella e la trovi subito.
> Sono riuscita a farlo nel "valido se" della maschera,
cut
lascia perdere la maschera che non e' "assoluta"
Sib
>Devi usare la proprieta' "ValidoSe" della tabella, apri le proprieta' della
>tabella e la trovi subito.
>> Sono riuscita a farlo nel "valido se" della maschera,
>cut
>lascia perdere la maschera che non e' "assoluta"
>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!
hai ragione, mi era sfuggito che le tabelle sono due, allora torniamo alla
maschera, seppure il problema si ripresentera' per ogni maschera che
consente di modificare quei dati.
> 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!
no, questo non si puo' fare.
> 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ì)
se li chiami cosi' puoi ciclarli con un for to next:
for int=1 to 10
Me("Val"& intA)
next
> 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:
cut
usando il for to next metti un "exit sub" subito dopo il setfocus.
Sib
cut
cut
> usando il for to next metti un "exit sub" subito dopo il setfocus.
>
> 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