Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di nadia79
    Registrato dal
    Aug 2005
    Messaggi
    187

    [VBA/ACCESS] Problema query Scadenziario

    Ciao a tutti,
    per uno sbaglio nello scadenziario ora devo aggiornare tutte le date di scadenza a mano tramite query...

    Allora per le rimesse dirette, 30 gg, 60 gg, 90gg ho fatto questa query:

    codice:
    UPDATE scadenziario SET scadenziario.DATASCADENZA = scadenziario.DATAEMISSIONE+30 
    WHERE (((scadenziario.TIPOFATTURA)='30 GG '));
    Cambiando di volta in volta i valori, ora però il problema che ho è il seguente... come posso aggiornare le fatture che hanno come scadenza es. 30 giorni fine mese?

    Dovrei prendere sempre il valore data dal campo DATAEMISSIONE però poi non basta aggiungere ma devo calcolare il mese e se il mese è di 28, 30 o 31 giorni!
    Si può fare una query per aggiornare questi campi?

    Uff... spero di essere stata chiara nella spiegazione.
    Ciao e grazie
    Nadia

  2. #2
    Utente di HTML.it L'avatar di nadia79
    Registrato dal
    Aug 2005
    Messaggi
    187
    Eccomi di nuovo...


    Guardando qualche esempio (però erano SELECT non UPDATE) ho tirato fuori questa stringa SQL

    codice:
    UPDATE scadenziario SET scadenziario.DATASCADENZA = CLNG(DATEADD('d', 1,(DATASERIAL(YEAR('m', 1, scadenziario.DATAEMISSIONE)),( MONTH('m', 1, scadenziario.DATAEMISSIONE)), 1));
    Però mi dà errore di sintassi...sbaglio qualcosa (sicuramente), ma è a livello di sinassi o di logica? :master:

  3. #3
    Utente di HTML.it L'avatar di nadia79
    Registrato dal
    Aug 2005
    Messaggi
    187
    Up

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    121
    se devi solo correggere l'errore commesso, puoi servirti di queste poche righe di codice, tenendo presente che nel mio codice ho utilizzato tre campi:
    1. mesi di scadenza
    2. data emissione
    3. data scadenza

    TI PERMETTERANNO DI CALCOLARE IL FINE MESE

    -----------------INIZIO CODICE------------

    Public Function calcoladata()

    ' Dichiara le variabili.

    Dim Mese As Long
    Dim Anno As Long
    Dim Giorno As Long
    Dim Datacomposta As Date

    Mese = Month(dataemissione)
    Anno = Year(dataemissione)
    Giorno = Day(dataemissione)

    If Mese = 1 Then
    Giorno = "31"
    ElseIf Mese = 2 Then
    Giorno = "28"
    ElseIf Mese = 3 Then
    Giorno = "31"
    ElseIf Mese = 4 Then
    Giorno = "30"
    ElseIf Mese = 5 Then
    Giorno = "31"
    ElseIf Mese = 6 Then
    Giorno = "30"
    ElseIf Mese = 7 Then
    Giorno = "31"
    ElseIf Mese = 8 Then
    Giorno = "31"
    ElseIf Mese = 9 Then
    Giorno = "30"
    ElseIf Mese = 10 Then
    Giorno = "31"
    ElseIf Mese = 11 Then
    Giorno = "30"
    ElseIf Mese = 12 Then
    Giorno = "31"
    End If


    Datacomposta = Giorno & "/" & Mese & "/" & Anno

    datascadenza = DateAdd("m", mesi, Datacomposta)

    End Function

    ----------------FINE CODICE---------------

    'V.I.P.

    'nel 2008 l'anno sarà bisestile, quindi questo codice non sarà esatto

    mila

  5. #5
    Ma non sarebbe più veloce:

    Select Case mese
    Case Is = 1, Is = 3, Is = 5, Is = 7, Is = 8, Is = 10, Is = 12
    giorni = "31"
    Case Is = 2
    giorni = 28
    Case Else
    giorni = "30"
    End Select

    Cmq se ti interessa il codice per sapere se l'anno (compreso tra il 1500 e il 3000, quindi ti dovrebbe andare bene) è bisestile o no ti posso dare un codice semplicissimo..ciao

  6. #6
    Utente di HTML.it L'avatar di nadia79
    Registrato dal
    Aug 2005
    Messaggi
    187
    Uhmm io intendo a livello di ambiente Access query non VBA.
    Devo fare una query di UPDATE nella tabella Scadenziario

  7. #7
    Utente di HTML.it L'avatar di nadia79
    Registrato dal
    Aug 2005
    Messaggi
    187
    up!

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    121
    x nadia

    il codice che ti ho prospettato puoi attivarlo ad un pulsante di una maschera specifica che al suo click lancia un ciclo while riferita all'origine dei dati.

    Dim dbs As Database, rst As Recordset
    Dim strSQL As String
    Set dbs = CurrentDb
    Set rst = dbs.OpenRecordset("tua tabella o query", dbOpenDynaset)
    If rst.RecordCount > 0 Then
    rst.MoveFirst
    Do While Not rst.EOF
    rst.Edit
    calcoladata '(che è la fuction che ti ho scritto prima)
    rst.Update
    rst.MoveNext
    Loop
    rst.Close
    Set dbs = Nothing
    End If
    in questo modo tu aggiorni i dati quando ti sembra necessario
    by by
    mila

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.