Newsgroup: it.comp.appl.access
Titolo: verifica campi nulli in tabella

ciao a tutto il newsgroup,
ho una tabella cosě strutturata (mi serve a generare un report che accoglie 
titoli e paragrafi descrittivi per una ventina di "modelli"):
ID_mod: contatore
nome_mod: testo
tit1: testo
txt1: memo
...
tit112: testo
txt112: memo
vorrei riuscire a realizzare uno strumento che verifichi se esiste anche 
*un* solo campo vuoto per ciascun record, e in caso affermativo me lo 
segnali.
questo strumento lo andrei poi ad usare in una maschera continua che mi 
elenca i 20 modelli.
ho ottenuto il risultato desiderato con un controllo, in questa maschera, 
contenente una lunga serie di iif, ma č piuttosto lento considerato il 
numero di campi che deve controllare (piů di 100..).
grazie mille per gli eventuali consigli,
ciao!
em.an. 

 ha scritto nel messaggio 
news:46dc4fdb$0$21201$5fc...@news.tiscali.it...

Ciao,
Potresti controllare l'inserimento dei dati e verificare che tutti i campi 
che devono essere compilati lo siano,mettendo sull'evento update del 
controllo di inserimento un test del null.
-- 
Marco Papetti
www.shortchannel.it
 Il software di commercio elettronico OpenSource 

 mi elenca i 20 modelli.
Immagino che tu non abbia una maschera in cui sono riportati 224 controlli, 
vero?
In tal caso credo che la cosa migliore sia utilizzare il VBA.
Ecco come farei io.
Function EsistonoVuoti() As Boolean
    Dim bVuoto As Boolean
    Dim rst As New ADODB.Recordset
 
    bVuoto = False
    For nCont = 1 To 112
        rst.Open "SELECT (tit" & nCont & " + txt" & nCont & ") AS Dummy FROM 
myTable", CurrentProject.Connection, adOpenForwardOnly, adLockReadOnly
        If IsNull(rst!Dummy) Then
            bVuoto = True
            Exit For
        End If
    Next
 
    rst.Close
    Set rst = Nothing
 
    EsistonoVuoti = bVuoto
End Function
Poi puoi richiamare questa funzione da dove ti torna meglio.
--
PBsoft di Gabriele Bertolucci
www.pbsoft.it
skype:pbsoftsolution


intanto grazie per il suggerimento,
em.an.


ciao marco, questo tipo di verifica l'avevo già implementata.
quello che vorrei è che venga effettuato anche un controllo visibile prima 
di accedere alla maschera che effettivamente contiene i campi txtN e titN in 
questione.
grazie comunque per il suggerimento,
em.an. 

 4    mod3            vero
Devi modificare leggermente la funzione che ho scritto io, in questo modo:
Function EsistonoVuoti(IDRecord As Long) As Boolean
    Dim bVuoto As Boolean
    Dim rst As New ADODB.Recordset
 
    bVuoto = False
    For nCont = 1 To 112
        rst.Open "SELECT (tit" & nCont & " + txt" & nCont & ") AS Dummy FROM 
myTable WHERE nomecampo = " & IDRecord, CurrentProject.Connection, adOpenForwardOnly, 
adLockReadOnly
        If IsNull(rst!Dummy) Then
            bVuoto = True
            Exit For
        End If
    Next
 
    rst.Close
    Set rst = Nothing
 
    EsistonoVuoti = bVuoto
End Function
Per visualizzare il risultato di questa funzione, devi utilizzarla come origine 
controllo della casella di testo in cui deve comparire quel "vero o falso" 
a cui accennavi, in questo modo:
=EsistonoVuoti([nomecontrollorelativoalcampochiave])
So che quello che vedrai non è la dicitura "vero" o "falso", ma basta che 
combini quello che ti ho detto io con l'istruzione Iif (della quale trovi 
ampia documentazione nell'help).


[omissis]
A parte la mia ultima risposta, mi sembra comunque che il problema sia computazionalmente 
troppo complicato.
Valuta anche la possibilità di memorizzare nella stessa tabella, anche l'informazione 
in questione, ovviamente prevedendo di gestirla tramite codice: in questo 
modo perdi un po' riguardo alla normalizzazione, ma aumenti di molto la semplicità.


 ha scritto nel messaggio 
news:875ea3552c13c8...@news.tin.it...

ciao Gabriele,
grazie per il tuo valido aiuto, ora ci provo..
ti pongo un'ultima domanda: quando parli di "problema computazionalmente 
troppo complicato" cosa intendi dire?
ciao!
em.an. 

 computazionalmente troppo complicato" cosa intendi dire?
E' una cattiva espressione per dire che per ottenere quello che desideri 
stai probabilmente seguendo una strada troppo complessa, quindi, forse, vale 
la pena di sacrificare qualcosa (nel tuo caso la normalizzazione del db ed 
il codice per gestire i campi in pių) per seguire poi una strada pių diritta 
e pianeggiante verso l'atteso risultato.


 considerato il numero di campi che deve controllare (pių di 100..).
iif? levale. Metti una if semplice del tipo:
if "" & c1 = "" or "" & c2 = "" _
	....or.... then
	msgbox "'sto record cia' campi null" & idrecord
endif
una cosa del genere dovrebbe pesare fra 1 e 1,5 millisec se hai un  286
-- 
ac
y-1=x