Tasto salva

di il
4 risposte

Tasto salva

Buonasera a tutti,
ho creato una maschera che all'apertura mi permette di inserire dei records in una tabella che hanno all'inizio un contatore. Questo contatore viene aggiornato dalla query inserita nel tasto salva che vi allego qui di seguito:

Private Sub Comando37_Click()
If Me.Dirty Then
If MsgBox("vuoi salvare le modifiche apportate?", vbCritical + vbOKCancel) = vbOK Then
Me.Dirty = False
DoCmd.OpenQuery "aggcontservcri"
Me.Refresh
Else
Me.Undo
Me.Refresh
End If
End If

End Sub

Il problema è che se poi si rientra in maschera e si fanno modifiche ai campi già inseriti, il tasto salva aggiorna sempre il contatore record e non va bene. Come posso ovviare al problema? Grazie per l'aiuto.

Giuseppe

4 Risposte

  • Re: Tasto salva

    Perché non hai usato in maniera nativa un campo di tipo "contatore" ossia "numerazione automatica"? Funziona automaticamente, non devi applicare alcun codice per generarlo e non ti crea questi problemi di cui stai parlando.
  • Re: Tasto salva

    L'errore di concetto che commetti è la gestione della PK o chiave primaria.
    Questo particolare campo, se non si utilizza un Counter come detto da Osvaldo... va gestito e lo si può fare in 2 modi.
    Primo si definisce nel controllo associato alla PK alla proprietà DEFAULTVALUE una funzione che lo genera... averlo associato a questa proprietà fa in modo che venga calcolato solo su NewRecord.
    Altrimenti su evento BeforeUpdate di maschera si controlla la proprietà NewRecord e se vera si genera il valore della PK.
    Tu hai fatto un pasticcio di concetti... e ti suggerisco di rifletterci in modo più completo.

    Sinceramente per chi è poco pratico... il suggerimento è di usare sempre come PK ip Counter e, questi campi calcolati speciali li si usa come tali... ma non come PK.
  • Re: Tasto salva

    Grazie per l'informazione. Nel campo default value avevo già inserito questo codice:

    =DLookUp("[idcommessa]";"dbo_contservcri";"[idanno] = " & [Maschere]![insservizicriautprg]![Testo35])+1

    che mi incrementa il valore del progressivo non gestito a counter. Il problema è gestire correttamente l'incremento del progressivo al momento giusto. Ovvero solo in inserimento nuovo record e non in variazione. Ho fatto questo test inserendo questo codice in current form:
    Dim intnewrec As Integer
    intnewrec = Me.NewRecord
    If intnewrec = True Then
    MsgBox "You're in a new record." _
    & "@Do you want to add new data?" _
    & "@If not, move to an existing record."
    End If

    ma al momento del nuovo record mi incrementerebbe già il contatore. Ecco perché pensavo che gestire un tasto salva mi permetteva di controllare meglio il progressivo. Scusate se non ho capito perfettamente i vostri consigli.
    Giuseppe
  • Re: Tasto salva

    giuseppe21965 ha scritto:


    Grazie per l'informazione. Nel campo default value avevo già inserito questo codice:

    =DLookUp("[idcommessa]";"dbo_contservcri";"[idanno] = " & [Maschere]![insservizicriautprg]![Testo35])+1

    che mi incrementa il valore del progressivo non gestito a counter. Il problema è gestire correttamente l'incremento del progressivo al momento giusto. Ovvero solo in inserimento nuovo record e non in variazione. Ho fatto questo test inserendo questo codice in current form:
    Dim intnewrec As Integer
    intnewrec = Me.NewRecord
    If intnewrec = True Then
    MsgBox "You're in a new record." _
    & "@Do you want to add new data?" _
    & "@If not, move to an existing record."
    End If

    ma al momento del nuovo record mi incrementerebbe già il contatore. Ecco perché pensavo che gestire un tasto salva mi permetteva di controllare meglio il progressivo. Scusate se non ho capito perfettamente i vostri consigli.
    Giuseppe
    Se lo metti su DEFAULTVALUE non devi preoccuparti di gestirlo... lo fa in automatico, continuo a non capire di cosa parli...
Devi accedere o registrarti per scrivere nel forum
4 risposte