Selezionare un record per poi modificarlo o cancellarlo (VBA)

di Faustinator il
16 risposte
Buongiorno, dovendo realizzare un'applicazione molto semplice ma da affidare a utenti piuttosto inesperti sto cercando di evitare che essi possano accedere a tabelle intere per evitare danni. Ora per inserire nuovi record me la sono cavata con una maschera con le caselle di testo che rappresentano i campi da inserire e del codice VBA come sotto, Ma per operazioni di modifica o cancellazione di un singolo record le mia competenze sono insufficienti. Per ora ho risolto con una classica query che alimenta una maschera che consente l'edit di specifici campi e, con un pulsante, la cancellazione del record. Funziona ma non mi piace molto. Aspetto vostro suggerimenti, grazie, m.


Private Sub plsInsNominativo_Click()
Dim strInsert
Dim risposta
    risposta = MsgBox("confermi?", vbYesNo)
    
    If risposta = 6 Then
        strInsert = "INSERT INTO T_Anagrafica(NOMINATIVO,DIVISIONE,EMAIL,DATA_FIRMA_DSAN)" & vbCrLf & _
            "VALUES(pNOMINATIVO,pDIVISIONE,pEMAIL,pDATA_FIRMA_DSAN)"
        Set DB = CurrentDb
        Set qdf = DB.CreateQueryDef(vbNullString, strInsert)
        qdf.Parameters("pNOMINATIVO").Value = Me.NOMINATIVO.Value
        qdf.Parameters("pDIVISIONE").Value = Me.DIVISIONE.Value
        qdf.Parameters("pEMAIL").Value = Me.EMAIL.Value
        qdf.Parameters("pDATA_FIRMA_DSAN").Value = Me.DATA_FIRMA_DSAN.Value
        qdf.Execute dbFailOnError
        
       
        
        MsgBox "E' stato inserito il nominativo di " & Me.NOMINATIVO.Value & " " & Me.DIVISIONE.Value & " con DSAN in data:  " & Me.DATA_FIRMA_DSAN.Value
        
        NOMINATIVO.Value = ""
        DIVISIONE.Value = ""
        EMAIL.Value = ""
        DATA_FIRMA_DSAN.Value = ""
      
    Else
        MsgBox ("ti sei pentito!")
        
    End If
End Sub




16 Risposte

  • Il Codice che pubblichi non ha nulla a che vedere con l'oggetto del 3D… lo sai vero…?

    Puoi spiegarci meglio cosa vuoi/devi fare…?

  • Il codice che ho pubblicato mostra come ho risolto l'INSERIMENTO di un nuovo record. Mi serve un vostro consiglio per operare in qualche modalità analoga a questa per la SELEZIONE e successiva MODIFICA o CANCELLAZIONE di un record.

  • A parte il fatto che non l'hai detto, a xhe serve pubblicare quel codice se devi fare altro?

    Per “selezionare” intendi ricercare secondo criteri?

    Quali criteri?

    Del linguaggio SQL conosci la SELECT, la UODATE, la DELETE?

  • Caro Oregon deponi la tua ‘vis polemica’, del tutto inappropriata. 

    Ho inserito quel codice per dire come avevo provato a risolvere il tema dell'INSERIMENTO di un nuovo record tramite maschera e codice.

    Orbene: potete suggerirmi qualcosa di analogo per far si che il mio utente, perfino più sprovveduto di me, possa eseguire, in sequenza:

    la ricerca e selezione di uno specifico record;
    la sua successiva modifica o cancellazione.

    Si, certo che conosco SELECT, la UPDATE e DELETE, ma vorrei rendere le operazioni le più sicure possibili all'utente finale.

    Mi sono spiegato questa volta?

    Grazie

  • Non “depongo” nulla, nessuna polemica, ho solo fatto una precisazione, direi molto opportuna secondo me. Ho solo concordato con @Alex sul fatto che il codice mostrato (e non spiegato) era comunque OT rispetto alla richiesta.

    E ti ho indicato le operazioni da tenere in considerazione.

    Per il resto, la tua richiesta non è chiara, mi dispiace. “Operazioni più sicure”, ovvero? 

  • Come nell'inserimento di un nuovo record cerco di evitare che l'utente entri in contatto diretto con la tabella vorrei un vostro consiglio su come operare per le operazioni di modifica e cancellazione di un record.

    Provo a spiegarmi meglio: l'utente decide di modificare un dato relativo a Mario Rossi; prima lo ricerca nel DB, poi lo seleziona, in caso apporta le eventuali correzioni/modifiche o procede alla cancellazione del record.

    Come fare questo in modo che l'utente al più ‘faccia danni’ solo su un record e non rovini tutta la tabella?

  • Faustinator:

    l'utente decide di modificare un dato relativo a Mario Rossi; prima lo ricerca nel DB, poi lo seleziona, in caso apporta le eventuali correzioni/modifiche o procede alla cancellazione del record.

    Raccontato così, mi appare una normalissima gestione dei dati per qualsiasi utente.
    Ma tu lavori direttamente sulle tabelle? Anche per gli utenti esperti, qualsiasi operazione di INPUT, MODIFICA, CANCELLAZIONE vuoi fare, devi operare sempre con le MASCHERE. Una maschera SINGOLA ti permette di vedere un record alla volta…in caso di errori/pasticci vari, hai danneggiato solo quel singolo record, tutti gli altri resteranno intatti. Voglio dire anche che non ti serve alcun codice VBA da mettere in campo.

  • Hai usato una maschera per l'input dei dati per l'inserimento? O fai con VBA?

    Fai qualcosa di simile per la ricerca chiedendo cognome e nome e dai la SELECT con la WHERE.

    Presenti i dati trovati e li mostri. Quando l'utente li avrà modificati con un tasto esegui la UPDATE con la WHERE     

    Oppure se vuole cancellarli con un altro tasto esegui la DELETE con la WHERE

    Come ti avevi “riassunto” nella risposta precedente. 

  • Oregon: per l'INSERIMENTO di un nuovo record ho usato una maschera con le caselle di testo dove l'utente va a per scrivere i campI: Nominativo, mail, date ecc. e poi, con plsInsNominativo_Click() il codice che ho descritto nel primo post  ‘deposita’ i dati dalla maschera alla tabella, 
    Non so se questa modalità sia la migliore ma funziona e per ora mi accontento.

    Allora se comprendo il tuo consiglio potrei usare la stessa machera (o una semplificata, dato che la ricerca è sul solo nominativo) ma da lì… non so come eseguire la select… con il WHERE…

    Ossia che da lì in poi sono un attimo impantanato…

  • Ma la 

    strInsert = "INSERT INTO ...

    l'hai scritta tu, no?

  • Sì, quella mi risulta comprensibile (l'ho copiata da qualche forum e riadattata al mio caso).

  • Adesso la richiesta mi è più chiara.

    Tu vuoi del codice completo per la ricerca, modifica e cancellazione in VBA da copiare e incollare.

    Non è questo lo scopo del forum.

    Questo è quanto puoi cominciare a studiare

    https://www.secoda.co/learn/mastering-sql-how-to-use-select-insert-update-and-delete-commands

  • Per ora ho ‘autoappreso’ in questo modo, molto artigianale, anche grazie a vostri contributi. Comunque forse qualche altro potrà darmi suggerimenti validi. 

  • A noi poco importa se questo sia il tuo metodo di apprendimento piu funzionale, sei libero di usare quello che più ti dà soddisfazione… ma non in questo forum, noi diamo indicazioni suggerimenti non “codice pronto” se l'OP non ha un minimo di competenza, deve essere un confronto tecnico non un copia/incolla.

    Il tuo codice ad esempio non è intelligente, era molto meglio predisporre la maschera al fine di essere aperta in modalità Addnew/Edit/Delete ed usare un Recordet specifico magari con transazione… quello che fai tu, hai detto giusto funziona ma non va bene.

Devi accedere o registrarti per scrivere nel forum
16 risposte