Ciao ho un problema con una maschera e una sottomaschera basata su query parametrica
In pratica la sottomaschera basata sulla query dovrebbe mostrare i record in base all' inserimento di uno o due criteri (intervallo date o cognome e nome)
In realtà il tutto funzionava solo impostando l' intervallo date,una volta aggiunto come criterio il cognome e il nome il risultato è stato la moifica dei criteri della query (cancellati) oppure la cancellazione dell' intera query
Questa è la query:
e questo è il codice che ho messo nella maschera principalecodice: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 Forms!MostraPagaPromotori!DataInizio And Forms!MostraPagaPromotori!DataFine)) Or (((Promotori.CognomeNomePromotore)=Forms!MostraPagaPromotori!ControlloNome)) GROUP BY Promotori.CognomeNomePromotore, PaghePromot.DataRitAcconto, PaghePromot.SPAssegno, PaghePromot.Assegno, PaghePromot.SPBonifico, PaghePromot.Bonifico, PaghePromot.Contanti, PaghePromot.PagamEffettuato;
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) = ([Forms]![MostraPagaPromotori]![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 CognomeNomePromotore FROM Promotori WHERE False;" MsgBox "Nessun record corrisponde ai criteri immessi.", vbExclamation, "Nessun record trovato" Me!DataInizio.SetFocus Else ' Attiva i controlli della sezione Corpo. AttivaControlli Me, acDetail, True ' Sposta il punto di inserimento nella ControlloPagamentiPromotori. Me!SottoMPagaPromotori!CognomeNomePromotore.SetFocus End If End Sub

Rispondi quotando