Philcattivocarattere ha scritto:
Nella query poi aggiungi un campoDatasuccessiva: TrovaDataSuccessiva("navdate",[navdate])
Ora bisogna fargli capire fino a quale data eseguire la selezione e passargli quel parametro in modo che sia accessibile anche dalla funzione, perché per ora e per verificare che funzionasse mi sono limitato ad assegnargli manualmente un valore nella funzione, ma così non può andare. Il lavoro continua
Ho rinunciato ad inserire la funzione direttamente nella query: non ne uscivo più con quel parametro che spuntava da tutte le parti. Questa è la cosa che per ora si avvicina ad un uso quasi normale.
Query QryNav_param =
SELECT Nav.NaVamount, Nav.navdate, Nav.VFSEvaluation
FROM Nav
WHERE (((Nav.navdate)<[DataValutazione:]) AND ((Nav.VFSEvaluation)=Yes))
ORDER BY Nav.navdate;
Funzione =
Function TrovaDataSuccessiva(strnomecampo As String, Campo)
Dim rs As DAO.Recordset
Dim qrydef As QueryDef
Dim DataFine As Date
On Error GoTo Err_TrovaDataSuccessiva
Set rs = CodeContextObject.RecordsetClone
rs.FindFirst "[" & strnomecampo & "] = #" & Format(Campo, "mm/dd/yyyy") & "#"
rs.MoveNext
If Not rs.EOF Then
DataFine = rs(strnomecampo).Value
Else
DataFine = [Forms]![maschera1]![Testo2]
End If
Set rs = Nothing
Esci_TrovaDataSuccessiva:
' Restituisci il risultato.
TrovaDataSuccessiva = Format(DataFine, "dd/mm/yyyy")
Exit Function
Err_TrovaDataSuccessiva:
...
End Function
Una maschera1 dove ci sono due caselle di testo: una dove inserire la data [testo2] e una per il tasso [PercTasso] (sai mai che invece dell' 1% si voglia fare qualcos'altro) e un pulsante di comando con associato questo codice
Private Sub Comando1_Click()
Dim qdf As DAO.QueryDef
Dim rs As DAO.Recordset
Set qdf = CurrentDb.QueryDefs("Qrynav_param")
qdf.Parameters(0).Value = Me.Testo2.Value
Set rs = qdf.OpenRecordset
If rs.EOF And rs.BOF Then
MsgBox "Nessun Movimento soddisfa il criterio"
Exit Sub
Else
DoCmd.OpenForm "frmQry_param"
Set Forms!frmQry_param.Recordset = rs
End If
End Sub
Maschera continua frmQry_param inizialmente creata con la procedura guidata, sulla query QryNav_param, per avere automaticamente i campi della query, poi però ho eliminato l'origine dati, per gestirla dalla maschera1 che ne chiama l'apertura. Impostate a No le proprietà di aggiunta, modifica, cancellazione (deve solo visualizzare). Nella maschera continua ho aggiunto una casella di testo la cui origine richiama la funzione TrovaDataSuccessiva
=TrovaDataSuccessiva('navdate';[navdate])
, una casella di testo che calcola i giorni
=DateDiff("g";[navdate];[Datasuccessiva])
ed infine una casella di testo che calcola "gli interessi" (ma solo perché la formula è quella degli interessi semplici C x i x t).
=[NaVamount]*[CasellaGiorni]*Maschere!Maschera1!PercTasso/365
Si apre la maschera1, si inseriscono la data di selezione e il "tasso". Il pulsante di comando apre frmQry_param... e magia. Totali a pié di maschera ecc: spazio alla creatività.
Allegati: