Una famiglia di sistemi di gestione per database relazionali di Microsoft progettati per semplificare l'uso.
Funziona! Perfetto!
Vielen Dank!
Flavio
Questo browser non è più supportato.
Esegui l'aggiornamento a Microsoft Edge per sfruttare i vantaggi di funzionalità più recenti, aggiornamenti della sicurezza e supporto tecnico.
Buonasera,
ho la necessità di trovare un record su un recordset e di posizionarmi su quel record.
Ho aperto un recordset che si basa su una query che ha due campi
Sul codice ho la necessità di posizionarmi su un record che ha una data specifica
Dim rs As Recordset
Dim data As Date
' dichiaro la data
data = 01/07/2016
' mi posiziono sul primo record del recordset
rs.MoveLast
rs.MoveFirst
' mi posiziono sul record della data che ho dichiarato
rs.FindFirst ("[vDataRegistra]=" & data)
If rs.NoMatch Then
MsgBox "Record not found."
Else
MsgBox "Record found."
End If
La data che ho dichiarato ovviamente è presente sul recordset ma non mi trova il record.....
Il problema è dato dal fatto che la query su cui si basa il recordset contiene una espressione o che le date siano raggruppate?
Grazie anticipatamente.
Flavio
Una famiglia di sistemi di gestione per database relazionali di Microsoft progettati per semplificare l'uso.
Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.
Funziona! Perfetto!
Vielen Dank!
Flavio
Salve,
Non so le tue regole per l'arrotondamento e neanche come perditaMax è definito e calcolato. Di solito un paragone è più sicuro se tutti e due lati hanno lo stesso tipo di dati e sono arrotondati, cioè:
If fctRound(perdita) = fctRound(perditaMax) Then
Servus
Karl
****************
Access Forever
Access News
Access DevCon
Access-Entwickler-Konferenz AEK
Buonasera!
il problema della data l' ho risolto utilizzando la funzione CLng
Infatti provando a visualizzare la data su un msgbox funziona
Però non ho risolto probabilmente il problema dell' arrotondamento.
Di seguito listo parte del codice.
La variabile perditaMax vale -2612.51
Infatti provando a visualizzare perditaMax su un msgbox dà -2612.51
Ad un certo punto anche la variabile perdita vale -2612.51
Infatti provando a visualizzare perdita su un msgbox dà -2612.51
A quel punto siccome sono uguali dovrebbe aggiornare la variabile dataIni a 19/02/2016 perchè già lo so in quanto mi sono costruito un esempio. Ed invece non entra mai nel ciclo If Then come se le due variabili non fossero mai uguali ma invece lo sono.
' calcolo la data inizio del periodo più negativo
' riporto il focus al primo record del recordset
rs.MoveLast
numRec = rs.RecordCount
rs.MoveFirst
' mi posiziono sul record dell' ultima data del periodo più negativo
rs.FindFirst ("[vDataRegistra]=" & CLng(data))
' cerco la data di inizio del periodo più negativo
For i = 1 To numRec
' verifico se la perdita massima è uguale alla perdita fino a questo punto
perdita = fctRound(perdita) + fctRound(rs![Espr1])
If perdita = perditaMax Then
dataIni = rs![vDataRegistra]
Me.Testo83 = dataIni
Exit Sub
End If
rs.MovePrevious
Next i
Function fctRound(varNr As Variant, Optional varPl As Integer = 2) As Double
'by Konrad Marfurt + ("" by) Luke Chung + Karl Donaubauer
'esce se valore non numerico
If Not IsNumeric(varNr) Then Exit Function
fctRound = Fix("" & varNr \* (10 ^ varPl) + Sgn(varNr) \* 0.5) / (10 ^ varPl)
End Function
Grazie per le risposte.
Salve,
Devi formattare la data nel formato ISO o americano. Vedi https://www.donkarl.com/it?FAQ6.8.
Fai attenzione anche al fatto che Round non arrottonda in modo commerciale: https://www.donkarl.com/it?FAQ2.1
Non vedo un OpenRecordset nel tuo codice. Tuttavia, una nota (di performance): le due righe
rs.MoveLast
rs.MoveFirst
sono necessarie solo se hai precedentemente modificato il puntatore del recordset. Subito dopo un OpenRecordset di DAO, il puntatore è sempre all'inizio.
Servus
Karl
****************
Access Forever
Access News
Access DevCon
Access-Entwickler-Konferenz AEK