Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [Access2007] come aggiornare

    Ciao a tutti,
    devo risolvere un problema su access2007, che semplifico qui sotto:

    - Ho una maschera dati con questi campi:
    [NomeCliente] testo
    [conferma] si/no

    - poi ho una maschera in visualizzazione maschere continue con una query interna e che mi fa vedere solo quelli da confermare

    sul titolo della maschera volevo mettere un tasto con il quale spuntare tutti i record da confermare.
    So fare questa cosa con una Query di aggiornamento ma spero che si possa fare con un semplice comando nella maschera utilizzando:

    me!conferma = -1

    che così però mi aggiorna solo il primo recordo e non so come dirgli di aggiornare tutti i record visibili/filtrati nella maschera.

    Grazie in anticipo per l'aiuto.
    Giorgio

  2. #2
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Potresti
    - Calcolare il numero di record
    - Andare al Primo record
    - fare un ciclo su tutti i record della maschera ( ne sai gia il numero )
    Finito


    codice:
    Private Sub Pulsante_Click()
    
    ' Mi trovo il numero di record da confermare
    Dim NRec As Integer
    NRec = Me.Recordset.RecordCount
    
    ' Fermo tutto se non ci sono record da confermare
    If NRec < 0.5 Then
        MsgBox "Non ci sono clienti da confermare"
        Exit Sub
    End If
    
    ' Se invece ci sono record vado al primo
    Me.Recordset.MoveFirst
    
    ' dopo ciclo su tutti i record ( verso il basso ) mettendo la conferma
    Dim x As Integer
    For x = 1 To NRec
        Me.conferma.Value = True
        Me.Recordset.MoveNext
    Next
    
    ' alla fine per bellezza ritorno al 1° record
    Me.Recordset.MoveFirst
    
    End Sub
    Facci sapere
    .

  3. #3
    Grazie mille nman, FUNZIONA.
    ... e se questo comando lo volessi dare selezionando una casella di controllo invece che con un tasto?
    - quando la casella di controllo è Sì (-1) si attivano tutte le caselle di controllo dell'elenco
    - quando la casella di controllo è No (0) si disattivano tutte le caselle di controllo dell'elenco

    grazie.
    ciao.
    Giorgio

  4. #4
    scusami ma manca un pezzo che non ti ho detto perchè credevo di riuscire ad applicare il codice anche al campo [data].

    oltre a confermare le caselle di controllo devo anche inserire la [data] = date:

    - quando la casella di controllo è Sì (-1) si attivano tutte le caselle di controllo dell'elenco e il campo [data] = date

    - quando la casella di controllo è No (0) si disattivano tutte le caselle di controllo dell'elenco e il campo [data] = ""

    grazie.
    Ciao.
    Giorgio.

  5. #5
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Ricapitoliamo
    Hai una tabella con i campi
    - NomeCliente --- Testo
    - conferma --- Booleano
    - data --- Data/Ora

    Hai una maschera Continua associata alla tabella con i controlli
    ----- Associati ai rispettivi della tabella
    - NomeCliente
    - conferma
    - data
    ----- Non Associati
    - CasCont --- Booleano ( Mettici un valore predefinito True oppure False )
    - Pulsante --- Pulsante di Comando

    Al Klik su "Pulsante" vuoi che:
    "Conferma" prenda il valore di "CasCont"
    "data"
    ---- prenda il valore di Oggi se "CasCont" è True
    ---- prenda un valore vuoto se "CasCont" è False
    codice:
    Private Sub Pulsante_Click()
    
    ' Mi trovo il numero di record da confermare
    Dim NRec As Integer
    NRec = Me.Recordset.RecordCount
    
    ' Fermo tutto se non ci sono record da confermare
    If NRec < 0.5 Then
        MsgBox "Non ci sono clienti da confermare"
        Exit Sub
    End If
    
    ' Se invece ci sono record comincia il balletto
    Dim xConf As Boolean
    xConf = Me!CasCont.Value
    
    Me.Recordset.MoveFirst
    
    ' dopo ciclo su tutti i record ( verso il basso ) mettendo quanto richiesto
    Dim x As Integer
    For x = 1 To NRec
        Me.conferma.Value = xConf
            If xConf = True Then
                Me!data.Value = Now()      ' Puoi mettere anche ... = Date() ... = Date
            Else
                Me!data.Value = Null
            End If
        Me.Recordset.MoveNext
    Next
    
    ' alla fine per bellezza ritorno al 1° record
    Me.Recordset.MoveFirst
    
    End Sub
    Ti faccio pero 3 osservazioni

    1°) Perchè dici che non vuoi fare una query di aggiornamento
    a parer mio sarebbe meglio

    2°) Il nome del controllo "data" che hai proposto è infelice perche
    "data" è una parola riservata in molti linguaggi ( non sono sicuro se anche in Access )

    3°) Molto più grave, Hai dei dati rindondanti ( fai una ricerca su Google )
    ------ Tu dici:
    - Metti il flag su "conferma" e scrivi la data su "data"
    - Togli il flag da "conferma" e cancella la data da "data"
    ------ Io direi che devi eliminare il campo "conferma" e poi
    - Se il campo "data" è pieno consideri il record confermato
    - Se il campo "data" è vuoto consideri il record NON confermato

    Facci sapere
    .

  6. #6
    ciao nman, solo aggi ho potuto lavorare con il tuo suggerimento e aiuto, e il codice funziona facendo il suo "mestiere" come volevo. Grazie.
    Alcune cose però le ho dovute interpretare e sono riuscito a farlo funzionare.
    Mi permetto di correggere il codice con i miei campi per renderlo più leggibile, per dare un aiuto qualora qualcuno ne dovesse aver bisogno, e per avere un riscontro da te per capire se ho fatto bene (poi sotto rispondo alle domande che mi avevi fatto con il tuo ultimo post):

    - CasellaControllo182 è la CasellaControllo Sì/No che da il comando ed è nel titolo
    - StampaAgente sono le CasellaControllo Sì/No da aggiornare nelle maschere continue
    - DataStampatoAgente sono le date da aggiornare con Date() nelle maschere continue

    -----------------------------------------------------------------------------
    Private Sub CasellaControllo182_Click()

    ' Mi trovo il numero di record da confermare
    Dim NRec As Integer
    NRec = Me.Recordset.RecordCount

    ' Fermo tutto se non ci sono record da confermare
    If NRec < 0.5 Then
    MsgBox "Non ci sono record da confermare"
    Exit Sub
    End If

    ' Se invece ci sono record comincia il balletto
    Dim StampaAgente As Boolean
    StampaAgente = Me!CasellaControllo182.Value

    Me.Recordset.MoveFirst

    ' dopo ciclo su tutti i record (verso il basso) mettendo quanto richiesto
    Dim x As Integer
    For x = 1 To NRec
    Me.CasellaControllo182.Value = StampaAgente
    If StampaAgente= True Then
    Me!DataStampatoAgente.Value = Date ' Puoi mettere anche ... = Date() ... = Date
    Else
    Me!DataStampatoAgente.Value = Null
    End If
    Me.Recordset.MoveNext
    Next

    ' alla fine per bellezza ritorno al 1° record
    Me.Recordset.MoveFirst

    End Sub
    ------------------------------------------------------------------------------------

    poi ho aggiunto sul clik di StampaAgente:

    Private Sub StampaAgente_Click()
    ' per personalizzare a Sì/No ogni singolo record, e aggiornare contestualmente la rispettiva DataStampatoAgentea oggi o null

    If StampaAgente = True Then
    Me!DataStampatoAgente.Value = Date
    Else
    Me!DataStampatoAgente.Value = Null
    End If
    End Sub

    -------------------------------------------------------------------------------------

    rispondo ora alle tue domande:

    1°) Perchè dici che non vuoi fare una query di aggiornamento
    a parer mio sarebbe meglio
    perchè, per quanto ne so io, per selezionare e deselezionare le CaselleControllo e aggiornare o annullare il campo data servono due query: una che confermare e una per annullare.
    Siccome devo fare in totale 20 diverse maschere (quindi 40 Query di aggiornamento) per dare due diverse conferme a 10+10 campi, così mi sembrava la strada più veloce; infatti ora basta che duplico le maschere e rinomino i campi come anche il loro nome nel codice.


    2°) Il nome del controllo "data" che hai proposto è infelice perche
    "data" è una parola riservata in molti linguaggi ( non sono sicuro se anche in Access )
    come vedi i nomi che ho usato sono diversi da "data", era solo per semplificare la richiesta, ma ho capito che hai ragione a fare questa osservazione.

    3°) Molto più grave, Hai dei dati rindondanti ( fai una ricerca su Google )
    migliorerò la comunicazione in futuro. Grazie per l'osservazione.

    Grazie ancora per l'aiuto.
    ciao.
    Giorgio.

  7. #7
    Caro nman ho risolto il punto che non mi era chiaro:

    nel tuo codice mi hai scritto questa riga: Me.conferma.Value = xConf
    che prima ho tradotto in: Me.CasellaControllo182.Value = StampaAgente
    e mi funzionava solo perchè avevo copiato la CasellaControllo con Origine Controllo: [StampaAgente], ma la CasellaControllo del primo record corrispondeva alla mia CasellaControllo182 sul titolo.

    poi alla CasellaControllo182 ho tolto nelle proprietà Origine Controllo: [StampaAgente] lasciando l'origine vuota, e così CasellaControllo182 non è più legata a StampaAgente del primo record, ed ho corretto la riga in Me.StampaAgente.Value = CasellaControllo182
    Funziona!

    spero di essere stato chiaro.
    Grazie aancora.
    ciao.
    Giorgio

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 © 2025 vBulletin Solutions, Inc. All rights reserved.