Modifica origine record da VBA

di il
20 risposte

20 Risposte - Pagina 2

  • Re: Modifica origine record da VBA

    Gaboman87 ha scritto:


    Ogni scheda fa capo a una query con all'interno campi della tabella attori e un campo della tabella film.
    Inserendo nel criterio della Query ad esempio "Robert De Niro", riesco a vedere solo i film dove ha recitato.
    Questa è una cosa che funziona: OK.

    Gaboman87 ha scritto:


    Quindi io aggiungo un nuovo attore alla tabella "attori",
    Questa è un'altra operazione che fai. Non ha nulla di congruente con la frase precedente. La parola "Quindi" ci depista.

    Gaboman87 ha scritto:


    e il codice associato alla maschera fa si che in automatico, con evento impostato "dopo inserimento", si copi in automatico una query (da una query di default), vada a modificare il nome della nuova query (per comodità) e il criterio ricavandoli con la funzionalità DLast dall'ultimo record attori che ho inserito.
    Ovvero: inserisco l'attore Matt Damon, duplico la query default che a sua volta si chiamerà Matt Damon, che avrá un criterio Matt Damon.
    Poi viene duplicata una maschera default, con il layout che ho progettato, e va a chiamarsi in automatico Matt Damon.
    L'ultima cosa che resta e far si che a questa tabella default venga modificato il recordsource in Matt Damon.
    In questo modo, al posto di dover inserire e modificare manualmente ogni singola scheda, mi basterà digitare il nome attore nella tabella.
    Qua concordo con Gianni55. Non si capisce nulla. Devi scindere ogni singola operazione e lavorare passo passo.

    Un nuovo Attore è un nuovo record da aggiungere nella tabella...come si chiama? Attori? Artisti? E questa è un'operazione da farsi. Poi ripeti tutto da capo. Il discorso di duplicare query ecc...è incomprensibile, farraginoso, inutile, sbagliato.
  • Re: Modifica origine record da VBA

    Gianni55 ha scritto:


    Mah questa riga di codice l'hai provata?
    Me.Form.RecordSource = "LaTuaQuery"
    Ho provato ma non funziona.
    Comunque vi ringrazio e ribadisco che sono proprio alle prime armi e sto imparando a usare access con dei tutorial online. Quindi sicuramente farò degli errori con concetti che voi riterrete comprensibilmente banali. Accetto di buon grado le spiegazioni.

    Cosa intendete quando mi dite che non si rinominano né duplicano le query?
    Io cerco di spiegare passo passo ciò che faccio.
    Il database che sto creando permette a ogni utente di creare una libreria, il quale può selezionare dei film e aggiungerli.
    Fino a qua tutto bene. Io vorrei poi fare delle schede riferite a ogni attore, che raccolgano oltre ai loro dati, tutti i film in cui hanno recitato.
    Quindi l'utente può cliccare sul nome di un attore e gli appare una maschera impostata come scheda attore.
    Quindi ho due tabelle: Attori e Film.
    Nella tabella film c'é il campo "titolo" come chiave primaria e il campo "Cast", in relazione con il campo "Nome" della tabella "Attori".
    Per creare una scheda attore io ho impostato una query che raccoglie i campi "Titolo" della tabella "film", "Nome" della tabella attori e altri campi della tabella attori. Ho inserito come criterio il nome di un attore, ad esempio Robert De Niro, e quindi io visualizzo soltanto i titoli di film in cui ha recitato Robert De Niro.
    Poi ho creato una maschera relativa a questa query e l'ho curata graficamente.

    Quindi ho una scheda attore dell'attore Robert De Niro, con una foto del campo "foto" nel punto giusto, del colore che voglio, ecc...

    Adesso voglio aggiungere supponiamo Mel Gibson e ottenere la stessa cosa.
    Però devo inserire tantissimi attori e in più vorrei dare all'utente la possibilità di inserire un eventuale attore mancante nel database, automatizzando la creazione della sua scheda attore.

    Chiaramente voi riuscireste a ottenere tutto ciò in modo più corretto, giusto e ordinato.
    A livello di mero risultato, il codice che ho inserito funziona quasi fino alla fine.
    E' chiaro che, con massima umiltà e non essendo un idiota, sono pronto a rimettermi in gioco da zero e ad accettare un metodo migliore.

    Io ho utilizzato la prima query creata, chiamata "query default" e la maschera di questa query, chiamata "schedadefault".
    Il codice funziona DOPO l'inserimento di un attore nella tabella "Attori".
    Quindi, io amministratore o un utente, inseriamo il nome Mel Gibson.
    Il codice, postato nel mio primo post, duplica "query default" (mi spiegherete perché ciò é sbagliato, non mi sto incaponendo ma solo spiegando) e rinomina il duplicato "Mel Gibson". Questo mi serve solo per fare ordine e non ha in effetti una grande utilità.
    Comunque, utilizzando la funzione DLast, nomina questa query con il nome dell'ultimo attore inserito.
    Ciò mi serve perché qualsiasi nome io inserisca successivamente seguirá la stessa regola.
    Sempre in questo modo, il codice modifica il criterio della "query default" da "Robert De Niro" a "Mel Gibson".
    Ho quindi una query che mi restituirá soltanto i film in cui ha recitato Mel Gibson. Naturalmente dopo che avrò selezionato dalla casella combinata nella tabella "Film", Mel Gibson mei film in cui ha recitato.

    Il codice poi duplica la "Scheda default", in modo da conservare il layout grafico.
    La rinomina Mel Gibson (Anche in questo caso non c'é una grande utilità).
    A questo punto, se riuscissi a variare il record source di questa maschera, ne avrei una identica alla "Scheda default", ma con i dati di Mel Gibson.
    Però anche la record source dovrebbe variare a seconda dell'ultimo record inserito nel campo "nome" della tabella "Attori".

    Mi rendo disponibile a condividere con voi anche il database o a postare delle foto, perché credo sia molto più semplice di ciò che sembra a parole.
    Grazie ancora
  • Re: Modifica origine record da VBA

    Per me fai confusione tra VISUALIZZARE i film di Robert De Niro: qui ci sei arrivato. E INSERIRE nuovi dati: questa è tutt'altra OPERAZIONE/GESTIONE e ti consiglio di tenerla decisamente separata dalla prima.
    Per l'inserimento occorre partire innanzitutto dalla tua struttura tabelle che immagino sia così: Film molti-a-molti Attori con tabella di congiunzione Cast. Cast conterrà certamente i campi chiave esterna (FK) IDAttore e IDFilm. Per una gestione ottimale dell'input di tutta questa cosa qua io ci vedrei una maschera/sottomaschera Film/Cast là dove in sottomaschera Cast ci trovi l'ELENCO di tutti gli Attori del Film che la maschera singola in alto mostra. Ora succede che tu hai appena inserito un nuovo Film e nel Cast Attori potrebbero esserci Attori già presenti in tabella Attori, altri no. Questi ultimi ti daranno rogne. Che si fa? Si gestisce l'evento NotInList (Non in elenco) sul campo IDAttore, quindi leggi questo documento

    La tua situazione è lo Scenario 2 dove:
    A = Film
    B = Attori
    C = Cast
  • Re: Modifica origine record da VBA

    Buongiorno Gaboman87
    Da quello che mi sembra di capire la tua intenzione è di ottenere un elenco di tutti i film associati ad un attore.
    Per fare questo, per ogni attore aggiunto in tabella crei una query, che filtra l’attore, e una maschera con il nome dell’attore, con origine la stessa query.
    In più di un secolo di cinema quanti attori possiamo individuare? Migliaia? Forse decine di migliaia. Quindi alla fine ti troveresti migliaia di query e maschere. Una situazione ingestibile e non tecnica.
    Per realizzare quello che vuoi esistono strade molto più semplici, ed è quello che stanno cercando di spiegarti coloro che ti hanno risposto.
    Potresti realizzare una sola maschera con sottomaschera. Nella maschera potresti selezionare l’attore con una casella combinata e nella sottomaschera ti troveresti tutti i film a lui associati, senza fare null’altro.
    Oppure potresti inserire nell’unica query un parametro in corrispondenza del campo dell’attore e con qualche riga di codice VBA definirlo. Oppure ancora potresti creare un recordset filtrando la query sull’attore e visualizzarlo con una maschera.
    Ma se proprio insisti nella tua idea (più che comprensibile) ti consiglio di aprire una qualunque maschera con l’istruzione:
    DoCmd.OpenForm
    e di inpostarne l’origine con il comando:
    Me.Form.RecordSource = "LaTuaQuery"
    così come ti ha suggerito Gianni 55.
  • Re: Modifica origine record da VBA

    Ok Harry, hai capito perfettamente cosa intendo.
    Indubbiamente proverò a semplificarlo con i metodi da voi descritti, così da imparare correttamente.
    Parlando di com'é impostato attualmente, con il codice di Gianni riesco a modificare il RecordSource solo temporaneamente. Vedo che invece se chiudo e riapro la maschera non mi mantiene il RecordSource.
  • Re: Modifica origine record da VBA

    Comunque ce l'ho fatta aprendo la form in acDesign e utilizzando il codice che mi avete dato.
    Adesso sperimenterò con i metodi che mi avete dato in modo da apprendere vie meno inutilmente complesse.
    Grazie ancora a tutti e buona serats
Devi accedere o registrarti per scrivere nel forum
20 risposte