AGGIORNAMENTO VALORE CONTROLLO

di il
13 risposte

AGGIORNAMENTO VALORE CONTROLLO

Salve a tutti,
in una maschera ho messo il seguente evento:
Private Sub Form_Load()
If [Testo33] = 0 Then
[DATA_saldo] = DMax("[competenza]", "[tbl_mov]", "[id_sottoconto] = " & [id_cantiereriep])
DoCmd.Requery
End If
End Sub
In poche parole, al caricamento se il valore di una casella (testo33) è = zero
riempie la casella Data_saldo con il valore massimo (è una data) presa da un'altra tabella (tbl_mov) con il criterio che vedete sopra.
Il problema è che qualche volta funziona altre volte no
Secondo voi perchè?
Mi spiego meglio su quello che è il mio obiettivo, all caricamento della maschera vorrei che mi controllasse la casella di testo 33 per tutti i record e riempisse DATA_saldo con il valore Dmax.
Mi date una mano?
grazie
Marco

13 Risposte

  • Re: AGGIORNAMENTO VALORE CONTROLLO

    Se interpreto "bene" quel codice...in pratica lo esegue una volta sola, probabilmente sul solo primo record. Ma a te serve scorrere tutti i record. Devi scorrere tutti i record...temo ti serve usare il metodo DAO.Recordset e un Do...Loop.
  • Re: AGGIORNAMENTO VALORE CONTROLLO

    Si, mi potresti postare un link da studiare per fare un Do...loop o DAO (quello più semplice !!!)
    spippolando ho notato una cosa strana (strana per la mia ignoranza)
    Se modifico il codice, ad esempio ho messo me.testo33 al posto di [testo33], quando ripasso alla visualizzazione per una volta e solo per una volta, funziona.
    Se seleziono altro record torna a non funzionare.

    Comunque hai ragione il loop è la soluzione

    Grazie ancora
  • Re: AGGIORNAMENTO VALORE CONTROLLO

    Direi che questo può servirti
    http://forum.masterdrive.it/access-79/access-leggere-scrivere-dati-nelle-tabelle-tramite-vba-dao-13176/
  • Re: AGGIORNAMENTO VALORE CONTROLLO

    Buongiorno,

    ho partorito quantoe segue:
    Private Sub Form_Load()
    Dim pippo As DAO.Recordset
    Dim pluto As DAO.Recordset
    Dim sommo As DAO.Database
    Set sommo = CurrentDb
    Set pippo = sommo.OpenRecordset("tbl_riep", dbOpenTable)
    Set pluto = sommo.OpenRecordset("q_riep_resoconti", dbOpenDynaset)
    Do Until pippo.EOF
    If pluto!daaveren = 0 Then
    pippo.Edit
    pippo!DATA_saldo = DMax("[competenza]", "[tbl_mov]", "[id_sottoconto] = " & [id_cantiereriep])
    pippo.Update
    End If
    pippo.MoveNext
    Loop
    pippo.Close
    pluto.Close
    Set pluto = Nothing
    Set pippo = Nothing
    End Sub
    sembra funzionare ma manca un passaggio importante
    quando vado a dire che pippo!data_saldo deve essere uguale all'ultima data inserita nella tbl_mov con il criterio della relazione [id_sottoconto] = " & [id_cantiereriep] non funziona, mette la data più vecchia della tbl_mov e basta.
    mi potete aiutare?
    al posto di Dmax cosa devo mettere?
    grazie
  • Re: AGGIORNAMENTO VALORE CONTROLLO

    DMAX va bene... ma tu hai omesso che non hai u criterio semplice... il massimo... ma è relativo al criterio di cui parlavi... quindi utilizza Dmax n modo corretto inserendo il criterio aadeguatamente.
  • Re: AGGIORNAMENTO VALORE CONTROLLO

    Grazie Alex,
    nella prima versione (vedi inizio 3d) il Dmax funzionava, non facevo il loop ma funzionava una volta sola. Cosa intendi per usare criterio in modo corretto.
    id_sottoconto e id_cantiereriep sono in relazione uno a molti.
    Quindi, in tbl_mov ho vari record con id_sottoconto e mi deve prendere l'ultimo quando id_sottoconto =id_cantiereriep
    tra l'altro anche daaveren di pluto usa id_cantiereriep
    quindi tutto il loop gira su id_sottoconto=id_cantiereriep
    Lo so che non mi darai la soluzione ma dammi uno spunto o qualcosa da leggere.
  • Re: AGGIORNAMENTO VALORE CONTROLLO

    Ciao,

    il mio metodo di risoluzione dei problemi prevede:
    1- ricerca su internet del problema (soprattutto forum)
    2- scopiazzamento folle
    3- spippolamento e modifica sulla base di quello che ho letto
    4- ricorso al vostro sito se non ne vengo fuori !!!

    non mi chiedete come ho fatto ma ora funziona, allego codice:
    Dim pippo As DAO.Recordset
    Dim pluto As DAO.Recordset
    Dim paperino As DAO.Recordset
    Dim sommo As DAO.Database
    Set sommo = CurrentDb
    Set pippo = sommo.OpenRecordset("tbl_riep", dbOpenTable)
    Set pluto = sommo.OpenRecordset("q_riep_resoconti", dbOpenDynaset)
    Do Until pippo.EOF
    If pippo!PATTUITO - DSum("[netto_avere]", "[tbl_mov]", "[id_sottoconto] = " & pippo!id_cantiereriep) = 0 And pippo!PATTUITO > 0 Then
    pippo.Edit
    pippo!DATA_saldo = DMax("[competenza]", "[tbl_mov]", "[id_sottoconto] = " & pippo!id_cantiereriep)
    pippo.Update
    End If
    pippo.MoveNext
    Loop
    pippo.Close
    pluto.Close
    Set pluto = Nothing
    Set pippo = Nothing
    End Sub
    
    Un'ultima domanda, ma secondo voi quanto ho scritto è un'offesa a chi sa programmare o è passabile?

    Grazie e alla prossima
  • Re: AGGIORNAMENTO VALORE CONTROLLO

    MARCO70 ha scritto:


    il mio metodo di risoluzione dei problemi prevede:
    1- ricerca su internet del problema (soprattutto forum)
    2- scopiazzamento folle
    3- spippolamento e modifica sulla base di quello che ho letto
    4- ricorso al vostro sito se non ne vengo fuori !!!
    Per me va benissimo. Secondo me (zitto zitto) fanno tutti così...non c'è nulla di male.

    MARCO70 ha scritto:


    Un'ultima domanda, ma secondo voi quanto ho scritto è un'offesa a chi sa programmare o è passabile?
    Per me è passabile. A mio parere hai pienamente rispettato/colto il senso del link che ti ho suggerito. Forse invece di scrivere tutto quel "doppio rigo"
    If pippo!PATTUITO - DSum("[netto_avere]", "[tbl_mov]", "[id_sottoconto] = " & pippo!id_cantiereriep) = 0 And pippo!PATTUITO > 0 Then
    un passaggio dentro una variabile sarebbe stato più comodo.
  • Re: AGGIORNAMENTO VALORE CONTROLLO

    Si è vero, ci metto una variabile
    grazie
  • Re: AGGIORNAMENTO VALORE CONTROLLO

    OsvaldoLaviosa ha scritto:


    Per me va benissimo. Secondo me (zitto zitto) fanno tutti così...non c'è nulla di male.
    Ci rifletterei bene prima di dare queste certezze..., meglio una riflessione in più che una affermazione superficiale...

    MARCO70 ha scritto:


    Un'ultima domanda, ma secondo voi quanto ho scritto è un'offesa a chi sa programmare o è passabile?
    Si questo codice è scritto malissimo, inutile e decisamente poco funzionale...!
    Bastavano credo 3 righe in tutto per fare quello che hai fatto...
    Hai aperto 2 RS, ma PLUTO a cosa serve....?
    Apri un RS PIPPO, popolato, poi usi una DSUM per ricavare il valore della Tabella che già è aperta in PIPPO....?
    Poi come se non bastasse rifai una cosa simile, per un UPDATE...?

    Beh, se ci rifletti bene, forse potresti accorgerti che con una Query UPDATE senza nemmeno l'uso di un Recordset fai tutto.
    3 Righe di codice.
  • Re: AGGIORNAMENTO VALORE CONTROLLO

    @Alex ha scritto:


    con una Query UPDATE senza nemmeno l'uso di un Recordset fai tutto.
    Query di aggiornamento. Giusto.

    Scusa MARCO70, ci siamo fatti prendere la mano da tutt'altra logica...
  • Re: AGGIORNAMENTO VALORE CONTROLLO

    OsvaldoLaviosa ha scritto:


    Per me va benissimo. Secondo me (zitto zitto) fanno tutti così...non c'è nulla di male.
    Ecco il motivo per cui:

    Perché non ci sono più tanti programmatori?
    https://www.gardainformatica.it/blog/sviluppo-software/perche-non-ci-tanti-programmatori

  • Re: AGGIORNAMENTO VALORE CONTROLLO

    OsvaldoLaviosa ha scritto:


    MARCO70 ha scritto:


    il mio metodo di risoluzione dei problemi prevede:
    1- ricerca su internet del problema (soprattutto forum)
    2- scopiazzamento folle
    3- spippolamento e modifica sulla base di quello che ho letto
    4- ricorso al vostro sito se non ne vengo fuori !!!
    Per me va benissimo. Secondo me (zitto zitto) fanno tutti così...non c'è nulla di male.
    Beh ... ottimo modo per non capire mai nulla di programmazione ... complimenti a tutti e due ...
Devi accedere o registrarti per scrivere nel forum
13 risposte