Problema con FindFirst

di il
5 risposte

Problema con FindFirst

Buonasera a Voi tutti,
Come evidenziato dal titolo e da allegato, il problema con Findfirst è che, effettivamente, trova il dato su cui apportare una semplice modifica (assegnare un lettera in luogo di un'altra), ma non accade nulla.
Aprendo la relativa tabella, oggetto della ricerca, in effetti il campo Venduto, non ha ricevuto la modifica richiesta.
Qualche suggerimento?
Grazie in anticipo,
Nicola
FindFirst.png
FindFirst.png

5 Risposte

  • Re: Problema con FindFirst

    Non devi inserire una immagine che non si riesce a leggere.

    Metti il testo del codice tra tag CODE nel post
  • Re: Problema con FindFirst

    <Private Sub Elimina_Record_Click()
    Testo53 = ID_Mag_Art_Forn

    Dim Scadenzario_RIba_2021_03_23_10_03_Natale As DAO.Database ' Apertura di un collegamento db
    Dim Magazzino_Articoli_Carico As DAO.Recordset ' Apertura di un collegamento a tabella
    Set Scadenzario_RIba_2021_03_23_10_03_Natale = CurrentDb ' Apre il collegamento sul DBCorrente
    Set Magazzino_Articoli_Carico = Scadenzario_RIba_2021_03_23_10_03_Natale.OpenRecordset("Magazzino_Articoli_Scarico", dbOpenDynaset) ' Apertura tabella/query
    Magazzino_Articoli_Carico.FindFirst "[ID_Mag_Art_Forn ]=" & Testo53 ' Cerca il primo dato con con il campo ID=XYZT"



    Magazzino_Articoli_Carico.FindFirst "[ID_Mag_Art_Forn] =" & Me.Testo53


    If Magazzino_Articoli_Carico.NoMatch Then
    MsgBox "Record not found."
    GoTo Chiusura
    Else
    Do While Not Magazzino_Articoli_Carico.NoMatch
    MsgBox "Customer name: " & Magazzino_Articoli_Carico!ID_Mag_Art_Forn
    Magazzino_Articoli_Carico.FindNext "[ID_Mag_Art_Forn]=" & Me.Testo53
    Loop

    'Search for the next matching record
    Magazzino_Articoli_Carico.FindNext "[ID_Mag_Art_Forn]= " & Me.Testo53
    End If

    Magazzino_Articoli_Carico.Edit ' Abilita la modifica del record"
    Magazzino_Articoli_Carico.Fields("Venduto") = "G" ' Imposta il nuovo valore del campo

    Me.RecordsetClone.FindFirst [ID_Mag_Art_Forn] = " & Me.Testo53"
    Me.Bookmark = Me.RecordsetClone.Bookmark
    DoCmd.RunCommand acCmdSaveRecord

    Chiusura:
    Magazzino_Articoli_Carico.Close ' Chiusura Tabella
    Scadenzario_RIba_2021_03_23_10_03_Natale.Close ' Chiusura DB
    End Sub
    >
  • Re: Problema con FindFirst

    Credo che dimentichi, dopo l'assegnazione, il comando Update così
    Magazzino_Articoli_Carico.Update
    N.B.: Per far apparire il tuo codice con i caratteri monotype come l'ho scritto io devi:
    1. Cliccare in basso dove c'è il tasto "Editor completo & Anteprima"
    2. Vedrai in alto molti altri comandi, quindi seleziona tutto il codice e poi clicca sul tasto in alto </> (codice). Volendo puoi ancora modificare il tuo messaggio cliccando sull'icona con la matita (Modifica messaggio) in alto a destra
  • Re: Problema con FindFirst

    Se non lo racchiudi tra i TAG CODE non lo si legge...!!!
    Lo hai scritto tu quel codice...?
    Ci sono moltissime cose che non vanno...!

    La routine si chiama EliminaRecord ma non li elimina... dovrebbe solo modificarli... non è un buon inizio.

    Il primo FindFirst risulta doppio... perché...?
    Se il criterio fosse veramente ID=XYZT, dubito con estrema certezza possa funzionare... la sintassi non è corretta...
    Dopo il Loop, che si interrompe in caso di NoMatch perché continui a cercare...?
    Nel loop non apri la fase di Edit ma la apri dopo quando di certo non trovi nulla... e poi serve l'Update.
    Ecc... ecc...

    A prescindere da tutto vorrei suggerirti di cancellare tutto quel codice, primo perché contiene troppi errori, ma soprattutto perché ottieni un risultato migliore con sole 2 righe di codice.
    Una Query Actjon di tipo Update.
    Se poi vuoi sapere quanti records hai modificato vai a leggere la proprietà recordsaffected.

    P.s. perché hai dichiarato variabili con nomi così contorti... che rendono illeggibile il codice
  • Re: Problema con FindFirst

    Buongiorno,
    Mi corre l'obbligo di chiedere scusa a quanti hanno visionato/risposto alla precedente mia, poiché non sono stato stato esplicito.
    Trattasi de gestione ricambi per auto. Software ad uso non fiscale.
    Maschera Magazzino_Articoli_Clienti e Sottomaschera Magazzino_Articoli_Scarico Sottomaschera.
    Inserendo, nella maschera, il nome di un cliente, N° Doc , Data Doc e Tipo Doc., si passa alla

    Sottomaschera
    Cliccando sulla sull'icona di ricerca si apre una videata, non in popup e sincrona, che evidenzia solo le righe di merce (con UM, Qta, Prezzo di Acq, quest'ultimo, ovviamente sarà variato in fase di chiusura del documento stesso) di quel cliente (specificando con una lettera se G(iacente) oppure V(enduto). Cliccando sull'icona Invia, l'intera riga è scritta, oppure più righe, sul documento di uscita, riportando anche da chi è il fornitore di detta merce.
    Ovviamente, nella videata di selezione righe di merce, è attiva la ricerca, per contenuto, per Codice e Descrizione.
    Se, per errore avesse cliccato su un rigo che attualmente non è stato installato, basterà cliccare su quello stesso rigo, della videata di selezione merce acquistata, e sarà ripristinato il valore G(iacenza) e cancellato il rigo dal documento di uscita.
    Fin qui il software risponde bene, almeno fino ad ora.

    Nuova soluzione:
    Vorrei che, in caso di errore, senza rientrare nella videata di selezione merce acquistata, cliccando sull'icona cancella, fosse cancellato il rigo in questione e ripristinato lo stato G(iacenza), ecco il perché della lettera G nel codice findfirst.
    Il Problema è che la lettera G deve essere riportata in un'altra tabella avente nome Magazzino_Articoli_Carico ad un preciso ID.
    Spero di essere stato più esaustivo che non in preceddenza.
    Grazie a Voli tutti,
    Nicola





    Private Sub Aggiorna_Record_Click()
    Testo53 = ID_Mag_Art_Forn
    
    Dim Scadenzario_RIba_2021_03_23_10_03_Natale As DAO.Database '                       Apertura di un collegamento db
    Dim Magazzino_Articoli_Carico As DAO.Recordset '                                     Apertura di un collegamento a tabella
    Set Scadenzario_RIba_2021_03_23_10_03_Natale = CurrentDb '                           Apre il collegamento sul DBCorrente
    Set Magazzino_Articoli_Carico = Scadenzario_RIba_2021_03_23_10_03_Natale.OpenRecordset("Magazzino_Articoli_Carico", dbOpenDynaset) ' Apertura tabella/query
    Magazzino_Articoli_Carico.FindFirst "[ID_Mag_Art_Forn ]=" & Testo53 '                Cerca il primo dato con con il campo ID=MiaVariabile
        
        
    Magazzino_Articoli_Carico.FindFirst "[ID_Mag_Art_Forn] =" & Me.Testo53
            
            If Magazzino_Articoli_Carico.NoMatch Then '                                   Controllo
                MsgBox "Record not found."
                GoTo Chiusura
            Else
                Do While Not Magazzino_Articoli_Carico.NoMatch
                    MsgBox "Customer name: " & Magazzino_Articoli_Carico!ID_Mag_Art_Forn
                    Magazzino_Articoli_Carico.FindNext "[ID_Mag_Art_Forn]=" & Me.Testo53
                    Magazzino_Articoli_Carico.Edit '                                     Abilita la modifica del record
                Loop
                    
            End If
            
    Magazzino_Articoli_Carico.Fields("Venduto") = "G" '                                  Imposta valore del campo
    Magazzino_Articoli_Carico.Update '                                                   Aggiorna valore del campo
    DoCmd.RunCommand acCmdSaveRecord '                                                   Aggiorna record
    
    Chiusura:
    Magazzino_Articoli_Carico.Close '                                                    Chiusura Tabella
    Scadenzario_RIba_2021_03_23_10_03_Natale.Close '                                     Chiusura DB
    End Sub
    
Devi accedere o registrarti per scrivere nel forum
5 risposte