Query dinamica campi incrociati

di il
11 risposte

Query dinamica campi incrociati

Buongiorno,
Ho adattato questo codice ad una sottomaschera e funziona benissimo.
Adesso vorrei poter riuscire ad inserire nel piè di pagina della maschera una casella di testo totale per calcolare il totale della colonna dove ho il valore.
È fattibile?



Private Sub Report_Open(Cancel As Integer)
DoCmd.Maximize
Me.RecordSource = "Dati_Cee_Incrociati"
Dim qdf As DAO.QueryDef
Dim fld As DAO.Field
Dim rst As DAO.Recordset
Dim Conta As Integer
Set qdf = CurrentDb().QueryDefs("Dati_Cee_Incrociati")
Set rst = qdf.OpenRecordset
Conta = 1
For Each fld In rst.Fields
Me("Etichetta" & Trim(Conta)).Caption = fld.Name
Me("Etichetta" & Trim(Conta)).Visible = True
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

11 Risposte

  • Re: Query dinamica campi incrociati

    Nella casella di testo ci scrivi dentro
    =Somma([Maschere]![NomeMascheraPrincipale]![NomeSottomaschera]![NomeCampoDaCuiVuoiIlTotale])
  • Re: Query dinamica campi incrociati

    Le risposte veloci... sono sempre quelle pericolose, spesso date con poca riflessione.

    Nel codice che riporti non vedo alcun controllo al Fields.Count... quanti Controlli hai...? (Sufficienti sempre...?)

    Temo che non sia così banale fare quello che chiedi, e forse la cosa più semplice è di ricostruire il ControlSource della TextBox di somma... proprio nel ciclo che fai e poi uscendo dal ciclo lo riassegni.

    Esempio hai 3 Campi, quindi 3 Controlli visibili... nel ciclo scriverai una Variabile che ad ogni giro vada ad implementare la somma del Controllo(che poi è la colonna), dovrai ottenere:
    
    sControlSource="=Somma(Controllo1)+Somma(controllo2)+Somma(Controllo3)"
    Quindi
    
    sControlSource=sControlSource & "Somma([" & fld.Name & "])+"
    Uscendo dal ciclo poi
    
    If Len(sControlSource)>0 Then sControlSource="=" & Mid$(sControlSource,1,len(sControlSource)-1)
    Me!NomeTextBoxSomma.ControlSource=sControlSource
  • Re: Query dinamica campi incrociati

    Ciao Alex,

    Ho provato ad inserire il tuo codice ma il risultato che viene fuori è Nome?
    Sembra che porti nel campo anziché il valore il nome della colonna.
    Sai x favore dirmi dove sbaglio?
    Grazie
  • Re: Query dinamica campi incrociati

    È possibile che sia perché nella colonna ho record nulli?
    Mi è venuto questo dubbio.
    Grazie
  • Re: Query dinamica campi incrociati

    Si certo usa NZ(....)
  • Re: Query dinamica campi incrociati

    Niente nn mi funziona

    Private Sub Form_Open(Cancel As Integer)
    Me.RecordSource = "Q_PROV_CONF"

    Dim qdf As DAO.QueryDef
    Dim fld As DAO.Field
    Dim rst As DAO.Recordset
    Dim Conta2 As Integer
    Dim lbl As Controls
    Dim Tot1 As Controls

    Set qdf = CurrentDb().QueryDefs("Q_PROV_CONF")
    Set rst = qdf.OpenRecordset

    Conta = 1
    For Each fld In rst.Fields
    Me("lbl" & Conta).ControlSource = fld.Name
    Me("lbl" & Conta).visible = True

    Me("txt" & Conta).Caption = fld.Name
    Me("txt" & Conta).visible = True


    If Conta > 6 Then
    sControlSource = sControlSource & "Somma([" & Nz(lbl7) & "])+"
    End If


    Conta = Conta + 1
    Next
    ' azzero conta per usarlo nel prossimo for

    If Len(sControlSource) > 0 Then sControlSource = "=" & mID$(sControlSource, 1, Len(sControlSource) - 1)
    Me!Tot1.ControlSource = sControlSource


    If Conta > 0 Then
    Conta = 0
    End If

    Set qdf = Nothing
    Set fld = Nothing
    Set rst = Nothing

    End Sub
  • Re: Query dinamica campi incrociati


    maschera.jpg
    maschera.jpg

  • Re: Query dinamica campi incrociati

    Mi esce il campo #Nome?
  • Re: Query dinamica campi incrociati

    Fai un Debug.Print del ControlSource e vedi cosa hai costruito...!
    Se i campi che cicli sono quelli dell'immagine che mostri è evidente che stai prendendo un'abbaglio...
  • Re: Query dinamica campi incrociati

    Ciao Alex,
    puoi dirmi dove e' che sbaglio?
    ho fatto il debug print e sinceramente il campo lbl7 che sarebbe la prima colonna con i valori mi da valore nullo.
    se metto i tuo codice nel ciclo
    If Conta > 6 Then
    sControlSource = sControlSource & "Somma([" & Nz(fld.Name) & "])+"
    End If
    Debug.Print Me.lbl7
    non so se e' fattibile quello che voglio fare, praticamente la colonna, per esempio "INDIPENDENT 5%" ha dei valori, io vorrei riportare la somma di questi valori in un campo Tot1 in pie' pagina sottomaschera.
    non riesco a capire cosa devo prendere.
    grazie
  • Re: Query dinamica campi incrociati

    Io da da quella Tabella, vedo che il primo ed anche l'unico campo da sommare è la colonna chiamata [Importo_]... non riesco a chiudere il giro con quello che dici non ho i riferimenti.
    Di sicuro se sommi altri campi(Colonne) che no sia quella qualche anomalia è sicuramente normale... e se cicli i FIleds in modo indiscriminato accade che crei una Somma di campi non congruenti.
    Se il campo di cui parliamo è sempre >6 allora può andare ma è errato questo
    
    sControlSource & "Somma([" & Nz(lbl7) & "])+"
    La costruzione della somma deve essere dinamica in base a quante colonne hai da sommare, e questo è evidente chenon lo fa.
    Che poi tu utilizzi una lbl al posto di una Textbox non so se sia così...

    Insomma qualche cosa non quadra, sicuramente, ma non ho gli elementi per capire in astratto cosa.
Devi accedere o registrarti per scrivere nel forum
11 risposte