Acquista i nostri libri consigliati su Amazon.it
+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Access calcoli con campo data

  1. #1
    michelegaio non è in linea Novello
    Ciao a tutti. Qualcuno mi può dire come risolvere tramite VBA la seguente situazione: ho un campo data ScadenzaFattura che voglio incrementare tramite il valore del campo testo Periodicità. Cioè se in Periodicità ho il valore "mensile" e nel campo ScadenzaFattura ho il valore "25/12/2005" vorrei che mi fosse restituito nel campo ScadenzaFattura "25/01/2006", in pratica vorrei che fosse incrementato di un mese esatto.
    Grazie a tutti per l'eventuale aiuto.
    Ciao.

  2. #2
    L'avatar di dragone bianco
    dragone bianco non è in linea Amanuense
    Se è una data l'unica è Scomporre la data e sommare un 1 al mese

    Dim Data As Date ' questo dato è la tua data
    Dim DataRis as Date
    Dim Anno as integer
    Dim Mese as integer
    Dim Giorno as integer
    Dim NumeroMesi
    
    Anno=year(data) 'estrae l'anno
    Mese=month(data)'estrae il mese
    Giorno=day(data)'estrae il giorno
    
    NumeroMesi=1
    
    If mese+NumeroMesi>12 Then 'se il mese +1 è maggiore di dodici
       Mese=mese+NumeroMesi-12
       anno=anno+1
    else
       Mese=Mese+NumeroMesi
    end if
    
    DataRis=cdate(Giorno & "/" & Mese & "/" & Anno)
    
    Praticamente il codice Scompone la data in Giorno mese e anno
    Aggiunge 1 (ho impostato la varibile NumeroMesi che con questo sistema può avere come valore massimo 11, un incremento di 11 mesi massimi) Al valore del mese se è maggiore di 12 incrementa l'anno di uno e il mese viene calcolato altrimenti incrementa di uno solo il mese
    poi ricompone la data

    Risultato è

    12/05/2005 restituisce 12/06/2005
    12/12/2005 restituisce 12/01/2006

    Ciao
    ℹ️ Leggi di più su dragone bianco ...

  3. #3
    L'avatar di TheTruster
    TheTruster non è in linea Moderatore Globale Ultimo blog: Mouse Wheel in Visual Basic 6 - ActiveX
    esiste anche la funzione DateAdd, veramente

    NuovaData= DateAdd("m", 1, DataRiferimento)

    DataRiferimento è la data di partenza
    NuovaData è la data di scadenza, ovvero DataRiferimento con l'aggiunta di un mese

    per quanto riguarda la funzione, "m" sta ad indicare che si vogliono aggiungere "mesi", mentre l'1 è il numero di mesi da aggiugere

    TheTruster
    ℹ️ Leggi di più su TheTruster ...

  4. #4
    michelegaio non è in linea Novello
    Grazie a tutti e due.
    Ho verificato con DateAdd e funziona correttamente.
    Mi permetto di farvi un'altra domanda: vorrei che, se nel campo Periodicità invece di 'mensile' digito un numero X di giorni invece di incrementare di un mese il campo 'DataScadenzaFattura' venisse aumentato per il numero di giorni digitato.
    Ciao.

  5. #5
    L'avatar di dragone bianco
    dragone bianco non è in linea Amanuense
    Se guardi la guida in linea di DateAdd vedrai che gestisce anche quel caso.

    Ciao
    ℹ️ Leggi di più su dragone bianco ...

  6. #6
    michelegaio non è in linea Novello
    Ho visto che gestisce anche quel caso. Però non riesco (e mi scuso nuovamente per la mia profonda ignoranza) a capire come devo a gestire il calcolo del mese o dei giorni a seconda del valore inserito in campo Periodicità.
    Grazie e ciao.

    Ti allego il codice che finora ho fatto (o meglio mi hanno/hai aiutato a fare):

    Private Sub Form_AfterUpdate()
    If DCount("*", "SviluppoRateizzi", "Nsollecito='" & _
    Me!Nsollecito & "'") <> 0 Then Exit Sub
    Dim strSQL As String
    Dim ImpRata As Currency
    Dim PrimeRate As Currency
    Dim UltimaRata As Currency
    Dim ImpCapitale As Currency
    Dim PrimeCapitale As Currency
    Dim UltimaCapitale As Currency
    Dim Conta As Integer
    Dim ProgressivoDaPagare As Double
    Dim RataScad As Date
    Dim FattScad As Date
    Dim FattScadPrima As Date
    Dim Interval As String

    PrimeRate = TotDaPagare / Me!Frazionamento
    PrimeRate = Fix("" & PrimeRate * 100 _
    + Sgn(PrimeRate) * 0.5) / 100
    UltimaRata = TotDaPagare - _
    (PrimeRate * (Me!Frazionamento - 1))
    PrimeCapitale = TotDaPagare
    UltimaCapitale = TotDaPagare - PrimeRate

    ProgressivoDaPagare = TotDaPagare


    RataScad = Me!DataScadenzaFranchigia
    FattScad = Me!DataScadenzaFattura

    DoCmd.SetWarnings False
    For Conta = 1 To Me!Frazionamento
    If Conta = Me!Frazionamento Then
    ImpRata = UltimaRata
    ImpCapitale = ProgressivoDaPagare
    RataScad = DateAdd("m", IntervalType, RataScad)
    Else
    ImpRata = PrimeRate
    ImpCapitale = ProgressivoDaPagare
    RataScad = DateAdd("m", IntervalType, RataScad)
    End If
    ProgressivoDaPagare = ProgressivoDaPagare - ImpRata
    If Conta = 1 Then
    FattScad = FattScad
    Else
    FattScad = DateAdd("m", -1, RataScad - 1)
    End If



    strSQL = "INSERT INTO SviluppoRateizzi " & _
    "(Nsollecito, NRata, RATA, Capitale, ScadenzaRata,DataScadenzaFattura) VALUES ('" & _
    Me!Nsollecito & "', " & Conta & ", '" & _
    ImpRata & "','" & _
    ImpCapitale & "','" & _
    RataScad & "','" & _
    FattScad & "');"
    DoCmd.RunSQL strSQL
    Next Conta

    DoCmd.SetWarnings True
    End Sub

  7. #7
    L'avatar di dragone bianco
    dragone bianco non è in linea Amanuense
    devi utilizzazzare un select case

    Dim Tipo as string
    Selecyt case txtPeriodicità
      case="mese"
          Tipo ="m"
      case="Giorno"
          Tipo ="g"
      elsecae
          tipo="g"
    End select
    For Conta = 1 To Me!Frazionamento
    If Conta = Me!Frazionamento Then
    ImpRata = UltimaRata
    ImpCapitale = ProgressivoDaPagare
    RataScad = DateAdd(tipo, IntervalType, RataScad)
    Else
    ImpRata = PrimeRate
    ImpCapitale = ProgressivoDaPagare
    RataScad = DateAdd(tipo, IntervalType, RataScad)
    End If
    ProgressivoDaPagare = ProgressivoDaPagare - ImpRata
    If Conta = 1 Then
    FattScad = FattScad
    Else
    FattScad = DateAdd(tipo, -1, RataScad - 1)
    End If
    
    .....
    
    A secondo di che valore ha l'oggetto txtperiodicità se non rientra nei criteri scelti è di tipo G

    Ciao
    ℹ️ Leggi di più su dragone bianco ...

  8. #8
    L'avatar di TheTruster
    TheTruster non è in linea Moderatore Globale Ultimo blog: Mouse Wheel in Visual Basic 6 - ActiveX
    ciao Fausto errorino di digitazione:

    Selecyt case txtPeriodicit&#224;
      case="mese"
          Tipo ="m"
      case="Giorno"
          Tipo ="g"
      Case Else
          tipo="g"
    End select
    
    TheTruster
    ℹ️ Leggi di più su TheTruster ...

  9. #9
    michelegaio non è in linea Novello
    Mi scuso per la svista. Prima ho postato del codice che non funzionava. Provo a postare nuovamente il quesito con il codice finora fatto e funzionante sperando che non perdiate troppo la pazienza.

    Ho visto che gestisce anche quel caso. Però non riesco (e mi scuso nuovamente per la mia profonda ignoranza) a capire come devo a gestire il calcolo del mese o dei giorni a seconda del valore inserito in campo Periodicità (campo numerico).
    Grazie e ciao.


    Private Sub Form_AfterUpdate()
    If DCount("*", "SviluppoRateizzi", "Nsollecito='" & _
    Me!Nsollecito & "'") <> 0 Then Exit Sub
    Dim strSQL As String
    Dim ImpRata As Currency
    Dim PrimeRate As Currency
    Dim UltimaRata As Currency
    Dim ImpCapitale As Currency
    Dim PrimeCapitale As Currency
    Dim UltimaCapitale As Currency
    Dim Conta As Integer
    Dim ProgressivoDaPagare As Double
    Dim RataScad As Date
    Dim FattScad As Date
    Dim FattScadPrima As Date

    PrimeRate = TotDaPagare / Me!Frazionamento
    PrimeRate = Fix("" & PrimeRate * 100 _
    + Sgn(PrimeRate) * 0.5) / 100
    UltimaRata = TotDaPagare - _
    (PrimeRate * (Me!Frazionamento - 1))
    PrimeCapitale = TotDaPagare
    UltimaCapitale = TotDaPagare - PrimeRate

    ProgressivoDaPagare = TotDaPagare


    RataScad = Me!DataScadenzaFranchigia
    FattScad = Me!DataScadenzaFattura

    DoCmd.SetWarnings False
    For Conta = 1 To Me!Frazionamento
    If Conta = Me!Frazionamento Then
    ImpRata = UltimaRata
    ImpCapitale = ProgressivoDaPagare
    RataScad = DateAdd("m", 1, RataScad)
    Else
    ImpRata = PrimeRate
    ImpCapitale = ProgressivoDaPagare
    RataScad = DateAdd("m", 1, RataScad)
    End If
    ProgressivoDaPagare = ProgressivoDaPagare - ImpRata
    If Conta = 1 Then
    FattScad = FattScad
    Else
    FattScad = DateAdd("m", -1, RataScad - 1)
    End If



    strSQL = "INSERT INTO SviluppoRateizzi " & _
    "(Nsollecito, NRata, RATA, Capitale, ScadenzaRata,DataScadenzaFattura) VALUES ('" & _
    Me!Nsollecito & "', " & Conta & ", '" & _
    ImpRata & "','" & _
    ImpCapitale & "','" & _
    RataScad & "','" & _
    FattScad & "');"
    DoCmd.RunSQL strSQL
    Next Conta

    DoCmd.SetWarnings True
    End Sub

  10. #10
    L'avatar di dragone bianco
    dragone bianco non è in linea Amanuense
    Da quello che vedio sicuramente il problema è sul codice riguardante SQL.

    Puoi darmi una piccola spiegazione del Codice SQL che usi???

    Quote Originariamente inviato da michelegaio
    strSQL = "INSERT INTO SviluppoRateizzi " & _
    "(Nsollecito, NRata, RATA, Capitale, ScadenzaRata,DataScadenzaFattura) VALUES ('" & _
    Me!Nsollecito & "', " & Conta & ", '" & _
    ImpRata & "','" & _
    ImpCapitale & "','" & _
    RataScad & "','" & _
    FattScad & "');"
    DoCmd.RunSQL strSQL
    Ciao
    ℹ️ Leggi di più su dragone bianco ...

+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo

Potrebbero interessarti anche ...

  1. Risposte: 4
    Ultimo Post: 13-02-2012, 11:36
  2. [ACCESS] Query con campo data formattato
    Da The Gang nel forum Microsoft Access
    Risposte: 2
    Ultimo Post: 29-09-2006, 13:16
  3. [Access] effettuazione calcoli su campo
    Da alex100 nel forum Microsoft Access
    Risposte: 12
    Ultimo Post: 22-06-2006, 10:47
  4. [Access]Campo data nullo
    Da Vanessa nel forum Microsoft Access
    Risposte: 2
    Ultimo Post: 16-05-2006, 16:48
  5. campo calcolato da una data in access
    Da simic nel forum Visual Basic 6
    Risposte: 2
    Ultimo Post: 04-01-2005, 18:04