Ho aggiunto il tuo suggerimento alle modifiche che ho apportato a setfocus e alle parentesi tonde
Pare che si inizi a intravedere la soluzione, solo che non viene accettato come campo vuoto l' intervallo di date: causa la cancellazione del rispettivo criterio nella query
query:
codice:
SELECT Promotori.CognomeNomePromotore, PaghePromot.DataRitAcconto, PaghePromot.SPAssegno, PaghePromot.Assegno, PaghePromot.SPBonifico, PaghePromot.Bonifico, PaghePromot.Contanti, Sum(([PagaOraNetta]*[OreLavorate])) AS Totale, PaghePromot.PagamEffettuato
FROM Promotori INNER JOIN (PaghePromot INNER JOIN PaghePromVoci ON PaghePromot.ID_PagheProm = PaghePromVoci.ID_PagheProm) ON Promotori.ID_Promotore = PaghePromot.Promotore
WHERE (((PaghePromot.DataRitAcconto) Between #12/12/1212# And #12/12/1212#)) OR (((Promotori.CognomeNomePromotore)=('Cognome1 Nome1')))
GROUP BY Promotori.CognomeNomePromotore, PaghePromot.DataRitAcconto, PaghePromot.SPAssegno, PaghePromot.Assegno, PaghePromot.SPBonifico, PaghePromot.Bonifico, PaghePromot.Contanti, PaghePromot.PagamEffettuato;
mentre il vba della maschera principale è:
codice:
Private Sub MostraPagaPromotori_Click()
'Verifica che la data di fine sia successiva alla data di inizio.
If DataFine < DataInizio Then
MsgBox "La data di fine deve essere successiva alla data di inizio."
DataInizio.SetFocus
Exit Sub
End If
' Crea una istruzione SQL utilizzando il criteri di ricerca immesso dall'utente
' e imposta la proprietà OrigineRecord della ControlloPagamentiPromotori.
Dim strSQL
Dim qdf As New QueryDef
' Crea l'istruzione SELECT.
strSQL = "SELECT Promotori.CognomeNomePromotore, PaghePromot.DataRitAcconto, PaghePromot.SPAssegno, PaghePromot.Assegno, PaghePromot.SPBonifico, PaghePromot.Bonifico, PaghePromot.Contanti, Sum(([PagaOraNetta]*[OreLavorate])) AS Totale, PaghePromot.PagamEffettuato "
strSQL = strSQL & "FROM Promotori INNER JOIN (PaghePromot INNER JOIN PaghePromVoci ON PaghePromot.ID_PagheProm = PaghePromVoci.ID_PagheProm) ON Promotori.ID_Promotore = PaghePromot.Promotore "
strSQL = strSQL & "WHERE (((PaghePromot.DataRitAcconto) Between #" & Format(Me!DataInizio, "mm/dd/yyyy") & "#"
strSQL = strSQL & " And #" & Format(Me!DataFine, "mm/dd/yyyy") & "#)) "
strSQL = strSQL & "OR ((Promotori.CognomeNomePromotore) = ('" & Me!ControlloNome & "')) "
strSQL = strSQL & "GROUP BY Promotori.CognomeNomePromotore, PaghePromot.DataRitAcconto, PaghePromot.SPAssegno, PaghePromot.Assegno, PaghePromot.SPBonifico, PaghePromot.Bonifico, PaghePromot.Contanti, PaghePromot.PagamEffettuato;"
' Ora salviamo la query come nuovo oggetto nel db corrente!
' (prima ne eliminiamo l'eventuale istanza precedente!
On Error Resume Next
DoCmd.DeleteObject acQuery, "ControlloPagamentiPromotori"
qdf.Name = "ControlloPagamentiPromotori"
qdf.SQL = strSQL
CurrentDb.QueryDefs.Append qdf
Set qdf = Nothing
' Imposta la proprietà OrigineRecord della SottomascheraMostraVendite.
Me!SottoMPagaPromotori.Form.RecordSource = "ControlloPagamentiPromotori"
Me.Testo51.Requery
' Se i criteri non sono soddisfatti da alcun record, reimposta la proprietà OrigineRecord della sottomaschera,
' visualizza un messaggio e attiva la casella di testo Data di inizio.
If Me!SottoMPagaPromotori.Form.RecordsetClone.RecordCount = 0 Then
Me!SottoMPagaPromotori.Form.RecordSource = "SELECT Promotori.CognomeNomePromotore, PaghePromot.DataRitAcconto FROM Promotori INNER JOIN PaghePromot ON Promotori.ID_Promotore = PaghePromot.Promotore WHERE False;"
MsgBox "Nessun record corrisponde ai criteri immessi.", vbExclamation, "Nessun record trovato"
Me!CognomeNomePromotore.SetFocus
Else
' Attiva i controlli della sezione Corpo.
AttivaControlli Me, acDetail, True
' Sposta il punto di inserimento nella ControlloPagamentiPromotori.
Me!SottoMPagaPromotori!DataInizio.SetFocus
End If
End Sub