Code:
Option Compare Database
Option Explicit
Private Const cstrQName As String = "qryTemp" 'The name of the temporary query
'
Private Sub Report_Open(Cancel As Integer)
Dim qdef As DAO.QueryDef 'The temporary query
On Error Resume Next
With CurrentDb
'Try to delete the temp query
.QueryDefs.Delete cstrQName
'Create the temp query
Set qdef = .CreateQueryDef(cstrQName, MyRecordSource)
End With
'Set the recordsource of the report to the temp query
Me.RecordSource = cstrQName
End Sub
Private Sub Report_Close()
'Delete the temp query
On Error Resume Next
CurrentDb.QueryDefs.Delete cstrQName
End Sub
Private Function MyRecordSource() As String
Dim qry As String
qry = "SELECT Portafoglio.TrattativaID, Sum(Portafoglio.Gestito) AS SommaDiGestito, IIf(IsNull([sommadigestito]),0,FormatNumber([sommadigestito]/[totale],3)) AS Valore, ""Gestito"" as Investimento, Sum(Nz([gestito])+Nz([assicurativo])+Nz([gestioni patrimoniali])+Nz([amministrato])+Nz([certificati])+Nz([portafoglio]![liquidita])) AS Totale " & vbCrLf & "FROM Trattative INNER JOIN (Candidati INNER JOIN Portafoglio ON Candidati.IDcandidato = Portafoglio.CandidatoID) ON Trattative.IDtrattativa = Portafoglio.TrattativaID " & vbCrLf & _
"GROUP BY Portafoglio.TrattativaID " & vbCrLf & _
"HAVING (((Portafoglio.TrattativaID)=442244486458333)) "
qry = qry & "UNION SELECT Portafoglio.TrattativaID, Sum(Portafoglio.Assicurativo) AS SommaDiAssicurativo, IIf(IsNull([sommadiassicurativo]),0,FormatNumber([sommadiassicurativo]/[totale],3)) AS Valore, ""Assicurativo"" as Investimento, Sum(Nz([gestito])+Nz([assicurativo])+Nz([gestioni patrimoniali])+Nz([amministrato])+Nz([certificati])+Nz([portafoglio]![liquidita])) AS Totale " & vbCrLf & _
"FROM Trattative INNER JOIN (Candidati INNER JOIN Portafoglio ON Candidati.IDcandidato = Portafoglio.CandidatoID) ON Trattative.IDtrattativa = Portafoglio.TrattativaID " & vbCrLf & _
"GROUP BY Portafoglio.TrattativaID " & vbCrLf & _
"HAVING (((Portafoglio.TrattativaID)=442244486458333)) "
qry = qry & "UNION SELECT Portafoglio.TrattativaID, Sum(Portafoglio.[Gestioni patrimoniali]) AS [SommaDiGestioni patrimoniali], IIf(IsNull([sommadigestioni patrimoniali]),0,FormatNumber([sommadigestioni patrimoniali]/[totale],3)) AS Valore, ""Gestioni patrimoniali"" as Investimento,Sum(Nz([gestito])+Nz([assicurativo])+Nz([gestioni patrimoniali])+Nz([amministrato])+Nz([certificati])+Nz([portafoglio]![liquidita])) AS Totale " & vbCrLf & _
"FROM Trattative INNER JOIN (Candidati INNER JOIN Portafoglio ON Candidati.IDcandidato = Portafoglio.CandidatoID) ON Trattative.IDtrattativa = Portafoglio.TrattativaID " & vbCrLf & _
"GROUP BY Portafoglio.TrattativaID " & vbCrLf & _
"HAVING (((Portafoglio.TrattativaID)=442244486458333)) "
qry = qry & "UNION SELECT Portafoglio.TrattativaID, Sum(Portafoglio.Amministrato) AS SommaDiAmministrato, IIf(IsNull([sommadiamministrato]),0,FormatNumber([sommadiamministrato]/[totale],3)) AS Valore, ""Amministrato"" as Investimento, Sum(Nz([gestito])+Nz([assicurativo])+Nz([gestioni patrimoniali])+Nz([amministrato])+Nz([certificati])+Nz([portafoglio]![liquidita])) AS Totale " & vbCrLf & _
"FROM Trattative INNER JOIN (Candidati INNER JOIN Portafoglio ON Candidati.IDcandidato = Portafoglio.CandidatoID) ON Trattative.IDtrattativa = Portafoglio.TrattativaID " & vbCrLf & _
"GROUP BY Portafoglio.TrattativaID " & vbCrLf & _
"HAVING (((Portafoglio.TrattativaID)=442244486458333)) "
qry = qry & "UNION SELECT Portafoglio.TrattativaID, Sum(Portafoglio.Certificati) AS SommaDiCertificati, IIf(IsNull([sommadicertificati]),0,FormatNumber([sommadicertificati]/[totale],3)) AS Valore, ""Certificati"" as Investimento, Sum(Nz([gestito])+Nz([assicurativo])+Nz([gestioni patrimoniali])+Nz([amministrato])+Nz([certificati])+Nz([portafoglio]![liquidita])) AS Totale " & vbCrLf & _
"FROM Trattative INNER JOIN (Candidati INNER JOIN Portafoglio ON Candidati.IDcandidato = Portafoglio.CandidatoID) ON Trattative.IDtrattativa = Portafoglio.TrattativaID " & vbCrLf & _
"GROUP BY Portafoglio.TrattativaID " & vbCrLf & _
"HAVING (((Portafoglio.TrattativaID)=442244486458333)) "
qry = qry & "UNION SELECT Portafoglio.TrattativaID, Sum(Portafoglio.Liquidita) AS SommaDiLiquidita, IIf(IsNull([sommadiliquidita]),0,FormatNumber([sommadiliquidita]/[totale],3)) AS Valore, ""Liquidita"" as Investimento, Sum(Nz([gestito])+Nz([assicurativo])+Nz([gestioni patrimoniali])+Nz([amministrato])+Nz([certificati])+Nz([portafoglio]![liquidita])) AS Totale " & vbCrLf & _
"FROM Trattative INNER JOIN (Candidati INNER JOIN Portafoglio ON Candidati.IDcandidato = Portafoglio.CandidatoID) ON Trattative.IDtrattativa = Portafoglio.TrattativaID " & vbCrLf & _
"GROUP BY Portafoglio.TrattativaID " & vbCrLf & _
"HAVING (((Portafoglio.TrattativaID)=442244486458333));"
'Return the SQL text
MyRecordSource = qry
End Function
That creates a temporary query for the Recordsource as long as report running.