Editare un recordset su una maschera richiamata

di il
19 risposte

Editare un recordset su una maschera richiamata

Ciao a tutti.

Sono riuscito a richiamare una maschera divisa passandogli un filtro dalla maschera chiamante:
DoCmd.OpenForm "Ricerca Master Sequence", acNormal, , "SEQUENCE like '*" & Me.TestoRicercaMasterSequence & "*'", acFormEdit, acWindowNormal
Nella maschera divisa richiamata, imposto una variabile di modulo e clono il recordset:
Private rs As DAO.Recordset
Set rs = Me.RecordsetClone
Il mio problema è che non riesco a modificare alcun valore, nè nelle caselle di testo in alto, nè tantomento sul datasheet in basso.
Come posso risolvere?

Grazie.

19 Risposte

  • Re: Editare un recordset su una maschera richiamata

    Per che motivo accedi al RecordsetClone...?
    Ti ricordo che hai aperto la Maschera in modalità EDIT... mi pare un poco strano... o forse non capisco bene.
  • Re: Editare un recordset su una maschera richiamata

    @Alex ha scritto:


    Per che motivo accedi al RecordsetClone...?
    Ti ricordo che hai aperto la Maschera in modalità EDIT... mi pare un poco strano... o forse non capisco bene.
    Perchè ho scopiazzato qualcosa da internet.
    Come dovrei fare?
  • Re: Editare un recordset su una maschera richiamata

    rinh0wrz ha scritto:


    Nella maschera divisa richiamata, imposto una variabile di modulo e clono il recordset:
    Io non capisco a quale evento è associato il secondo codice.
    Poi crei solo il RecordsetClone, ma non ci mostri altro…
    Cosa devi fare?
    Come si chiama anche la maschera chiamante (giusto per completezza di (mie) idee)?
  • Re: Editare un recordset su una maschera richiamata

    Scusate, ma non essendo pratico di codice VBA, mi sono affidato a quello che sono riuscito a trovare su internet.
    Fatta questa premessa, nella Form_Avvio è presente la seguente chiamata alla Form_Ricerca Master Sequence
    DoCmd.OpenForm "Ricerca Master Sequence", acNormal, , "SEQUENCE like '*" & Me.TestoRicercaMasterSequence & "*'", acFormEdit, acWindowNormal
    
    Nella Form_Ricerca Master Sequence oltre ad altro codice che gestisce i pulsanti e che non credo c'entri nulla su questa problematica c'è:
    Option Compare Database
    
    Option Explicit
    
    Private rs As DAO.Recordset
    Private Inizio As Boolean
    
    Private Sub Form_Load()
    
    Dim i As Integer
    
      Inizio = True
      Set rs = Me.RecordsetClone
      If rs.EOF Then
        MsgBox "Nessuna corrispondenza trovata", vbCritical
        rs.Close
        Set rs = Nothing
        DoCmd.Close
        Exit Sub
      Else
        DoCmd.Maximize
        rs.MoveFirst
        Do Until rs.EOF
          For i = 1 To rs.Fields.Count - 1
            Me.Controls(rs.Fields(i).Name).ColumnWidth = -2
          Next i
          rs.MoveNext
        Loop
      End If
    
    End Sub
    Una volta aperta la maschera, oltre a mostrare i record eventualmente trovati, vorrei avere la possibilità di editare (oltre che inserire o cancellare) i record presenti nel set di dati.
    Se avete bisogno di altre info chiedete pure.
    Grazie.
  • Re: Editare un recordset su una maschera richiamata

    Questo Codice, io spero tu lo abbia compreso... non fa NULLA se non dirti se il Filtro passato corrisponde a qualche Records... quindi se la maschera è vuota o meno.

    Poi si comprende benissimo, per chi ha un minimo di esperienza, che è dedicato ad una Maschera in modalità DataSheetView(Foglio dati)... è il tuo caso...?

    Quindi se la MAschera non risulta editabile... il problema è l'Origine record... hai verificato sia editabile... hai aperto la visualizzazione dati da QBE e verificato sia Editabile...?

    Detto questo, le premesse del Copiare il Codice sono quelle di capirlo, se lo Copi alla cieca e lo riproponi nel Forum... non è proprio bellissimo...
  • Re: Editare un recordset su una maschera richiamata

    @Alex ha scritto:


    Questo Codice, io spero tu lo abbia compreso... non fa NULLA se non dirte se il Filtro passato corrisponde a qualche Records...
    Poi si comprende benissimo, per chi ha un minimo di esperienza, che è dedicato ad una Maschera in modalità DataSheetView... è il tuo caso...?

    Quindi se la MAschera non risulta editabile... il problema è l'Origine record... hai verificato sia editabile... hai aperto la visualizzazione dati da QBE e verificato sia Editabile...?

    Detto questo, le premesse del Copiare il Codice sono quelle di capirlo, se lo Copi alla cieca e lo riproponi nel Forum... non è proprio bellissimo...
    Si è il mio caso, ho una maschera divisa (fatta con l'autocomposizione sulla query), in cui sopra ho le caselle di testo che contengono i singoli campi di ogni record selezionato, mentre sotto c'è il datasheet con l'insieme dei record trovati.
    Effettivamente non ho capito nemmeno io perchè clonare il recordset, ma forse ho pensato che fosse un passaggio necessario per lavorare con i singoli record ottenuti, dato che nella Form_Avvio io eseguo solo il comando che apre la seconda maschera, non dichiaro alcun recordset.
    Cosa intendi per "visualizzazione dati da QBE"?
  • Re: Editare un recordset su una maschera richiamata

    rinh0wrz ha scritto:


    @Alex ha scritto:


    Questo Codice, io spero tu lo abbia compreso... non fa NULLA se non dirte se il Filtro passato corrisponde a qualche Records...
    Poi si comprende benissimo, per chi ha un minimo di esperienza, che è dedicato ad una Maschera in modalità DataSheetView... è il tuo caso...?

    Quindi se la MAschera non risulta editabile... il problema è l'Origine record... hai verificato sia editabile... hai aperto la visualizzazione dati da QBE e verificato sia Editabile...?

    Detto questo, le premesse del Copiare il Codice sono quelle di capirlo, se lo Copi alla cieca e lo riproponi nel Forum... non è proprio bellissimo...
    Si è il mio caso, ho una maschera divisa (fatta con l'autocomposizione sulla query), in cui sopra ho le caselle di testo che contengono i singoli campi di ogni record selezionato, mentre sotto c'è il datasheet con l'insieme dei record trovati.
    Effettivamente non ho capito nemmeno io perchè clonare il recordset, ma forse ho pensato che fosse un passaggio necessario per lavorare con i singoli record ottenuti, dato che nella Form_Avvio io eseguo solo il comando che apre la seconda maschera, non dichiaro alcun recordset.
    Cosa intendi per "visualizzazione dati da QBE"?
    Sto pensando...potrei risolvere utilizzando un recordset sulla Form_Avvio, ma poi come faccio a replicare la docmd.openform?
  • Re: Editare un recordset su una maschera richiamata

    Scusa ma prima di perseverare nell'errore... non fai prima a spiegare cosa devi fare...?
    Insomma perchè vuoi perforza usare un Recordset se nemmeno sai a cosa serve...? Solo perchè lo hai visto su Internet...?
  • Re: Editare un recordset su una maschera richiamata

    @Alex ha scritto:


    Scusa ma prima di perseverare nell'errore... non fai prima a spiegare cosa devi fare...?
    Insomma perchè vuoi perforza usare un Recordset se nemmeno sai a cosa serve...? Solo perchè lo hai visto su Internet...?
    Allora, premessa, ho fatto sviluppo VB circa 20 anni fa, quindi non sono proprio all'asciutto, rivedendo il codice mi ricordo qualcosa.
    Vi spiego cosa mi paicerebbe realizzare.
    Da una maschera 1 che contiene una (anche) casella di testo, mi piacerebbe aprire una maschera 2 filtrata sul valore immesso nella casella di testo.
    Sulla maschera 2, che presenta i dettagli della ricerca effettuata tramite una query, oltre alla semplice visualizzazione dei risultati, pensavo di dare la possibilità di modificare/aggiungere/cancellare record.
    Per fare ciò, già vi chiesi aiuto e pensavo di aver risolto con il codice che vi ho incollato, fino a che mi sono reso conto che è tutto molto bello in visualizzazione, ma non riesco a modificare nulla.
  • Re: Editare un recordset su una maschera richiamata

    Secondo me il discorso del Recordset non centra nulla.
    Maschera2 poggia su una query. Tu affermi di non riuscire a modificare/aggiungere/cancellare. Io ipotizzo 2 casi:
    A) La Maschera2 ha le impostazioni:
    Consenti aggiunte: No
    Consenti eliminazioni: No
    Consenti modifiche: No
    B) La query è talmente "composita", ossia poggia su più tabelle, per cui non è possibile intervenire nel modo che desideri tu (ossia aggiungere, eliminare, modificare).
  • Re: Editare un recordset su una maschera richiamata

    OsvaldoLaviosa ha scritto:


    Secondo me il discorso del Recordset non centra nulla.
    Maschera2 poggia su una query. Tu affermi di non riuscire a modificare/aggiungere/cancellare. Io ipotizzo 2 casi:
    A) La Maschera2 ha le impostazioni:
    Consenti aggiunte: No
    Consenti eliminazioni: No
    Consenti modifiche: No
    B) La query è talmente "composita", ossia poggia su più tabelle, per cui non è possibile intervenire nel modo che desideri tu (ossia aggiungere, eliminare, modificare).
    Allora, per il punto A ho verificato, e sono tutte proprietà impostate su Si
    La query è la seguente, mette in join diverse tabelle:
    SELECT s.ID_SEQUENCE, u.USER, l.LAYER, p.PROGETTO, s.PERCORSO_DS, s.SEQUENCE, pe.PERIODICITA, s.ORA, s.LOOP
    FROM SEQUENCES AS s, PROGETTI AS p, PERIODICITA AS pe, USERS AS u, LAYERS AS l
    WHERE (((p.ID_PROGETTO)=s.ID_PROGETTO) And ((s.ID_PERIODICITA)=pe.ID_PERIODICITA) And ((s.ID_USER)=u.ID_USER) And ((s.ID_LAYER)=l.ID_LAYER))
    ORDER BY UCASE(p.PROGETTO), UCASE(s.PERCORSO_DS), UCASE(s.SEQUENCE), s.ORA;
    
  • Re: Editare un recordset su una maschera richiamata

    rinh0wrz ha scritto:


    La query è la seguente, mette in join diverse tabelle
    Le query, in generale, non sono fatte per essere modificate. Puoi modificare solo i dati provenienti da una sola tabella, massimo 2-3 (e non su tutti i campi), poi diventa impossibile.
  • Re: Editare un recordset su una maschera richiamata

    OsvaldoLaviosa ha scritto:


    rinh0wrz ha scritto:


    La query è la seguente, mette in join diverse tabelle
    Le query, in generale, non sono fatte per essere modificate. Puoi modificare solo i dati provenienti da una sola tabella, massimo 2-3 (e non su tutti i campi), poi diventa impossibile.
    ok, allora è tutto spiegato.
    Grazie mille! Dovrò inventarmi un'altra strada.
  • Re: Editare un recordset su una maschera richiamata

    rinh0wrz ha scritto:


    OsvaldoLaviosa ha scritto:


    rinh0wrz ha scritto:


    La query è la seguente, mette in join diverse tabelle
    Le query, in generale, non sono fatte per essere modificate. Puoi modificare solo i dati provenienti da una sola tabella, massimo 2-3 (e non su tutti i campi), poi diventa impossibile.
    ok, allora è tutto spiegato.
    Grazie mille! Dovrò inventarmi un'altra strada.
    Queste cose che ho sentito mi fanno rabbrividire veramente tantissimo... Osvaldo, quando smetterai di scrivere delle cavolate così grandi sarà sempre tardi..., come vedi poi chi ne sa meno di te, ci crede pure e ci fa affidamento...!

    Le queries sono fatte apposta per accedere ai dati ANCHE in modifica se espongono un Recordset Aggiornabile, e per farlo devono essere costruite in modo adeguato.

    rinh0wrz ha scritto:


    @Alex ha scritto:


    Scusa ma prima di perseverare nell'errore... non fai prima a spiegare cosa devi fare...?
    Insomma perchè vuoi perforza usare un Recordset se nemmeno sai a cosa serve...? Solo perchè lo hai visto su Internet...?
    Allora, premessa, ho fatto sviluppo VB circa 20 anni fa, quindi non sono proprio all'asciutto, rivedendo il codice mi ricordo qualcosa.
    Vi spiego cosa mi paicerebbe realizzare.
    Da una maschera 1 che contiene una (anche) casella di testo, mi piacerebbe aprire una maschera 2 filtrata sul valore immesso nella casella di testo.
    Sulla maschera 2, che presenta i dettagli della ricerca effettuata tramite una query, oltre alla semplice visualizzazione dei risultati, pensavo di dare la possibilità di modificare/aggiungere/cancellare record.
    Per fare ciò, già vi chiesi aiuto e pensavo di aver risolto con il codice che vi ho incollato, fino a che mi sono reso conto che è tutto molto bello in visualizzazione, ma non riesco a modificare nulla.
    Quello che dici si fa con 1 riga di codice, ovvero il filtro passato alla Chiamata OpenForm... la 2° Maschera aperta in Edit consente Edit ed Aggiunte, questo senza alcun codice di accesso ai record nè l'uso di Recordset.
    Se la Query è fatta su Tabelle non relazionate su Pk e Fk... sarà sempre in ReadOnly e non potrai Editare nè aggiungere, ma devi conoscere anche SQL...

    Quindi la premessa è CONOSCERE Access, che non è VB6, e va usato come richiede, SQL ed anche il VBA, io però credo tu non abbia tutte le idee chiare su questo, motivo per cui mi fermerei...
Devi accedere o registrarti per scrivere nel forum
19 risposte