Riportare un dato in un nuovo record.

di il
28 risposte

Riportare un dato in un nuovo record.

Un saluto a tutti Voi che aiutate e vi prodigate tanto per i non esperti.
Volevo sapere se era possibile far riportare un dato in un nuovo record, cerco di spiegarmi meglio.
Nel record che compilo alla fine c'è il campo differenza, questa differenza vorrei che vada a compilare il campo riporto differenza del record successivo in modo che sommato alla nuova defferenza verrà a crearsi un valore positivo o negativo.
Se è possibile mi potete spiegare come fare?

Vi ringrazio anticipatamente e buon lavoro.

28 Risposte

  • Re: Riportare un dato in un nuovo record.

    Una cosa del genere?
    tabella.jpg
    tabella.jpg

    se così non fosse fai un esempio...

    saluti
  • Re: Riportare un dato in un nuovo record.

    Ciao Angelo, esatto giusto quello che voglio io.
    Ti chiedo una cosa, l'ultimo dato 1 è giusto, questo dato in automatico si può inserire nel campo del record successivo da me chiamato riporto differenza in modo che compilando tutti gli altri campi con la differenza che si viene a creare va a sommarsi con quel riporto che poi sarà in + o in -.

    Spero di essere stato schiaro.
  • Re: Riportare un dato in un nuovo record.

    Mi dici i nomi esatti dei campi che utilizzi nella query.. tutti i dati specificando qual'è il campo che vuoi sia calcolato automaticamente e magari anche quale formula vuoi utilizzare...

    la query è basata su una sola tabella?
  • Re: Riportare un dato in un nuovo record.

    Allora, la tabella che hai illustrato va benissimo, io ho una sola tabella senza query, solo che con i dati che ho i calcoli li vengono effetuati in caselle di testo nella maschera, forse sbaglio ma così ho pensato di fare.
    Ora non so se è fattibile quello che chiedo, purtroppo cerco di smanettare per quel poco che so.
  • Re: Riportare un dato in un nuovo record.

    Mi pare che sia sconsigliato salvare dei dati calcolati ...
    una volta che hai dei dati .. i calcoli li puoi sempre fare come dove e quando vuoi....
    e poi se per caso modifichi i dati esistenti quando riesegui i calcoli sono aggiornati di conseguenza ..
  • Re: Riportare un dato in un nuovo record.

    Allora quello che chiedi, per quanto possa sembrare banale in realtà non lo è.. ti guidero passo passo alla realizzazione:

    Struttura Database: 4 elementi
    struttura.jpg
    struttura.jpg

    Struttura Tabella: tbl_mate
    tabella.jpg
    tabella.jpg

    StrutturaSQL Query: qry_mate
    SELECT tbl_mate.ID, tbl_mate.Num1, tbl_mate.Num2, Nz(Nz(CLng([Num1]))-Nz(CLng([Num2]))) AS Diff, valore([ID]) AS DiffPar
    FROM tbl_mate;
    
    Struttura Maschera: frm_mate (basata su qry_mate ("più elementi")
    maschera.jpg
    maschera.jpg

    Struttura Modulo: bus_mate
    Public Function valore(Record As Long) As Long
        On Error Resume Next
        Dim db As DAO.Database
        Dim rs As DAO.Recordset
        Dim qdf As DAO.QueryDef
        
        Set db = CurrentDb
        Set qdf = db.CreateQueryDef("", "SELECT Sum(qry_mate.Diff) AS ParDiff FROM qry_mate WHERE (((qry_mate.ID)<=" & CStr(Record) & "));")
        Set rs = qdf.OpenRecordset
        
        If rs.EOF = rs.BOF Then valore = rs.Fields("ParDiff")
        
        rs.Close
        qdf.Close
        db.Close
        
        Set rs = Nothing
        Set db = Nothing
        Set qdf = Nothing
    End Function
    Codice da inserire nella maschera:
    Option Compare Database
    
    Private Sub Form_Load()
    Me.Requery
    End Sub
    
    Private Sub Num1_AfterUpdate()
    Dim rec As Long
    rec = Me.CurrentRecord
    Me.Requery
    Num1.SetFocus
    DoCmd.GoToRecord acDataForm, "frm_mate", acGoTo, rec
    End Sub
    
    Private Sub Num2_AfterUpdate()
    Dim rec As Long
    rec = Me.CurrentRecord
    Me.Requery
    Num2.SetFocus
    DoCmd.GoToRecord acDataForm, "frm_mate", acGoTo, rec
    End Sub
    
    buon lavoro
  • Re: Riportare un dato in un nuovo record.

    Grazie ad Angelo e Giammi77 per avermi dato i suggerimenti, proverò a mettere in pratica l'esempio di Angelo, comunque Angelo se mi spieghi come allegare l'esempio che io ho in Excell
    magari sarà più charo, scusami se non ho potuto farlo prima.
  • Re: Riportare un dato in un nuovo record.

    Intendi allegare nel post in questo forum?

    1. Apri il foglio di Excel che devi postare.
    2. Premi la combinazione dei tasti sulla tua tastiera: Alt + Stamp
    3. Apri Paint
    4. Riduci lo spazio bianco di paint ad un piccolo quadratino (1 cm * 1 cm) è ridimensionabile...
    5. Premi : CTRL + V
    6. Nella barra dei menu, sopra la scritta seleziona, c'è il pulsante "Ritaglia" (rettangolo tratteggiato)
    7. Seleziona la parte dell'immagine che vuoi postare (più è piccola e meglio è)
    8. Premi : CTRL + X
    9. Vai sul menu file e scegli "Nuovo" ... non salvare
    10. CTRL + V
    11. Salva con nome il file formato Jpg
    12. Nel forum quando rispondi in basso c'è una scheda "invia allegato" ...selezionala
    13. Premi sfoglia e seleziona il file immagine (se le dimensioni non vanno bene... devi ripetere tutto di nuovo)
    14. Premi Aggiungi file
    15. Clicca nel corpo del messaggio nel punto in cui vuoi fa apparire l'immagine.
    16. Premi "inserisci in linea con il testo"
  • Re: Riportare un dato in un nuovo record.

    Grazie per la delucidazione. Spero che ho fatto bene perchè non so se è giusto che io non veda l'immagine allegata.
    In anteprima è tutto a posto.

    Nella riga sotto l'immagine ho messo le formule delle celle calcolate.
    Speriamo che non chiedo l'impossibile.
    Saluti
  • Re: Riportare un dato in un nuovo record.

    Ciao

    1° Fase

    Comincia con il creare una tabella con questi campi:
    nome: tbl_mate
    ID -> num automatica
    Data -> formato giorno (formato data in cifre)
    Quantita -> valuta (Euro; decimali automatici)
    Costo -> valuta (Euro; decimali 3)
    Caricati: numerico (intero lungo)

    ps:
    questi quattro campi corrispondono in ordine sequenziale alle colonne non calcolate del prospetto excel che hai postato.

    nb:
    se non usi gli stessi nomi poi provvederai tu alle sostituzioni nelle query e nel codice...

    2° Fase
    Crea una query chiamata "qry_mate" e nella visualizzazione SQL
    SELECT tbl_mate.ID, tbl_mate.Data, tbl_mate.Quantita, tbl_mate.Costo, CDbl(Mid(CStr(([Quantita]/[Costo])/1000),1,8)) AS Gasolio, tbl_mate.Caricati, Nz([Costo])*Nz([Caricati]*1000) AS Totale, Nz(Nz([Quantita])-Nz([Totale]))/1000 AS Diff, valore(CLng([ID])) AS DiffPar, Year([data]) AS anno
    FROM tbl_mate
    WHERE (((Year([data]))=2013));


    non modificare il 2013 e non preoccuparti se ti da errore per ora

    3* fase
    nome:frm_mate
    Crea una maschera più elementi basata sulla query ed esegui la formattazione dei controlli in maniera tale che vengano visualizzati correttamente (scheda Formato dalle proprietà in ogni controllo ed eventualmente utilizzando il menu scheda HOME) di fianco all'intestazione metti un textbox dove come nome elemento metterai "txt_anno" e come valore predefinito 2013...

    4* Crea un modulo (bus_mate) e cancella eventuali moduli già esistenti della precedente demo.
    fai doppio click e incolla
    Public Function valore(Record As Long) As Double
        'On Error Resume Next
        Dim db As DAO.Database
        Dim rs As DAO.Recordset
        Dim qdf As DAO.QueryDef
        
        Set db = CurrentDb
        Set qdf = db.CreateQueryDef("", "SELECT Sum(qry_mate.Diff) AS ParDiff FROM qry_mate WHERE (((qry_mate.ID)<=" & CStr(Record) & "));")
        Set rs = qdf.OpenRecordset
        
        rs.MoveFirst
        valore = rs.Fields("ParDiff")
        
        rs.Close
        qdf.Close
        db.Close
        
        Set rs = Nothing
        Set db = Nothing
        Set qdf = Nothing
    End Function
    
    Public Function CreaSupportoQry()
    
        On Error Resume Next
        Dim db As DAO.Database
        Dim qdf As DAO.QueryDef
        
        Set db = CurrentDb
        Set qdf = db.CreateQueryDef("qry_Mate", "SELECT tbl_mate.ID, tbl_mate.Data, tbl_mate.Quantita, tbl_mate.Costo, CDbl(Mid(CStr(([Quantita]/[Costo])/1000),1,8)) AS Gasolio, tbl_mate.Caricati, Nz([Costo])*Nz([Caricati]*1000) AS Totale, Nz(Nz([Quantita])-Nz([Totale]))/1000 AS Diff, valore(CLng([ID])) AS DiffPar, Year([data]) AS anno FROM tbl_mate WHERE (((Year([data]))=" & CStr(Form_frm_mate.txt_anno) & "));")
        DoCmd.DeleteObject acQuery, "qry_mate"
        Set qdf = db.CreateQueryDef("qry_Mate", "SELECT tbl_mate.ID, tbl_mate.Data, tbl_mate.Quantita, tbl_mate.Costo, CDbl(Mid(CStr(([Quantita]/[Costo])/1000),1,8)) AS Gasolio, tbl_mate.Caricati, Nz([Costo])*Nz([Caricati]*1000) AS Totale, Nz(Nz([Quantita])-Nz([Totale]))/1000 AS Diff, valore(CLng([ID])) AS DiffPar, Year([data]) AS anno FROM tbl_mate WHERE (((Year([data]))=" & CStr(Form_frm_mate.txt_anno) & "));")
        
        qdf.Close
        db.Close
        
        Set db = Nothing
        Set qdf = Nothing
        
    End Function
    ci sono altre cose da fare se fin qui non ci sono problemi vediamo poi
  • Re: Riportare un dato in un nuovo record.

    Grazie Angelo Provo con questi e poi ti faccio sapere.
  • Re: Riportare un dato in un nuovo record.

    Scusa Angelo, quando vado a creare la maschera con più elementi mi da questo errore raffigarato nelle immagini 1 e 2, non so se può essere influente che uso access 2013:
    Allegati:
    12855_d3af7dd297b6fc5d65dea607ffca2da9.png
    12855_d3af7dd297b6fc5d65dea607ffca2da9.png

    12855_0bb7cb3166d8a81c680f90d9c050e3e5.png
    12855_0bb7cb3166d8a81c680f90d9c050e3e5.png
  • Re: Riportare un dato in un nuovo record.

    Crea prima il modulo bus_mate e incollaci la parte relativa al codice... quindi vai a creare la query qry_mate ed infine ci fai la maschera più elementi
  • Re: Riportare un dato in un nuovo record.

    Scusa Angelo se è trascorso qualche giorno purtroppo gli impegni.
    Ho eseguito alla lettera le tue spiegazioni, tranne il passo nr. 3.

    Se me lo puoi spiegare più semplicemente.

    Grazie
Devi accedere o registrarti per scrivere nel forum
28 risposte