Newsgroup: it.comp.appl.access
Titolo: Aggiornare campo in una maschera tabulare

Ciao a tutti,
risolto un problema me ne nasce subito un altro.
In una maschera tabulare ho un campo "Campodaaggiornare" che vorrei aggiornare  con lo stesso valore in tutti i record successivi al popolamento del campo stesso. Esempio :
Record 1 
Nome     Cognome     professione      Campodaaggiornare
Luigi          Rossi              Operaio
Giovanni    Verdi               Impiegato                  10
Sandro         Giacobbe      Quadro
Rossana        Casale           Dirigente
 
Nell'esempio sopra riportato, avrei necessità di trasferire il val 10 associato al sig verdi nei records successivi.
io ho pensato ad una Query di aggiornamento, parametrica, dove però nella finestra di Imputbox non vorrei inserire il criterio, ma il valore di aggiornamento.
Secondo voi è possibile. Altrimenti cosa mi suggerireste??????
Scusate per la domanda "forse" banale, ma non ne riesco ad uscire.
Aspetto "preziose" vostre
Grazie in anticipo
Dino


Se hai un pulsante per aggiungere un nuovo record potresti inserire sull'evento click il seguente codice
 
With Me.RecordsetClone
    .Bookmark = Me.Bookmark   'crea un segnalibro sul record attivo
    .AddNew   'crea un nuovo record
    !Campodaaggiornare = Me.Campodaaggiornare   'imposta il campo Campodaaggiornare del nuovo record col contenuto del campodaaggiornare del record attivo
    .Update   'fa l'update, diciamo che scrive il dato
    Me.Bookmark = .LastModified   'imposta come segnalibro il nuovo record
End With
 
se devi "copiare" il contenuto da/su altri campi, questi vanno aggiunti prima dell'update con la dicitura !nomecampo_nuovorecord = me.nomecampo


Ciao grazie per la risposta,
in realtà i record vengono già inseriti.e quin
di con i record già creati io non devo aggiungere dei record, ma aggiornare solo il campo in questione in quei record.
Creo comunque un pulsante di comando dove imposto solo l?UPDATE????
Attendo gentili tue.....


Se i record sono già inseriti e il campo Campodaaggiornare è vuoto l'unico modo che mi viene in mente è creare un pulsante col quale fare in modo che, posizionandoti sul record col campo Campodaaggiornare sorgente venga ricopiato su tutti i record successivi finché non trova un Campodaaggiornare "non vuoto" o è arrivato alla fine. Sull'evento click dovrai inserire.
Per fare ciò a mio parere conviene utilizzare i metodi .FindFirst e .FindNext (puoi trovare validi esempi cercando in rete)


Grazie mille per la risposta,
una domanda, ma non potremmo risolvere con una Query di aggiornamento parametrica, dove il parametro di Imputbox non viene inserito come criterio, ma come parametro di aggiornamento????


Potresti utilizzare una Query per riempire tutti i campi vuoti con un valore ma dovresti impostare la ricerca su "campo vuoto" e riempiresti TUTTI i campi vuoti di una determinata colonna del recordset. Avevo inteso che tu volessi riempire i campi vuoti successivi ad un determinato inserimento, cioè se su 5 record solo il campo 3 contiene un valore volessi riportarlo su 4 e 5. Con la Query di aggiornamento parametrica lo copieresti anche su 1 e 2.
Potrei sbagliarmi, le query generate da Access le conosco poco, sono uno sviluppatore Oracle e solitamente me le costruisco io ma la logica è la stessa.


Grazie per la risposta,
di seguito ti giro la query di aggiornamento che grazie ai tuoi consigli ho inserito :
Private Sub Comando11_Click()
Dim strSQL As String
Dim Db As DAO.Database
Set Db = CurrentDb
strSQL = "UPDATE Prova SET [Pippo]= [Testo12]"
 
CurrentDb.Execute (strSQL)
End sub
Nel campo testo12 ho il valore costante che deve aggiornare il campo "Pippo" di ogni record.
Quando lancio la query mi esce questo errore : " Errore 3061" Parametri insufficiente.PREVISTO 1
Cosa ho dimenticato?????? Le dichiarazioni ci sono, le librerie ho verificato ci sono DAO 3.6.
Non saprei proprio.
Attendo preziose tue


Il codice così come lo riporti non richiede parametri. L'errore che appare infatti dice "mi aspettavo 1 parametro ma non me l'hai fornito" ed infatti nel codice non è riportato. L'unico errore che noto è che non hai chiuso il set del database perciò prima dell'End Sub aggiungerei
Set Db = Nothing oppure
Db.close
Se Testo12 non è un campo della tabella Prova devi esplicitarlo dicendogli che è nella maschera in uso (credo che funzioni anche utilizzando il Me) scrivendo Me.Testo12.value ma facendo attenzione alla struttura del codice
strSQL = "UPDATE Prova SET [Pippo]=" & Me.Testo12.value


Grazie mille provo e ti faccio sapere


Perfetto risolto il tutto
Grazie ancora

> > > strSQL = "UPDATE Prova SET [Pippo]=" & Me.Testo12.value 
 
ma questa query aggiuorna tutti i record! 
sicuro di non voler aggiungere una condizione where?


Ciao in realtà io vorrei aggiornare solo i record da un determinato "punto" e no tutti.
Ipotizziamo :
07:30
08:00 Vorrei posticipare di 30 min da questo record in giù
08:30. 
 
Attualmente invece me li aggiorna tutti.
Attendo tue
Dino


Come giustamente afferma Michele ti serve una clausola WHERE ma forse sarebbe meglio se tu spiegassi bene cosa ti serve perché posticipare i record da un certo punto in giù sarebbe come spostare in una agenda giornaliera tutti gli impegni di mezz'ora ma se l'agenda è piena significa dover cancellare l'ultimo impegno. Oppure controllare se c'è un "buco di mezz'ora" ed in caso sia vero traslare gli appuntamenti altrimenti no.


Ciao e grazie per la risposta, è proprio come hai affermato tu, l'agenda giornaliera viene già pianificata, ma può succedere un imprevisto e l'agenda si "dovrebbe aggiornare in automatico senza ritoccare manualmente tutti gli orari.Eventualmente anche l'ultimo orario non salta ma viene posticipato. In sostanza potrebbe capitare che dalle 08:00 alle 12:00 sia tutto regolare. L'appuntamento delle 12:00 viene posticipato di 30 min.Di conseguenza tutti gli appuntamenti successivi devono essere slittati di 30 min. Il tutto lo sto gestendo (grazie ai vostri consigli) in questo modo :
Maschera tabulare con i seguenti campi :
Data app  - OraLav- descrizione app  - min - testotime 
21/02/22       07:30          app 1
21/02/22       08:00           App 2
21/02/22        08:30           App3 
 
Ipotizziamo che l'app 2 venga posticipato di 30 min, cioè dalle 08:00 alle 08:30.Di conseguenza tutti i successivi app devono essere rettificati di 30 min
nella casella di testo testotime del record App2 vado ad inserire 30 cioè i minuti di posticipo  .
Nell'evento  AfterUpdate di testotime ho scritto questo codice.
 
Dim strSQL As String
Dim Db As DAO.Database
Set Db = CurrentDb
strSQL = "UPDATE Prova SET [Min] =" & Me.Testotime.value
CurrentDb.Execute (strSQL)
Forms!ProvaTb.Requery
Facendo così il campo [Min] per tutti irecord si aggiorna a 30.
Lancio poi una query di agg (sempre nel record dove c'è stato il posticipo) che aggiorna il campo Oralav al posticipo con questa funzione :DateAdd("n";[Min];[prova].[lav])
e come criterio ho messo <=time.
Il risultato è ovviamente che mi si posticipano tutti gli orari della giornata e non solo gli orari dell'app2. ma anche i precedenti.
Per far sì che questo no avvenga dovrei andare ad inserire nel campo [MIn] di tutti i record precedenti il posticipo il valore 0
 
 
L'obiettivo come avrete ben capito è quello di posticipare gli orari, ma solo dall'orario che ha subito il posticipo a seguire.
 
In sostanza voi, come impostereste la condizione Where???
Attendo "preziose" vostre in merito
Grazie in anticipo