Newsgroup: it.comp.appl.access
Titolo: Totali su report da query da campi incrociati...

Circa due giorni fa ho chiesto informazioni a riguardo dell'oggetto, e 
sv mi ha gentilmente dato la dritta.
Ma, è proprio vero, l'appettito vien mangiando. Avrei bisogno di 
aggiungere dei calcoli su "piè di pagina report" ed allora forte 
dell'esempio ho scritto:
....
....
             Me("Ore" & Trim(Conta)).ControlSource = "= int(Somma([" & 
fld.Name & "]) / 60)"
             Me("Ore" & Trim(Conta)).Visible = True
             Me("min" & Trim(Conta)).ControlSource = "= somma([" & 
fld.Name & "]) - int(Somma([" & fld.Name & "]) / 60)"
             Me("min" & Trim(Conta)).Visible = True
....
....
però all'esecuzione ricevo il seguente messaggio:
     "Il Modulo di gestione di database Microsoft Jet non riconosce '' 
come nome nome di campo o espressione valida"
Ho controllato tutti i campi passo passo con il debug, ma non trovo 
nulla di strano. Qualcuno ha qualche consiglio da darmi?
Grazie in anticipo Ale.

 ha scritto nel messaggio news:4374c3b9$0$13260$4faf...@reader2.news.tin.it...

Dove lo hai inserito il codice?
Ciao.
-- 
Sergio MAZZA 

Sergio MAZZA ha scritto:

l'ho inserito in :
Private Sub Report_Open(Cancel As Integer)

 Private Sub Report_Open(Cancel As Integer)
"
fld.name
" a cosa si riferisce? Esiste?
Ciao.
-- 
Sergio MAZZA 

Sergio MAZZA ha scritto:

Scusa ti allego la routine completa, (Che poi è quella scaricata dal 
sito comune):
Private Sub Report_Open(Cancel As Integer)
DoCmd.Maximize
Me.RecordSource = "Attivita_CampiIncrociati"
Dim qdf As DAO.QueryDef
Dim fld As DAO.Field
Dim rst As DAO.Recordset
Dim Conta As Integer
Dim Confronto As String
' Confronto = ">= #" & Forms!FrmRepAttivita!TxtDaData & "# AND <= #" & 
Forms!FrmRepAttivita!TxtAData & "#"
Set qdf = CurrentDb().QueryDefs("Attivita_CampiIncrociati")
qdf.Parameters![[Forms]![FrmRepAttivita]![TxtDaData]] = 
Format([Forms]![FrmRepAttivita]![TxtDaData], "Short date")
qdf.Parameters![[Forms]![FrmRepAttivita]![TxtAData]] = 
Format([Forms]![FrmRepAttivita]![TxtAData], "Short Date")
Set rst = qdf.OpenRecordset
Conta = 1
For Each fld In rst.Fields
     If Conta = 1 Then
         Me("Etichetta" & Trim(Conta)).Caption = "Data"
         Me("Etichetta" & Trim(Conta)).Visible = True
     Else
         Me("Etichetta" & Trim(Conta)).Caption = fld.Name
         Me("Etichetta" & Trim(Conta)).Visible = True
     End If
     Me("Controllo" & Trim(Conta)).ControlSource = fld.Name
     Me("Controllo" & Trim(Conta)).Visible = True
         If Conta = 1 Then
         Else
             MsgBox Me("Ore" & Trim(Conta)).ControlSource
            Me("Ore" & Trim(Conta)).ControlSource = "= int(Somma([" & 
fld.Name & "]) / 60)"
            Me("Ore" & Trim(Conta)).Visible = True
            Me("min" & Trim(Conta)).ControlSource = "= somma([" & 
fld.Name & "]) - int(Somma([" & fld.Name & "]) / 60)"
            Me("min" & Trim(Conta)).Visible = True
         End If
     Conta = Conta + 1
Next
Set rst = Nothing
Set qdf = Nothing
Set fld = Nothing
End Sub

 ha scritto nel messaggio news:43787205$0$27604$4faf...@reader1.news.tin.it...

E' probabile che il conteggio vada oltre al numero effettivo di campi incrociati che genera la query?
Ciao.
-- 
Sergio MAZZA 

Sergio MAZZA ha scritto:

Innanzitutto Grazie per l'attenzione,
ma non credo che succeda ciò che mi stai dicendo, l'istruzione "For Each 
fld In rst.Fields" utilizza soltanto i campi che vengono generati dalla 
query.

 generati dalla query.
Ne ero cosciente ma un controllo non fa mai male.
Comunque l'errore da te citato è sintomo di un riferimento ad un campo/controllo non esistente; più che ricontrollare bene non posso 
suggerirti...
Ciao.
-- 
Sergio MAZZA 

Goio ha scritto:

Per chi potrebbe essere utile:
Grazie a Roberto Massoni la soluzione dell'inghippo;
a fronte dell'evento "Suapertura" del report a normalizzare i controlli 
del corpo del report, ovvero
genera a fronte dell'evento "Su apertura" solo il segunete codice VBA:
Private Sub Report_Open(Cancel As Integer)
DoCmd.Maximize
Me.RecordSource = "Attivita_CampiIncrociati"
Dim qdf As DAO.QueryDef
Dim fld As DAO.Field
Dim rst As DAO.Recordset
Dim Conta As Integer
Dim Confronto As String
Set qdf = CurrentDb().QueryDefs("Attivita_CampiIncrociati")
qdf.Parameters![[Forms]![FrmRepAttivita]![TxtDaData]] =  _
Format([Forms]![FrmRepAttivita]![TxtDaData], "Short date")
qdf.Parameters![[Forms]![FrmRepAttivita]![TxtAData]] =  _
Format([Forms]![FrmRepAttivita]![TxtAData], "Short Date")
Set rst = qdf.OpenRecordset
Conta = 1
For Each fld In rst.Fields
     If Conta = 1 Then
         Me("Etichetta" & Trim(Conta)).Caption = "Data"
         Me("Etichetta" & Trim(Conta)).Visible = True
     Else
         Me("Etichetta" & Trim(Conta)).Caption = fld.Name
         Me("Etichetta" & Trim(Conta)).Visible = True
     End If
     Me("Controllo" & Trim(Conta)).ControlSource = fld.Name
     Me("Controllo" & Trim(Conta)).Visible = True
     Conta = Conta + 1
Next
Set rst = Nothing
Set qdf = Nothing
Set fld = Nothing
End Sub
Poi a fronte dell'evento "Su formattazione" della sezione Pié di pagina
report genera il seguente codice VBA:
Private Sub PièDiPaginaReport_Format(Cancel As Integer, _
     FormatCount As Integer)
Dim qdf As DAO.QueryDef
Dim fld As DAO.Field
Dim rst As DAO.Recordset
Dim Conta As Integer
Set qdf = CurrentDb().QueryDefs("Attivita_CampiIncrociati")
qdf.Parameters![[Forms]![FrmRepAttivita]![TxtDaData]] =  _
Format([Forms]![FrmRepAttivita]![TxtDaData], "Short date")
qdf.Parameters![[Forms]![FrmRepAttivita]![TxtAData]] =  _
Format([Forms]![FrmRepAttivita]![TxtAData], "Short Date")
Set rst = qdf.OpenRecordset
Conta = 1
For Each fld In rst.Fields
     If Conta > 1 Then
         Me("Ore" & Trim(Conta)).Visible = True
         Me("Ore" & Trim(Conta)) = Int(DSum(fld.Name, _
             "Attivita_CampiIncrociati")/60)
         Me("min" & Trim(Conta)).Visible = True
         Me("min" & Trim(Conta)) = DSum(fld.Name, _
             "Attivita_CampiIncrociati") - Int(DSum(fld.Name, _
             "Attivita_CampiIncrociati")/60)
     End If
     Conta = Conta + 1
Next
Set rst = Nothing
Set qdf = Nothing
Set fld = Nothing
End Sub
e il tutto funziona.
Grazie ancora a Roberto Massoni.