Selezionare tabelle in una query tramite casella combinata

di il
11 risposte

Selezionare tabelle in una query tramite casella combinata

In una tabella di sviluppo codici offerta ho una casella combinata di selezione codice con la seguente istruzione.
SELECT Listino_BT.Codice_Listino_BT, Listino_BT.Descrizione
FROM Listino_BT
ORDER BY Listino_BT.[Codice_Listino_BT], Listino_BT.[Descrizione];
Dovendo aggiornare il listino volevo aggiungere un campo codice_listino e relativa tabella e gestire con questa l'istruzione sopra riportata modificandola in modo da aprire il listino necessario.
Esempio: Listino_BT1; Listino_BT2 ... ecc. ecc.

Ringrazio tutti per l'aiuto.

11 Risposte

  • Re: Selezionare tabelle in una query tramite casella combinata

    Benvenuto nel forum.
    Io non ho capito come si chiama la tabella dove si trova la tua casella combinata.
    Poi...mi pare di capire che vorresti aggiornare i valori esistenti nella lista che appare nella casella combinata, ossia la tabella Listino_BT. Si tratta di un giochetto che dovresti implementare con le maschere (non puoi farlo con le tabelle), automatizzando qualche azione con macro o codice VBA.
    Spero di aver compreso il problema...perchè non mi è chiaro quando parli di

    Roberto75 ha scritto:


    Esempio: Listino_BT1; Listino_BT2 ... ecc. ecc.
    Potresti fornire un quadro dettagliato (nomi propri) di tutte le tue tabelle con i campi e le relazioni?
  • Re: Selezionare tabelle in una query tramite casella combinata

    Osvaldo grazie per la disponibilità,

    Io ho creato il mio DB per sviluppare offerte e successivamente ordini che sta iniziando a funzionare benino; ma mi sono reso conto che a breve dovrò aggiornare i prezzi di listino e non so come fare perché quando varierò le quotazioni in automatico mi cambierà tutti i prezzi delle offerte perdendo in questo modo lo storico.

    Dato che tutti i listini di diversi costruttori convergono in un unica tabella Listino_BT credevo che la strada più facile fosse quella di aggiungere una nuova tabella Listino_BT1 aggiornata e tramite una casella combinata sulla mia tabella offerta indicargli a quale listino fare riferimento.

    Le uniche nozioni che ho di ACCESS sono quelli contenuti nella guida APOGEO Access 2010; so usare pochissimo le MACRO e niente VBA (Tranne qualcosa di copiato ed incollato).

    Volevo mandarti una foto delle relazioni ma non ci riesco

    Spero che quanto indicato posso essere sufficiente per avere un indicazione del percorso da seguire grazie.
  • Re: Selezionare tabelle in una query tramite casella combinata

    Roberto75 ha scritto:


    Dato che tutti i listini di diversi costruttori convergono in un unica tabella Listino_BT credevo che la strada più facile fosse quella di aggiungere una nuova tabella Listino_BT1 aggiornata e tramite una casella combinata sulla mia tabella offerta indicargli a quale listino fare riferimento.
    Non devi avere tante tabelle "simili". Ti basta aggiungere un campo PeriodoListino nella tabella Listino_BT. Per selezionare un Prezzo recente, ti può convenire di ordinare la query della casella combinata, prima in base al campo PeriodoListino e poi gli altri campi.
  • Re: Selezionare tabelle in una query tramite casella combinata

    Avevo letto che occorreva inserire la validità del listino con due date da_data; a_data per gestire questa problematica ma credevo, illuso, di risolvere più facilmente in questo modo; ma effettivamente considerando un aggiornamento ogni due mesi in un solo anno già mi ritroverei 6 copie della stessa tabella!!!

    Il mio problema è che non riesco a comprendere i seguenti aspetti:
    1-Avendo lo stesso dato nel campo codice, anche se con date differenti riportate in altri campi, il DB non va in conflitto? come fa a restituirmi un risultato univoco?
    2: La mia tabella Listino_BT conta 600.000 record ad ogni aggiornamento crescerà di 600.000 record?
  • Re: Selezionare tabelle in una query tramite casella combinata

    Roberto75 ha scritto:


    Avendo lo stesso dato nel campo codice, anche se con date differenti riportate in altri campi, il DB non va in conflitto? come fa a restituirmi un risultato univoco?
    Devi scindere 2 concetti base. Una cosa è parlare del singolo Articolo "Penna rossa - Bic" che avrà un IDArticolo=25. Altra cosa è un IDArticoloListino=100 che unisce IDArticolo=25 a PeriodoListino=2010. Io vedrei le tue tabelle così:
    Articoli
    IDArticolo
    NomeArticolo

    Listini
    IDListino
    PeriodoListino

    ArticoliListini
    IDArticoloListino
    IDArticolo
    IDListino

    Relazioni:
    Articoli.IDArticolo uno-a-molti ArticoliListini.IDArticolo
    Listini.IDListino uno-a-molti ArticoliListini.IDListino

    Poi sarà il campo IDArticoloListino a popolare la tua tabella Ordini (...non hai mai detto come si chiama).
    Io ti ho dato una imbeccata molto semplificata. Per capirci meglio sarebbe opportuno che tu elencassi tutte le tue tabelle con i loro nomi propri, con tutti i nomi propri dei campi. Da lì capiamo quale direzione prendere.

    Roberto75 ha scritto:


    La mia tabella Listino_BT conta 600.000 record ad ogni aggiornamento crescerà di 600.000 record?
    Penso che questa sia una conseguenza della cattiva progettazione. La risposta precedente dovrebbe farti riflettere.
  • Re: Selezionare tabelle in una query tramite casella combinata

    Osvaldo ho riflettuto sui tuoi preziosi consigli ma le mie lacune mi annebbiano e probabilmente non mi fanno vedere ciò che ho davanti agli occhi!!

    Ti fornisco ulteriori dati e spero che siano sufficienti.

    Nel mio DB dovrei utilizzare la Famiglia sconto per fare un listino personalizzato base per ogni cliente con due tabelle

    Sconti cliente
    IDCodiceCliente
    Sconto
    Famiglia Costruttore

    Costruttori Famiglie Sconti
    IDCostruttore
    Famiglia Costruttore

    Che dovrei collegare a ex ListinoBT oggi Articoli Listini per memorizzare gli sconti base dei clienti.

    Invece è già inserito e funzionante la seconda fascia di sconti con ricariche per procacciatori di affare e margini di trattativa che è legato al protocollo delle offerte (In tutto sono circa 15 tabelle).

    In funzioni delle tue indicazioni di seguito ho riportato e sviluppato le tabelle che mi hai indicato ed ovviamente ho alcune (molte) perplessità

    Articoli
    ID Articolo (Codice prodotto costruttore)
    Descrizione
    Listino
    Unità di Misura
    Confezione
    Costruttore
    Famiglia sconto

    Listini
    IDListino (Contatore??)
    Periodo listino DaData
    Periodo listino AData

    Articoli Listini
    IDArticolo Listino
    ID Articolo
    ID Listino

    Elenco perplessità:
    1-Nella tabella articoli inserisco i circa 20 listini dei rispettivi costruttori e ID Articolo è il codice prodotto del costruttore.
    2-Il campo ID Listino deve essere uno per ogni costruttore? come si riempie(Tipo di dato contatore?) il periodo listino sono 20 listini per due date sono solo 40 campi che devo inserire manualmente
    3-ID Articolo Listino che tipo di dato è? si inserisce manualmente QUESTA TABELLA NON RIESCO A COMPRENDERE COME DEVE FUNZIONARE
    4-Nello sviluppo delle offerte utilizzo il codice prodotto costruttore "ID Articolo" non posso utilizzare un codice differente.

    Rimango in attesa di tue e ringrazio per la disponibilità
  • Re: Selezionare tabelle in una query tramite casella combinata

    roberto75 ha scritto:


    Nel mio DB dovrei utilizzare la Famiglia sconto per fare un listino personalizzato base per ogni cliente con due tabelle
    Questo aspetto, per quel che mi riguarda, lo trovo alquanto delicato. Ho letto numerosi thread al riguardo, e qua e là si preferisce questa o quella strategia. Io preferirei metterla in secondo piano per ora.

    roberto75 ha scritto:


    1-Nella tabella articoli inserisco i circa 20 listini dei rispettivi costruttori e ID Articolo è il codice prodotto del costruttore.
    Qua mi sembra che tu ti perdi un po'. Se facessi tu alcuni esempi pratici di nomi di Articoli con relativi Costruttori, sarebbe più lampante per tutti. Io provo a dire come vedo gli Articoli:
    IDArticolo / NomeArticolo / Produttore
    1 / Pallone rosso / Super Santos
    2 / Pallone arancio / Yashin
    3 / Pallone verde / Laviosa
    4 / Pallone rosso / Laviosa
    5 / Pallone rosso / Yashin
    6 / Pallone verde / Yashin

    Questo è un elenco dei soli Articoli che sono tali in eterno. Ognuno di questo Articoli può essere soggetto a vari Prezzi nel corso del tempo. Quindi il Pallone verde Laviosa avrà molti Prezzi, ma l'IDArticolo rimane sempre =3. Per questo motivo serve una tabella ArticoliListini.

    roberto75 ha scritto:


    2-Il campo ID Listino deve essere uno per ogni costruttore? come si riempie(Tipo di dato contatore?) il periodo listino sono 20 listini per due date sono solo 40 campi che devo inserire manualmente
    3-ID Articolo Listino che tipo di dato è? si inserisce manualmente QUESTA TABELLA NON RIESCO A COMPRENDERE COME DEVE FUNZIONARE
    4-Nello sviluppo delle offerte utilizzo il codice prodotto costruttore "ID Articolo" non posso utilizzare un codice differente.
    Generalmente il campo ID che sta in alto dovrebbe essere la "chiave primaria" (quindi univoco). Generalmente si tratta di un campo di tipo Contatore (nelle ultime versioni di Access si chiama Numerazione automatica).
    Se IDArticolo è un codice fornito dallo stesso Produttore, ci può stare ugualmente...ma cosa succede se due o più produttori scrivono lo stesso IDArticolo? Non facciamo confusione fra il concetto "classico" di campo ID e un campo "codice" digitato manualmente...l'importante è che sia univoco.
  • Re: Selezionare tabelle in una query tramite casella combinata

    Osvaldo buonasera,

    Seguendo le tue indicazioni credo di aver risolto in questo modo:

    Listino_BT
    Id_Codice (TER-00300) aggiunto l'iniziale del costruttore"TER" per evitare che costruttori diversi possano avere lo stesso codice
    Codice_Costruttore (000300) "mi sa che questa dovrò eliminarla"
    Descrizione (Contatto ausiliario ecc. ecc.)
    Costruttore (128 - Ho poi una tabella collegata con tutti i dati dl costruttore)
    Famiglia (1 - per la scontistica)
    Unità_Misura (pz.)
    Confezione(1)

    Listini
    ID_Listino (Numerazione automatica)
    DaData (Per poter inserire un criterio per la scelta del codice con listino in vigore)
    AData (Come sopra)

    Codice_Listini
    IDCodice_Listini (Numerazione automatica)
    ID_Codice (In relazione molti a 1 con Listino_BT.Id_Codice)
    ID_Listino (In relazione molti a 1 con Listini.Listino)
    Listino (Prezzo)

    e mi sembra che non ci dovrebbero essere problemi per i futuri aggiornamenti dei listini ed il "futuro storico" degli ordini/offerte.

    Però adesso non so come inserire nella mia tabella offerte/Ordini IDCodice_Listini
    Prima avevo una tabella

    Offerta
    Numero offerta
    Quantità
    Codice_Costruttore (Casella combinata)

    Adesso dovrei inserire IDCodice_Listini che è un numero a me sconosciuto e che dovrei cercare nella tabella!!!!
    Ci sto sbattendo la testa ma non mi riesce
  • Re: Selezionare tabelle in una query tramite casella combinata

    Roberto75 ha scritto:


    Listino_BT
    Id_Codice (TER-00300) aggiunto l'iniziale del costruttore"TER" per evitare che costruttori diversi possano avere lo stesso codice
    Codice_Costruttore (000300) "mi sa che questa dovrò eliminarla"
    Descrizione (Contatto ausiliario ecc. ecc.)
    Costruttore (128 - Ho poi una tabella collegata con tutti i dati dl costruttore)
    Famiglia (1 - per la scontistica)
    Unità_Misura (pz.)
    Confezione(1)
    Non sarebbe sbagliato, ma...vogliamo fare le cose il più ortodosse possibile?
    Perchè questa tabella non si può chiamare Articoli?
    [Id_Codice] (chiave primaria) io lo farei di tipo "numerazione automatica". Perchè non lo vuoi chiamare [Id_Articolo]?
    [Costruttore] penso sia numerico...io lo chiamerei preferibilmente [Id_Costruttore].
    [Codice_Costruttore] io non lo eliminerei. Piuttosto consiglio di impostare un "indice multicampo univoco" sulla coppia campi [Id_Costruttore] e [Codice_Costruttore]. Se ti trovi con l'Articolo in mano e sopra leggi sia il Costruttore, sia il Codice_Costruttore, come fai a risalire al relativo Id_Articolo?
    Che vuol dire il campo [Famiglia]...per la scontistica?

    Roberto75 ha scritto:


    Però adesso non so come inserire nella mia tabella offerte/Ordini IDCodice_Listini
    Prima avevo una tabella

    Offerta
    Numero offerta
    Quantità
    Codice_Costruttore (Casella combinata)

    Adesso dovrei inserire IDCodice_Listini che è un numero a me sconosciuto e che dovrei cercare nella tabella!!!!
    Ci sto sbattendo la testa ma non mi riesce
    Qua, almeno per me, dovresti raccontare qualche esempio pratico, perchè io non conosco il tuo campo professionale in tutti i suoi meandri.
  • Re: Selezionare tabelle in una query tramite casella combinata

    Osvaldo buonasera,
    Ho seguito il tuo consiglio e ho variato tutti i nomi.

    Tabella A1-Articoli:
    ID_Artcolo (TER-100369)
    ID_Costruttore (128)
    Articolo_Costruttore (100369)
    Descrizione (TD3 M06 1P C-6A 1M Int.)

    Tabella A2_Listini:
    ID_Listino (1)
    DaData (01-Apr-16)
    AData (31-Mar-17)
    Descrizione (Terasaki 2016)

    Tabella A3-Articoli_Listini:
    ID_Articolo_Listino (Numerazione automatica 20031)
    ID_Articolo (TER-100369)
    ID_Listino (1)
    Listino (76,00)
    Famiglia (Modulari)
    Unita_Misura (pz.)
    Confezione (1)

    Poi ho fatto le seguenti tabelle per la gestione delle offerte:

    B1-Offerta
    Protocollo (Numerico 508546)

    B2-Posizione
    ID_Posizione (Numerazione automatica)
    Protocollo (Numerico)
    Posizione_Numero (Testo breve)
    Posizione_Descrizione (Testo lungo)

    B3-Gruppo
    ID_Gruppo (Numerazione automatica)
    ID_Posizione (Numerico)
    Gruppo_Numero (Testo breve)
    Gruppo_Descrizione (Testo lungo)

    B4-Sviluppo_Gruppo
    ID_Sviluppo_Gruppo (Numerazione automatica)
    ID_Gruppo (Numerico)
    Quantita (Numerico)
    ID_Articolo_Listino (Numerico)

    Relazioni:
    B1-Offerta.Protocollo uno-a-molti B2-Posizione.Protocollo
    B2-Posizione.ID_Posizione uno-a-molti B3-Gruppo.ID_Posizione
    B3-Gruppo.ID_Gruppo uno-a-molti B4-ID_Gruppo

    Maschere:
    Offerta con sottomaschera Posizione (Che rappresenta un capitolo della mia offerta)
    Poi in funzione della Posizione con un pulsante apro la maschera Gruppo (Che rappresenta un paragrafo della mia offerta) con sottomaschera Sviluppo Gruppo

    La sottomaschera sviluppo gruppo è il cuore del mio lavoro devo quindi popolare la casella ID_Articolo_Listino (Numerazione automatica "20031") nel modo più veloce possibile.
    Con il vecchio file access (Con il quale però non potevo aggiornare i listini!!!!) copiavo brutalmente dai listini Excel dei costruttori o dai cataloghi il codice "100369" e lo inserivo; adesso invece devo prima identificare Articolo_Costruttore (100369), inserirlo in un filtro di una query, identificare ID_Articolo_Listino (Numerazione automatica 20031) e poi nuovamente copiarlo brutalmente nella sottomaschera Sviluppo Gruppo.

    Su YOU TUBE ho trovato una soluzione che mi piace
    https://www.youtube.com/watch?v=I1pxVtTZjD
    Ma non capisco perché non riesco a farla funzionare!!
    Dalla sottomaschera sviluppo gruppo sul singolo record ho inserito un pulsante che mi apre la maschera Seleziona articolo basata su una query con le tabelle A1, A2 e A3.
    Sulla casella di testo ID_Articolo_Listino su clic ho inserito la Routine evento
    Private Sub ID_Articolo_Listino_Click()
    
    Forms("B4-Sviluppo_Gruppo")!txtID_Articolo_Listino = Me.txtID_Articolo_Listino
    Forms("B4-Sviluppo_Gruppo")!txtQuantità.SetFocus
    DoCmd.Close
    End Sub
    
    Ma quando vado a cliccare mi esce il messaggio di errore:

    Errore di compilazione
    Impossibile trovare il metodo o il membro dei dati



    Perchè' ?!?!?!?!?!?!?!!?

    Osvaldo a me piacerebbe questa soluzione anche perché un domani arricchendo A3-Articoli_Listini con ulteriori campi e filtrandoli potrei identificare il codice senza dover andare sui cataloghi MA SE RITIENI PIU OPPORTUNA UNA SOLUZIONE DIVERSA PER RISOLVERE IL PROBLEMA VA BENE COMUNQUE.

    Spero di essere stato chiaro nella descrizione ed in attesa di una risposta ti ringrazio per i tuoi preziosi consigli.
  • Re: Selezionare tabelle in una query tramite casella combinata

    Roberto75 ha scritto:


    sviluppo gruppo è il cuore del mio lavoro
    In SviluppiGruppi (usa sempre nomi plurali per le tabelle) noto che confluiscono 2 campi che stanno a valle di 2 "cascate". Tu potresti lavorare con la sola maschera SviluppiGruppi e fare in modo che i campi IDGruppo e IDArticoloListino vengano selezionati grazie al meccanismo di "caselle combinate a cascata". Prova a leggere numerosi thread che parlano di questo meccanismo, oppure dai un'occhiata qui
    http://forum.masterdrive.it/access-79/controlli-bound-sincronizzati-in-cascata-45725/


    Il codice che hai postato non mi dice nulla.
Devi accedere o registrarti per scrivere nel forum
11 risposte