Casella combinata insufficiente

di il
9 risposte

Casella combinata insufficiente

Potevo titolare il post diversamente: Scegliere o cambiare casella combinata.
Ho un database dove raccolgo "Titoli di brani musicali" ritrovabili su CD, Libri di partiture, LP, MC...
CD, Libri, LP, MC, DVD sono chiamati Supporti. Si consideri che le tabelle Supporti e Titoli sono in relazione molti-a-molti attraverso la tabella di congiunzione Supporti-Titoli.
La tabella Titoli ha i seguenti campi, con relative spiegazioni:

IDTitolo
Titolo
Autore1
Forma
Strumenti musicali
n esterno
Tonalità
L Op
N Op
N interno Op

Per IDTitolo e Titolo, non penso ci siano problemi di interpretazione. Per tutti gli altri campi, come si può intuire, si fa riferimento alle tipiche denominazioni di brani di musica classica. Spiego per chi non conoscesse la prassi di catalogazione. Ad es. quando si trova scritto su un CD
Antonio Vivaldi: Concerto per violino, violoncello e orchestra in sib maggiore RV 547
significa
Autore1: Vivaldi Antonio
Forma: Concerto
Strumenti musicali: violino, violoncello, orchestra
n esterno: in questo caso posso lasciare 0, ma se fosse il 5° concerto per violino, violoncello e orchestra di Vivaldi, scriverei 5
Tonalità: sib maggiore
Lettera Op: RV
Numero Op: 547
Numero interno Op: talvolta esiste un ulteriore sottodistinzione di Numero Op.

Nella tabella/maschera Supporti-Titoli ho necessità di selezionare un Titolo nel campo Supporti-Titoli.IDTitolo con casella combinata. La casella combinata è costruita su una query che seleziona i campi secondo questo ordine:
IDTitolo / Titolo / Autore1 / Forma / ecc... con Ordinamento crescente su Titolo, poi Autore1, poi su tutti gli altri a seguire.
La casella combinata nasconde il primo campo IDTitolo e mostra il campo Titolo.

L'intero database raccoglie Titoli di vario genere, anche musica pop. La musica pop è molto più facile da catalogare, perchè attraverso il Titolo (ad es. Questo piccolo grande amore) si arriva più facilmente a capire di cosa si tratta. Quindi nella casella combinata, quando digito le prime lettere di quel titolo, subito mi balza all'occhio quello lì.

Quando devo selezionare un brano di musica classica, il primo campo è "relativamente vuoto" o insignificante e a quel punto, diventa più importante far leva su
Autore1 e poi su Forma, poi ecc...
oppure su
Autore1, poi su Lettera Op, poi su Numero Op
Con l'attuale impostazione di casella combinata, per la musica classica sono costretto a scorrere il cursore e faticosamente cercare il relativo IDTitolo corrispondente.

Come posso risolvere questo problema?
È vero che potrei rappresentare la maschera Supporti-Titoli sfruttando la struttura a schede che mi mostrerebbe l'ordinamento Titoli in vari modi? Se sì cosa devo fare? Non ho mai usato questa struttura.

9 Risposte

  • Re: Casella combinata insufficiente

    Forse con la risposta al precedente POST potresti risolvere anche questo....?
  • Re: Casella combinata insufficiente

    Aiuto, non riesco a seguirti. Perchè?
    Forse vuoi dire che dovrei costruire più caselle combinate? A cascata?
    Temo che l'altro post non abbia la stessa pertinenza di questo. L'attuale selezione IDTitolo partendo dal campo Titolo mi sta bene così come è. Io digito le prime lettere del Titolo, verifico se stanno bene tutti gli altri campi e poi OK. Mi sta bene che ho soltanto un campo-box riservato alla selezione IDTitolo, non mi occorrono altri Text Box bloccati.
    Volendo esagerare, potrei creare un'altra maschera/sottomaschera Supporti2/Supporti-Titoli2 e alla casella combinata attribuire un'altra query ordinata diversamente. Io scriverei dentro le prime lettere del cognome Autore e poi verificherei il relativo Titolo da scegliere seguendo la sua logica di ordinamento.
    Per questo motivo, mi immagino una situazione più da struttura a schede, dove, nella stessa sottomaschera, posso scegliere di cambiare scheda per vedere cambiato l'ordinamento della casella combinata. Ho provato a dare un'occhiata all'argomento, ho fatto qualche rude tentativo di prova, ma con altri dati, e pare che funziona. Che ne dici?
  • Re: Casella combinata insufficiente

    Il terribile Alex... forse ha capito male...

    Scherzi a parte, credo di aver mal interpretato la domanda, ci riprovo ma ancora ho dubbi... che però cerco di chiarirmi facendoti alcune domande...!

    La catalogazione dei Brani vede, o dovrebbe vedere, la Tabella Titoli come tabella di dettaglio di:
    Autori(1 autore Molti Brani)
    Forma(1 forma molti brani... ma forse un brano molte forme ... ignoranza mia)
    Strumenti Musicali(Molti Strumenti - Molti Brani, quì non ci si scappa... è un Molti-Molti e non mi torna nella tua esposizione)
    Ecc... per non dire altre sciocchezze... ma credo che il concetto sia chiaro.

    Ora così facendo Avresti nella form(Titoli) una Combo per inserire l'Autore dall'anagrafica Autori, una Combo per inserire la Forma dalla tabella Forme se in relazione 1-M, ed una Subform per gli strumenti Musicali all'interno della quale una combo per definire lo Strumento dalla Tabella Strumenti...

    Ora detto questo... che mi pare possa complicarti la vita di base... non riesco più a trovare riscontri con la domanda, in quanto con questa struttura non credo possa essere più fattibile la richiesta iniziale...!
  • Re: Casella combinata insufficiente

    @Alex ha scritto:


    La catalogazione dei Brani vede, o dovrebbe vedere, la Tabella Titoli come tabella di dettaglio di:
    Autori(1 autore Molti Brani)
    Forma(1 forma molti brani... ma forse un brano molte forme ... ignoranza mia)
    Strumenti Musicali(Molti Strumenti - Molti Brani, quì non ci si scappa... è un Molti-Molti e non mi torna nella tua esposizione)
    Ecc... per non dire altre sciocchezze... ma credo che il concetto sia chiaro.

    Ora così facendo Avresti nella form(Titoli) una Combo per inserire l'Autore dall'anagrafica Autori, una Combo per inserire la Forma dalla tabella Forme se in relazione 1-M, ed una Subform per gli strumenti Musicali all'interno della quale una combo per definire lo Strumento dalla Tabella Strumenti...
    Ho capito quello che vuoi dire, ma dormici tranquillo.
    Ho un'altra tabella che stabilisce il molti-a-molti fra Autori e Titoli.
    Forma va bene così anche se è vero il molti di cui parli.
    Strumenti musicali, idem, lasciamo perdere ancora di più, questo campo ha un suo "format" mentale mio. Non è importante spiegare anche questo: se vuoi lo faccio, ma renderebbe il discorso lunghissimo e fuori tema. Il testo "violino, violoncello, orchestra" prendilo così come lo vedi e basta.
    La tabella Titoli ha una sua linearità che devi prendere così come te la racconto io. Io ho stabilito che un Titolo, qualora avesse molti Autori, viene scelto uno come primario che svolge il ruolo di Autore1 per rendere coerente la tabella Titoli sia con la musica pop, jazz, ecc... (più flessibile alla possibilità di avere molti Autori) e quella classica che, invece, parte proprio con il suo Autore primario nel dettare l'inizio di un Titolo.
    "Yesterday" di Lennon John, McCartney Paul, viene archiviato in un'altra tabella Autori-Titoli che stabilisce la completa coerenza, ma nella tabella Titoli, nel campo Titolo trovi scritto "Yesterday", in Autore1 convenientemente "Lennon John", solamente perchè potrebbe esistere un altro "Yesterday" di altro/i Autore/i con melodia diversa. Sia chiaro che non è ammesso includere in Titoli, Titolo: "Yesterday", Autore1: "McCartney Paul", in quanto genererebbe un inutile duplicato. Questo fatto lo so io, lo controllo io da altre parti nel database ed evito che ciò accada. In sostanza IDTitolo identifica esattamente UN SOLO brano musicale.
    Ritornando alla musica classica, pensa che esistono appositi studi per rendere un Titolo di musica classica, il più uniforme possibile, in quanto se dici:
    Vivaldi Antonio: Concerto per violino, violoncello e orchestra in sib maggiore RV 547
    Concerto per violino, violoncello e orchestra in sib maggiore di Antonio Vivaldi RV 547
    Vivaldi Antonio RV 547 ---->che già si sà che è riferito a quel concerto
    in sostanza dici sempre la stessa cosa
    se non avessi tutti quei campi, potrei scrivere, sfruttando le regole di titolazione uniforme, tutto nel campo Titolo così:
    "Vivaldi Antonio Concerto per violino, violoncello e orchestra in sib maggiore RV 547"
    con il rischio che qualche volta dimenticherei di mettere una "e" di congiunzione nel testo, oppure "in"...

    Il discorso si è davvero molto evoluto, mi piacerebbe analizzare con te, tutto il mio database, ma pensi potrebbe essere utile per il forum? Ti andrebbe davvero di dedicare tempo soltanto per me?
    Ritorno sulla mia domanda semplificativa: che ne pensi della struttura a schede?
  • Re: Casella combinata insufficiente

    OsvaldoLaviosa ha scritto:


    Ho capito quello che vuoi dire, ma dormici tranquillo.
    Ecco bene... mi preoccupavo.

    Non essendo addentro alle questioni che mi hai esposto, non solo non ci ho capito molto, ma non riesco a trovarci la logica... credo però sia normale così.

    OsvaldoLaviosa ha scritto:


    Il discorso si è davvero molto evoluto, mi piacerebbe analizzare con te, tutto il mio database, ma pensi potrebbe essere utile per il forum?
    Ti andrebbe davvero di dedicare tempo soltanto per me?
    Le questioni Tecniche in un forum sono sempre utili, tuttavia(bonismo a parte che non mi appartiene) non mi piace l'idea dell'esclusivo, diverrebbe vincolante per me e per i partecipanti, e non sono certo che un forum possa essere la sede adatta.
    Se sono in grado di rispondere lo faccio volentieri.

    OsvaldoLaviosa ha scritto:


    Ritorno sulla mia domanda semplificativa: che ne pensi della struttura a schede?
    La struttura a schede offre effettivamente diverse possibilità di gestione, a me non piace esteticamente e la preferisco in modalità Stile=Nessuna creando Pulsanti ad Hoc per il cambio scheda...
    Questa modalità però è una scocciatura in fase di sviluppo, quindi sviluppo in modalità Pulsanti, poi alla fine la metto in modalità Nessuno... se ti capita di lavorarci capirai SUBITO perchè...!

    Resta però la mia poca comprensione dell'insieme per essere assertivo in modo adeguato, certo non usare le schede per inserire controlli predisposti in modo differente... è pur fattibile ma scomodo, meglio usare un pò diu VBA ad esempio per modificare il RowSource delle ComboBox in base alle esigenze.

    Questo perchè mettere(esagero ovviamente) 10 ComboBox con struttrura dati diverse in una Maschera equivale a doverle CARICARE tutte... e come ottimizzazione non è certo un bell'esempio.
    Meglio caricare i dati giusti quando hai definito la modalità, o meglio puoi definire una Modalità di DEFAULT, e degli OptionButton per modificare le varie opzioni... in base alla selezione.
    Tuttavia se non ricordo male, non hai una simpatia molto spinta per il VBA, e questo potrebbe rendere più complicato capirci, in quanto io non conosco le macro nel modo più assoluto...
  • Re: Casella combinata insufficiente

    @Alex ha scritto:


    Le questioni Tecniche in un forum sono sempre utili, tuttavia(bonismo a parte che non mi appartiene) non mi piace l'idea dell'esclusivo, diverrebbe vincolante per me e per i partecipanti, e non sono certo che un forum possa essere la sede adatta.
    Se sono in grado di rispondere lo faccio volentieri.
    Sono perfettamente d'accordo.

    @Alex ha scritto:


    non usare le schede per inserire controlli predisposti in modo differente... è pur fattibile ma scomodo, meglio usare un pò più VBA ad esempio per modificare il RowSource delle ComboBox in base alle esigenze.
    RowSource: oh sì Origine riga. Questa è buona.
    Se considerimao che l'azione macro ImpostaValore è in grado di andare a indagare anche nelle Proprietà di maschere e campi, potrei dire al clic di un pulsante di modificare Origine riga: <nome query>. La casella combinata di default poggia su una query che si chiama "InsTitolo" organizzata così:
    IDTitolo | Titolo | Autore1 | Forma | ecc... ordinata per Titolo, Autore1, ecc...
    Io ho già un'altra query "InsTitoloClassica" organizzata così:
    IDTitolo | Autore1 | Forma | Strumenti musicali | ecc... ordinata per Autore1, Lettera Op, Numero Op.
    Il primo campo è sempre IDTitolo che lavora per mantenere integra la struttura (che vado a nascondere), il secondo campo sarà quello visualizzato. Cambiando RowSource potrei digitare Cognome Nome Autore1 e scegliere più facilmente.
    Quindi, seguendo il tuo consiglio, potrei cliccare sul pulsante e far cambiare la Proprietà Origine riga della query che regola la casella combinata. Penso che si possono anche impostare opportune condizioni e il gioco è fatto. Devo solo testarlo. L'ho testato con una istruzione semplice e funziona.
    Ora, avrei varie soluzioni:
    1) Mettere 2 pulsanti "Cambia in InsTitolo" e "Cambia in InsTitoloClassica" che puntano ognuno al corrispondente riferimento query.
    2) Mettere 1 pulsante e sfruttare la sintassi VBA If...Then...Else
    3) Mettere 1 Interruttore: On=InsTitolo, Off=InsTitoloClassica
    4) Finchè le opzioni sono 2, i punti precedenti vanno tutti bene. Ma immaginando di voler commutare anche in eventuali altre Query3, Query4...come potrei impostare il codice?
    Tu indicami lo stesso la tua soluzione (anche con codice), poi ci penso io a interpretarlo.
  • Re: Casella combinata insufficiente

    Ci sono riuscito parzialmente. Questi i miei steps:

    1) Ho rinominato le query "InsTitoloStandard" (ex InsTitolo) e "InsTitoloClassica" con le caratteristiche esposte nel precedente post.
    2) InsTitoloStandard è Origine riga di default di:
    Forms![nomeMaschera principale]![nomeSottomaschera]![IDtitolo]
    3) Ho costruito una macro con le seguenti Condizioni e Azioni:
    Rigo1. Condizione: [Maschere]![nomeMaschera principale]![nomeSottomaschera]![IDTitolo].[RowSource]="InsTitoloStandard"
    Azione: ImpostaValore
    Elemento: [Maschere]![nomeMaschera principale]![nomeSottomaschera]![IDTitolo].[RowSource]
    Espressione: "InsTitoloClassica"
    Rigo2. Condizione: idem rigo 1(...)
    Azione. ArrestaMacro
    Rigo3. Condizione: [Maschere]![nomeMaschera principale]![nomeSottomaschera]![IDTitolo].[RowSource]="InsTitoloClassica"
    Azione: ImpostaValore
    Elemento: [Maschere]![nomeMaschera principale]![nomeSottomaschera]![IDTitolo].[RowSource]
    Espressione: "InsTitoloStandard"
    4) Salvo macro con nome "CambiaInsTitolo"
    5) In visualizzazione struttura maschera principale, aggiungo un pulsante di comando e associo al Clic la macro CambiaInsTitolo

    Che cosa accade. Io apro la maschera principale e cliccando dentro la casella combinata di Sottomaschera!IDTitolo trovo ovviamente la query di default InsTitoloStandard. Se clicco sul pulsante CambiaInsTitolo, non vedo cambiamento nella casella combinata, ma se clicco dentro mi si apre la query InsTitoloClassica. Posso digitare un Cognome Autore e scegliere di conseguenza, ma al rilascio del clic, rimane esposto il campo Titolo. Se riclicco sul pulsante CambiaInsTitolo ritorna tutto come prima.
    Diciamo che ho ottenuto un buon risultato.
    Ma come posso fare per ottenere che al clic CambiaInsTitolo io veda contemporaneamente cambiare anche la visualizzazione del campo IDTitolo, da Titolo in Autore1?
  • Re: Casella combinata insufficiente

    Se non ho capito male... ma non sono certo... devi fare in modo che le 2 Queries abbiano il Campo Associato(quello definito nelle proprietà) allo stesso posto nella query, e se hai delle dimensioni di colonne a ZERO devi rispettare anche questo...

    In sostanza le query che usi per popolare la Combo devono essere strutturate uguali, cosa significa UGUALI:
    1) Stesso Numero di Colonne
    2) Stessa Dimensione colonne, quindi dovresti rendere AFFINI i campi...
    Se la larghezza della colonna 2=1,5 non puoi avere nella 2° Query un campo Testo...
    3) Campo ID o Associato nello stesso posto.

    IN questo modo la sostituzione del ROWSOURCE produce la stessa visualizzazione ed assegnazione.
  • Re: Casella combinata insufficiente

    Questo aspetto lo avevo già preso in considerazione. C'era da aspettarselo in quanto tutte le proprietà (nella maschera) relative alle colonne restano invariate.

    OsvaldoLaviosa ha scritto:


    IDTitolo | Titolo | Autore1 | Forma | ecc... ordinata per Titolo, Autore1, ecc...
    IDTitolo | Autore1 | Forma | Strumenti musicali | ecc... ordinata per Autore1, Lettera Op, Numero Op
    Queste sono le disposizioni campi delle due query. Come puoi notare, il primo campo è sempre IDTitolo, cambia il secondo (quella della visualizzazione finale) e entrambe le caselle combinate hanno congrue larghezze colonne.
    Se è troppo complicato, non importa. A me l'attuale soluzione, mi dà già risultati soddisfacenti. In fondo, mi importa di meno cosa si vede nella maschera/sottomaschera in fase di input. Era più importante facilitare tale compito.
Devi accedere o registrarti per scrivere nel forum
9 risposte