Posizionarsi su un record

Anonimo
2024-06-16T19:18:01+00:00

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

  1. vDataRegistra (origine da un' altra query QTabRegistrazioni) con formula RAGGRUPPAMENTO. Praticamente mi raggruppa tutti i record che hanno la stessa data
  2. Espr1: Somma(Round([vGuadagnoPip]-[vPerditaPip];2)) Praticamente mi dà il risultato economico di una giornata

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

Microsoft 365 e Office | Access | Per la casa | Windows

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.

0 commenti Nessun commento

4 risposte

Ordina per: Più utili
  1. Anonimo
    2024-06-19T17:00:20+00:00

    Funziona! Perfetto!

    Vielen Dank!

    Flavio

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2024-06-19T08:24:24+00:00

    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

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2024-06-17T20:40:52+00:00

    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

    End Sub

    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.

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2024-06-17T08:36:25+00:00

    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

    La risposta è stata utile?

    0 commenti Nessun commento