Acquista i nostri libri consigliati su Amazon.it
+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 5 su 5

spostamento tra records

  1. #1
    tdani non è in linea Scolaretto
    (Access 2003)

    Uso una form a maschera singola per visualizzare (spostamento)/modificare/aggiungere/cancellare valori in una tabella di lookup.

    Vorrei "obbligare" l'utente ad utilizzare gli appositi pulsanti a tal fine da me posti nella maschera, intercettando ad es. l'evento onCurrent -se me.dirty o se me.newrecord- che porterebbe al salvataggio delle eventuali modifiche (e forse segnalazione di valori duplicati, al di fuori della mia gestione errori).

    Quali sono gli eventi da intercettare in modo da "sospendere" le eventuali modifiche, e ricordare all'utente di fare uso degli specifici pulsanti?

    Oppure, ho altre strade?

    Grazie a tutti, Dani

  2. #2
    L'avatar di dragone bianco
    dragone bianco non è in linea Amanuense
    ciao tdani

    nella maschera da te creata puoi nascondere i pulsanti di spostamento della maschera

    oppure

    se vuoi una maschera che usa i tuoi pulsanti creati, usa maschera non collegata alla tabella e da VBA (Tradite DAO) gestisci il tutto (Spostamento tra record, modifiche eliminazioni ecc)

    Ciao
    ℹ️ Leggi di più su dragone bianco ...

  3. #3
    tdani non è in linea Scolaretto
    grazie Dragone,
    ho provato a gestire la cosa (adattando un es. in rete) abilitando o meno i pulsanti, nell'evento OnCurrent della form, verificando se si è in presenza di me.newrecord o recordcount=0.
    Quote Originariamente inviato da dragone bianco Visualizza il messaggio
    ciao tdani

    nella maschera da te creata puoi nascondere i pulsanti di spostamento della maschera
    In parte ho risolto il problema, a meno che l'utente non si sposti ad es. con pgdown/up o rotellaMouse; in questi casi non riesco a impedire lo spostamento (che si può fare?).

    Per il controllo degli eventuali duplicati sui valori immessi, sto pensando di gestire il controllo sull'evento beforeUpdate dei campi, piuttosto che sul salvataggio.

    Che ne pensi?

    Ciao, Dani

  4. #4
    L'avatar di dragone bianco
    dragone bianco non è in linea Amanuense

  5. #5
    tdani non è in linea Scolaretto
    Ho risolto così (se può essere utile ad altri):

    4 pulsanti di spostamento con indicazione del record corrente e del totale records;
    1 pulsante per aggiungere record;
    1 pulsante per eliminare record e 1 pulsante per salvare record.

    codice seguente:
    'pulsante precedente
    Private Sub precedente_Click()
    On Error GoTo Err_precedente_Click
        DoCmd.GoToRecord , , acPrevious
    Exit_precedente_Click:
        Exit Sub
    Err_precedente_Click:
        MsgBox Err.Description
        Resume Exit_precedente_Click
    End Sub
     
    'pulsante primo
    Private Sub primo_Click()
    On Error GoTo Err_primo_Click
        DoCmd.GoToRecord , , acFirst
    Exit_primo_Click:
        Exit Sub
    Err_primo_Click:
        MsgBox Err.Description
        Resume Exit_primo_Click
    End Sub
     
    'pulsante successivo
    Private Sub successivo_Click()
    On Error GoTo Err_successivo_Click
        DoCmd.GoToRecord , , acNext
    Exit_successivo_Click:
        Exit Sub
    Err_successivo_Click:
        MsgBox Err.Description
        Resume Exit_successivo_Click
    End Sub
     
    'pulsante ultimo
    Private Sub ultimo_Click()
    On Error GoTo Err_ultimo_Click
        DoCmd.GoToRecord , , acLast
    Exit_ultimo_Click:
        Exit Sub
    Err_ultimo_Click:
        MsgBox Err.Description
        Resume Exit_ultimo_Click
    End Sub
     
    'pulsante aggiungi nuovo
    Private Sub addNew_Click()
    On Error GoTo Err_addNew_Click
        DoCmd.GoToRecord , , acNewRec
    Exit_addNew_Click:
        Exit Sub
    Err_addNew_Click:
        MsgBox Err.Description
        Resume Exit_addNew_Click
    End Sub
     
    'pulsante salva
    Private Sub salva_Click()
    On Error GoTo Err_salva_Click
     
    If Len(Trim(Nz(Descr, ""))) = 0 Or Len(Trim(Nz(Breve, ""))) = 0 Then
        MsgBox "Il campo [Descrizione] e il campo [Breve] devono essere valorizzati", , ltitle & " - Valori necessari"
        GoTo Exit_salva_Click
    End If
    If Me.Dirty = True Then Me.Dirty = False
     
    If IsLoaded("frmmaster") Then
        Forms!frmmaster!documenti.Form!IdTipArc.Requery
    End If
    Exit_salva_Click:
        Exit Sub
    Err_salva_Click:
        If Err.Number = 3022 Then
            MsgBox "Il valore inserito nel campo [Descrizione] o nel campo [Breve] è già presente.", , ltitle & " - Valore duplicato."
            Me.Undo
            Resume Exit_salva_Click
        End If
        MsgBox "Errore: " & Err.Description & " (" & Err.Number & ")"
        Resume Exit_salva_Click
    End Sub
     
    'pulsante elimina
    Private Sub elimina_Click()
    Dim conteggio As Long, msg As String, str As String, tfAllowDeletions As Boolean
    On Error GoTo Err_elimina_Click
    If Me.NewRecord = True Or Me.RecordsetClone.RecordCount = 0 Then
        Me.Undo
    Else
        conteggio = DCount("*", "Documenti", "[IdTipArc] = " & Me.IdTipArc)
        If conteggio >= 1 Then
            msg = "Attenzione!" & vbCrLf & vbCrLf
            msg = msg & "Il tipo archivio <" & Me.Descr & ">, è già stato utilizzato per n. " & CStr(conteggio) & " documenti."
            msg = msg & vbCrLf & vbCrLf & "Non si può procedere con l'eliminazione."
            MsgBox msg, vbCritical, ltitle & " - Eliminazione impossibile"
        Else
            msg = "Sei sicuro di voler eliminare il tipo archivio <" & Me.Descr & ">?" & vbCrLf & vbCrLf
            If MsgBox(msg, vbYesNo + vbExclamation, ltitle & " - Eliminazione Tipo Archivio") = 6 Then
                tfAllowDeletions = Me.AllowDeletions
                If Me.AllowDeletions = False Then Me.AllowDeletions = True
                DoCmd.SetWarnings False
                str = "delete * from tipiarchivi where idtiparc=" & Me.IdTipArc
                DoCmd.RunSQL str
                Me.Requery
                DoCmd.SetWarnings True
                Me.AllowDeletions = tfAllowDeletions
     
                If Me.RecordsetClone.RecordCount > 0 Then
                    Me.RecordsetClone.MoveLast
                    Me.Bookmark = Me.RecordsetClone.Bookmark
                End If
            End If
        End If
    End If
    Exit_elimina_Click:
        Exit Sub
    Err_elimina_Click:
        MsgBox Err.Description
        Resume Exit_elimina_Click
    End Sub
     
    'per spostarsi sul record numero immesso nella casella che mostra il record corrente
    Private Sub Num_AfterUpdate()
    If IsNumeric(Me!Num) Then
        If CLng(Me!Num) >= 0 And CLng(Me!Num) <= Me!di Then
            Me.RecordsetClone.AbsolutePosition = Me!Num - 1
            Me.Bookmark = Me.RecordsetClone.Bookmark
        Else
            Me!Num = Me.CurrentRecord
        End If
    Else
        Me!Num = Me.CurrentRecord
    End If
    End Sub
     
    'controllo duplicati su evento beforeupdate
    Private Sub Breve_BeforeUpdate(Cancel As Integer)
    Dim risposta As Variant
    risposta = DCount("*", Me.RecordSource, "[breve] = '" & Me.Breve & "'")
    If risposta > 0 Then
        MsgBox "Il valore immesso nel campo [breve] è già presente in archivio.", , ltitle & " - Valori duplicati"
    End If
    End Sub
     
    'controllo duplicati su evento beforeupdate
    Private Sub Descr_BeforeUpdate(Cancel As Integer)
    Dim risposta As Long
    risposta = Nz(DCount("*", Me.RecordSource, "[descr] = '" & Me.Descr & "'"), 0)
    If risposta > 0 Then
        MsgBox "Il valore immesso nel campo [Descrizione] è già presente in archivio.", , ltitle & " - Valori duplicati"
    End If
    End Sub
     
    'controllo valori presenti nei campi necessari
    Private Sub Form_BeforeUpdate(Cancel As Integer)
    If Len(Trim(Nz(Descr, ""))) = 0 Or Len(Trim(Nz(Breve, ""))) = 0 Then
        MsgBox "Il campo [Descrizione] e il campo [Breve] devono essere valorizzati", , ltitle & " - Valori necessari"
        Cancel = True
        Exit Sub
    End If
    End Sub
     
    'evento oncurrent
    Private Sub Form_Current()
    On Error GoTo Err_Form_Current
    Dim RecClone As Recordset
    Set RecClone = Me.RecordsetClone()
    If Me.NewRecord Then
        primo.Enabled = True
        precedente.Enabled = True
        successivo.Enabled = False
        ultimo.Enabled = True
        addNew.Enabled = False
        'elimina.Enabled = False
        Me!Num = "Nuovo"
        Me!di = RecClone.RecordCount + 1
        GoTo Exit_Form_Current
    End If
    addNew.Enabled = Me.AllowAdditions
    If RecClone.RecordCount = 0 Then
        primo.Enabled = False
        successivo.Enabled = False
        precedente.Enabled = False
        ultimo.Enabled = False
        addNew.Enabled = True
        'elimina.Enabled = False
    Else
        primo.Enabled = True
        ultimo.Enabled = True
        RecClone.Bookmark = Me.Bookmark
        RecClone.MovePrevious
        precedente.Enabled = Not (RecClone.BOF)
        RecClone.MoveNext
        RecClone.MoveNext
        successivo.Enabled = Not (RecClone.EOF)
        RecClone.MovePrevious
        Me!Num = Me.CurrentRecord
        RecClone.MoveLast
        Me!di = RecClone.RecordCount
        addNew.Enabled = True
        'elimina.Enabled = True
    End If
    Exit_Form_Current:
        RecClone.Close
        Exit Sub
    Err_Form_Current:
        If Err.Number = 3022 Then
            MsgBox "Il valore inserito nel campo [Descrizione] o nel campo [Breve] è già presente.", , ltitle & " - Valore duplicato."
            Me.Undo
            Resume Exit_Form_Current
        End If
        MsgBox "Errore: " & Err.Description & " (" & Err.Number & ")"
        Resume Exit_Form_Current
    End Sub
    
    Mi pare vada bene.

    Ancora grazie.

    Ciao, Dani

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. Unione di records
    Da Lucky74 nel forum Microsoft Access
    Risposte: 1
    Ultimo Post: 10-03-2016, 16:06
  2. Articolo: Copia records
    Da @Alex nel forum Microsoft Access
    Risposte: 0
    Ultimo Post: 06-11-2014, 09:12
  3. Winform su più Records
    Da disa nel forum Visual Basic .Net
    Risposte: 0
    Ultimo Post: 29-03-2011, 17:02
  4. find in 2.300.000 di records
    Da sal21 nel forum Microsoft Word
    Risposte: 1
    Ultimo Post: 10-12-2010, 22:57
  5. troppi records
    Da MisterM nel forum Microsoft Word
    Risposte: 6
    Ultimo Post: 24-02-2005, 16:00