Aggiornare tabella solo su richiesta

di il
4 risposte

Aggiornare tabella solo su richiesta

Non sono sicuro se questo post vada qui o in sql. Comunque, provo qui
Ho un app access, con tutte le tabelle linked a tabelle in un database sql. Vorrei aggiungere una entry a una tabella solo se nella form l'utente , dopo aver riempito tutti i campi opportuni, preme il button "aggiorna": fino a quel momento, l'utente può sempre tornare indietro senza inserire niente premento il button "indietro senza aggiornare". Quando l'utente apre il form, gli viene presentato con tutti i campi vuoti, tranne il "numero di matricola" che viene incrementato di uno rispetto al'ultimo presente nella tabella del database (questo numero comunque NON è la primary key).
Per riassumere, quando l'utente preme "aggiorna", il mio codice funziona così
dim rsListaSoci as DAO recordset
Set rsListaSoci = CurrentDb.OpenRecordset("SELECT * FROM [ListaSoci]", dbOpenDynaset, dbSeeChanges)
rsListaSoci AddNew

rsListaSoci![Cognome] = Me.Cognome
' ...
' /* qui tutti i campi di rsListaSoci vengono riempiti con i valori desunti dal form...
' ...

rsListaSoci Update
' /* a questo punto chiudo come segue

DoCmd.Close
DoCmd.OpenForm "FrmListaSociInserimento" '/* per riavere il form con tutti i campi a blank eccetto il num di matricola

end Sub
Ora, il problema è che quando inserisco un nuovo socio (e questo funziona), il sistema inserisce di suo un altro record con tutti i campi vuoti. Dov'è che sbaglio? Presumo che il meccanismo di chiusura non sia corretto, ma non riesco a capire dove.
Grazie

4 Risposte

  • Re: Aggiornare tabella solo su richiesta

    Credo che tu commetta un errore di concetto ovvero voler usare una maschera associata e poi fare (anche) l'inserimento utilizzando un recordset, almeno questo traspare dal tuo post.
    Se realmente hai una maschera associata, nel momento che apri il FrmListaSociInserimento, crei anche il record con tutti i campi inizializzati al valore di default (probabilmente blank 'di coboliana memoria' oppure null).
    Ti direi che dovresti rimuovere l'associazione del form alla tabella/query ma non conoscendo come hai creato l'applicazione non posso spingermi oltre...
  • Re: Aggiornare tabella solo su richiesta

    Right on target, Max. Il fatto è che avevo il form associato alla tabella, anche se poi tutti i campi sono unbound. Eliminando l'associazione ala tabella, sembra che il record spurio non venga più generato.
    Restano alcuni dubbi.
    nel momento che apri il FrmListaSociInserimento, crei anche il record con tutti i campi inizializzati al valore di default (probabilmente blank 'di coboliana memoria' oppure null).
    OK, ma il fatto di riempire i campi con null (sono tutti unbound) equivale a scrivere immediatamente il record vuoto? Nota che il record vuoto viene scritto DOPO quello giusto, di questo son sicuro perchè la primary key è aumentata di uno; giustamente il numero di matricola è nullo anche lui, perche presumo di non averlo ancora inizializzato: il campo è sempre unbound e lo inizializzo con
    default value =DMax("[ListaSoci]![Numero tessera]";"[ListaSoci]")+1
    Insomma, mi sfugge la sequenza temporale. Inoltre, la prima volta che apro la form, il record NON viene salvato, altrimenti comparirebbe PRIMA del record "giusto".Mah.
    L'altro dubbio riguarda il fatto che ho un altro form associatoo ad un'altra tabella, in cui la stessa operazione di inserimento, molto simile, anch'essa con un numero di sequenza inizializzato allo stesso modo, non dà questo problema. La differenza apparente è che qui i campi non sono unbound, ma questo dovrebbe peggiorare la situazione, no? O non ho afferrato qualche concetto base?
    Grazie comunque.
  • Re: Aggiornare tabella solo su richiesta

    Non so bene in quale evento tu abbia inserito il pezzo di codice che hai precedentemente mostrato (sembra essere inserito nell'evento click di un button ' Aggiorna') comunque tu fai le seguenti operazioni :
    - inserisci tramite DAO.recordset un nuovo record
    - effettui un Docmd.close (senza parametri, quindi chiudi il form attivo che sarebbe ?)
    - apri un form (è quello che hai appena chiuso oppure è un altro?)

    Infine mancano delle info sulla scelta progettuale :
    Perché vuoi usare un form non associato ?
  • Re: Aggiornare tabella solo su richiesta

    Dunque, il codice è nell'evento click del bottone Aggiorna, come giustamente pensi.
    DoCmd.Close chiude il form attivo, cioè FrmListaSociInserimento, e il successivo open riapre lo stesso form per consentire un eventuale successivo inserimento.
    (si potrebbe pensare invece di close e reopen di mettere a blank tutti i campi, sono una ventina, reinizializzare il numero di matricola e chiudere la sub?)
    Io non "voglio" usare un form non associato, vorrei usare qualcosa che funzioni. Mi era sembrato di capire che se volevo avere l'update solo su button press, era meglio usare form (o campi) unbound, ma questo è sempre rimasto un mezzo mistero, visto che come dicevo nell'altro post ho un form associato ad una tabella in cui l'update su button funziona. Perchè non funzionava in quest'altra tabella rimane l'altro mezzo mistero. Ci deve essere qualche differenza, ma non sono ancora riuscito a trovarla.
Devi accedere o registrarti per scrivere nel forum
4 risposte