Newsgroup: it.comp.appl.access
Titolo: Funzione per la verifica del valore di alcuni controlli

A00/W98,
Cari frequentatori di questo NG,
mi aiutate a scrivere una funzione che vada a verificare se il valore di
alcuni controlli di un report è Null e mi riporti il numero dei controlli
che effettivamente è Null?
Il primo problema è indicare quali sono i controlli da ciclare
(mioreport.section(0).controls) ?
Il secondo è riportare in una variabile il conteggio dei controlli che
presenta valori Null.
Vi ringrazio della Vs. disponibilità,
Giovanni D'Orsi

 ha scritto nel messaggio 
news:zuVlg.18063$bj6....@tornado.fastwebnet.it...

Anche se non ne capisco l'utilità il codice, inserito nell'evento "su 
formattazione", potrebbe essere:
'---
dim oCtrl as controls
for each oCtrl in me.controls
    if isnull(oCtrl) then
        msgbox oCtrl.name & " è nullo"
    end if
next
set oCtrl = nothing
'---
Ciao.
-- 
Sergio MAZZA 

Giovanni D'Orsi ha scritto:

Perchè esegui un controllo nel Report e non nel punto d'inserimento
dati oppure
nella Query...?
Se lo esegui nella Query, visto che il controllo deve essere fatto
Record per Record
otterresti di certo una velocità d'esecuzione maggiore, ovviamente ti
dovresti affidare
ad una Routine esterna ottimizzandone i controlli.
Altrimenti quanto ti ha suggerito Sergio è esattamente la stessa cosa
realizzata
Runtime nel Report.
Ciao
@Alex

 ha scritto nel messaggio 
news:zuVlg.18063$bj6....@tornado.fastwebnet.it...

La verifica la puoi fare sulla query che alimenta il report.
O intendi qualcosa di simile:
Private Sub Corpo_Print(Cancel As Integer, PrintCount As Integer)
Dim c As Control
For Each c In Me.Controls
Debug.Print c.Name & " " & IIf(c.ControlType = 109, c.OldValue, "")
Next
End Sub
Mi sa che quest'ultimo non funziona.
Ciao, Carlo 

Ringrazio per i tentativi ma credo che se non mi spiego bene non mi potete
aiutare compiutamente.
I controlli del report contengono valori provenienti da piů query a campi
incrociati e, come non potevate immaginare, mi occorre fare la media
aritmetica non in "senso verticale" (ove basterebbe Avg di Sql) ma in "senso
orizzontale".
Spiacevolmente perň, i risultati del calcolo risentono della presenza di
valori Null nel senso che, se ve ne sono, il valore medio č piů basso del
dovuto stando al denominatore il conteggio.
Attualmente nell'origine controllo del controllo "Media" ho creato la
formula:
=(nz([gen])+nz([feb])+nz([mar])+nz([apr])+nz([mag])+nz([giu])+nz([lug])+nz([
ago])+nz([set])+nz([ott])+nz([nov])+nz([dic]))/12, deprimendo la media
proprio perchč a volte il denominatore č minore di 12; quindi dovrei fare:
=(nz([gen])+nz([feb])+nz([mar])+nz([apr])+nz([mag])+nz([giu])+nz([lug])+nz([
ago])+nz([set])+nz([ott])+nz([nov])+nz([dic]))/(12-NullCount), con NullCount
consistente in una variabile che dovrebbe riportare il conteggio dei
controlli con valori nulli.
Data la mia scarsa conoscenza di Vba, non so tirare fuori uno straccio di
funzione che mi fornisca quel conteggio.
Spero di esser stato chiaro.
Grazie per l'aiuto
GD

 ha scritto nel messaggio 
news:iu7mg.18825$bj6...@tornado.fastwebnet.it...

Allora non si tratta di una media tra tutti i dodici mesi ma solo di una 
media tra i mesi che hanno un valore.
Sicuro che potrai parlare di media?
Voglio dire che se cerco la media degli incassi o del venduto in un anno, 
anche i mesi che non hanno prodotto guadagno o venduto, vanno 
conteggiati...se nň che media č?
Comunque con un po' di vba si riesce a valorizzare una variabile di 
divisione (quel tuo 12) in base ai campi non null.
Dim miaVariabile as integer
MiaVariabile = 12
if isnull(me.[Gen]) then
miaVariabile = miaVariabile -1
end if
if isnull(me.[Feb]) then
miaVariabile = miaVariabile -1
end if
...ecc
Questo č solo un esempio ma si possono seguire anche altre strade.
Ciao, Carlo 

 ha scritto nel messaggio 
news:iu7mg.18825$bj6...@tornado.fastwebnet.it...

=Dcount("*";"nometabella/query";"[nomeCampo]=Null")
Ciao.
-- 
Sergio MAZZA 

Per Carlo.
Hai ragione a dubitare di un valore medio che esclude alcuni Null,
ma nel mio caso l'attività produttiva cominciava a marzo e quindi non posso
fare una media su tutti i mesi nel primo anno; poi se faccio la media del
2006, essendo ancora a giugno, la media annua è giusto rapportarla a 6 mesi,
non trovi? Man mano che i record si riempiranno per i mesi successivi avrò
un minor numero di Null e tutto si aggiusta naturalmente.
Venendo al tuo suggerimento, puoi dare un'occhiata a queste routine: perché
non funzionano?
Dove dovrei inserire la funzione? forse in control source del controllo
Media?
_________________
Private Sub Corpo_Format(Cancel As Integer, FormatCount As Integer)
Dim intX As Integer
        If Me.FormatCount = 1 Then
            For intX = 1 To 12
                Me("Col" + Format(intX)) = Denominatore (??)
            Next intX
        End If
End Sub
__________________
Private Function Denominatore() As Integer
Dim rpt As Report
Dim ctl As Control
Denominatore = 12
For Each ctl In rpt.Controls
    If IsNull(ctl) Then
        Denominatore = Denominatore - 1
    End If
Next ctl
End Function
___________________
Ciao e grazie


Ciao, Carlo