Visualizzazione dei risultati da 1 a 10 su 10

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2017
    Messaggi
    4
    Ciao .
    Mi sembra la tua una risposta tanto per perdere o prendere tempo .
    Nessun errore il codice o meglio, il codice non mi aiuta a fare quello che voglio .
    Facendo il debug non mi dice niente , e un problema di procedura che non fa il suo dovere.
    Questo e il codice che uso attualmente , ma ad ogni clic mi aggiunge sempre il valore della somma .
    La somma e giusta ma se si fa fare nuovamente la procedura viene nuovamente calcolato tutto e aggiunto a TTGiacenzaMangimeQtascarico.Value .

    codice:
    procedure Tdett_form.calcolaGiacenza;
    var
    old_val : extended;
    begin
    
    old_val := datamod.TTGiacenzaMangimeQtascarico.Value; // questo campo deve ricevere i dati
    //through some dataset...
    DataMod.DettaglioP.First;
    while not DataMod.DettaglioP.eof do
    begin
      old_val := old_val + DataMod.DettaglioPKgMangimeSCARICO.Value; // questo campo raccoglie i // dati della tabella giornalieraMangimescarico
      DataMod.DettaglioP.Next;
    end;
    datamod.TTGiacenzaMangime.Edit;
    datamod.TTGiacenzaMangimeQtascarico.AsFloat:=old_val; 
    datamod.TTGiacenzaMangime.Post;
    end;
    Spero che hai capito adesso
    By Simo

    Quote Originariamente inviata da alka Visualizza il messaggio
    Io devo dire che faccio un po' di fatica a comprendere il ruolo delle tabelle, pi� che altro perch� Table1 � un nome poco significativo.

    Una domanda: hai provato a eseguire il primo codice che hai postato facendo il debug passo per passo e andando a vedere il valore delle variabili?

    Secondo me, � l'unico modo per poter capire qual � lo stato dell'applicazione in quel momento e capire da dove proviene il valore errato.
    Ultima modifica di uisum; 26-10-2017 a 12:24

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,485
    Quote Originariamente inviata da uisum Visualizza il messaggio
    Ciao .
    Mi sembra la tua una risposta tanto per perdere o prendere tempo .
    Innanzitutto, se non volevo perdere tempo, evitavo di 1) leggerti di nuovo, 2) cercare di capirti, 3) porti le stesse domande che ti sono già state rivolte per chiarire.

    Sul "prendere tempo" invece sorvolo, in quanto non mi serve assolutamente: non sei un mio cliente e non sono tenuto a darti alcun servizio garantito, se permetti, e qualora ti si dia una mano, sei tu a doverti sforzare di fornire tutte le info necessarie visto che - fino a prova contraria - il problema è tuo, non mio.

    Quote Originariamente inviata da uisum Visualizza il messaggio
    Nessun errore il codice o meglio, il codice non mi aiuta a fare quello che voglio .
    Se il codice non fa quello che vuoi, evidentemente un errore c'è, altrimenti il programma funzionerebbe.
    Questo è forse l'unico punto fermo che si può dare per assodato.

    Quote Originariamente inviata da uisum Visualizza il messaggio
    Facendo il debug non mi dice niente , e un problema di procedura che non fa il suo dovere.
    No, perché il risultato non è casuale: da qualche parte c'è senz'altro un passaggio in cui viene memorizzato un valore diverso da quello atteso, ma è analizzando il programma durante l'esecuzione che consente di vedere in ogni momento cosa si sta assegnando e come cambiano i valori all'interno dell'applicazione.

    Il debug non è pensato per risolverti autonomamente il problema, ma per consentirti di verificare quello che succede.

    Quote Originariamente inviata da uisum Visualizza il messaggio
    Questo e il codice che uso attualmente , ma ad ogni clic mi aggiunge sempre il valore della somma.
    Il tuo codice prende il valore di un campo, a esso somma un altro valore e infine lo salva.
    E' ovvio che se riesegui la procedura il valore viene sommato all'ultimo salvato e così via, incrementandolo sempre.

    Quote Originariamente inviata da uisum Visualizza il messaggio
    La somma e giusta ma se si fa fare nuovamente la procedura viene nuovamente calcolato tutto e aggiunto a TTGiacenzaMangimeQtascarico.Value .
    Ma questo è esattamente ciò che hai scritto nel codice! Se incrementi un valore che usi come partenza e poi lo vai a salvare, quando ripeti l'operazione partirai dalla quantità che è stata incrementata precedentemente, perché quello è il valore che hai determinato e salvato, ed è quello il valore da cui riparti, e non può essere diverso, a meno che tu non conservi altrove il valore di base (es. in un campo diverso). Devi separare il valore incrementato da quello di partenza, e aggiornare il primo partendo dal secondo, oppure resettare il campo che hai incrementato al valore base di partenza prima di eseguire la somma. Se sommi e salvi, recuperi, sommi e salvi, recuperi, alla fine avrai un valore che si incrementa sempre all'infinito.


    Quote Originariamente inviata da uisum Visualizza il messaggio
    codice:
    procedure Tdett_form.calcolaGiacenza;
    var
    old_val : extended;
    begin
    
    old_val := datamod.TTGiacenzaMangimeQtascarico.Value; // questo campo deve ricevere i dati
    //through some dataset...
    DataMod.DettaglioP.First;
    while not DataMod.DettaglioP.eof do
    begin
      old_val := old_val + DataMod.DettaglioPKgMangimeSCARICO.Value; // questo campo raccoglie i // dati della tabella giornalieraMangimescarico
      DataMod.DettaglioP.Next;
    end;
    datamod.TTGiacenzaMangime.Edit;
    datamod.TTGiacenzaMangimeQtascarico.AsFloat:=old_val; 
    datamod.TTGiacenzaMangime.Post;
    end;
    Spero che hai capito adesso
    By Simo
    Sì, io ho capito.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2017
    Messaggi
    4
    Ok grazie .
    Quindi da
    old_val := datamod.TTGiacenzaMangimeQtascarico.Value;
    Passerei a :
    old_val := 0;

    Poi mi creo :
    val_giac:=datamod.TTGiacenzaMangimeQtascarico.Valu e ;
    Questo mantiene il vecchio dato , ma dove lo metto e come lo uso ?



    Quote Originariamente inviata da alka Visualizza il messaggio
    Innanzitutto, se non volevo perdere tempo, evitavo di 1) leggerti di nuovo, 2) cercare di capirti, 3) porti le stesse domande che ti sono già state rivolte per chiarire.

    Sul "prendere tempo" invece sorvolo, in quanto non mi serve assolutamente: non sei un mio cliente e non sono tenuto a darti alcun servizio garantito, se permetti, e qualora ti si dia una mano, sei tu a doverti sforzare di fornire tutte le info necessarie visto che - fino a prova contraria - il problema è tuo, non mio.


    Se il codice non fa quello che vuoi, evidentemente un errore c'è, altrimenti il programma funzionerebbe.
    Questo è forse l'unico punto fermo che si può dare per assodato.


    No, perché il risultato non è casuale: da qualche parte c'è senz'altro un passaggio in cui viene memorizzato un valore diverso da quello atteso, ma è analizzando il programma durante l'esecuzione che consente di vedere in ogni momento cosa si sta assegnando e come cambiano i valori all'interno dell'applicazione.

    Il debug non è pensato per risolverti autonomamente il problema, ma per consentirti di verificare quello che succede.


    Il tuo codice prende il valore di un campo, a esso somma un altro valore e infine lo salva.
    E' ovvio che se riesegui la procedura il valore viene sommato all'ultimo salvato e così via, incrementandolo sempre.


    Ma questo è esattamente ciò che hai scritto nel codice! Se incrementi un valore che usi come partenza e poi lo vai a salvare, quando ripeti l'operazione partirai dalla quantità che è stata incrementata precedentemente, perché quello è il valore che hai determinato e salvato, ed è quello il valore da cui riparti, e non può essere diverso, a meno che tu non conservi altrove il valore di base (es. in un campo diverso). Devi separare il valore incrementato da quello di partenza, e aggiornare il primo partendo dal secondo, oppure resettare il campo che hai incrementato al valore base di partenza prima di eseguire la somma. Se sommi e salvi, recuperi, sommi e salvi, recuperi, alla fine avrai un valore che si incrementa sempre all'infinito.




    Sì, io ho capito.

    Ciao!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.