[RISOLTO] Compilare un campo tramite pulsante senza controllo associato

di il
10 risposte

[RISOLTO] Compilare un campo tramite pulsante senza controllo associato

Buongiorno a tutti,

Sto cercando di creare un database che tenga conto degli ordini dei clienti.

Vi faccio un pò di contesto affinché possa essere tutto un pò più chiaro:

i miei clienti sono delle scuole d'infanzia che ogni giorno telefonano per ordinare i pasti per gli alunni.
Ad oggi si utilizza un foglio excel in cui si inseriscono i pasti (righe = clienti, colonne = tipologia di pietanza)

sto progettando un db che mi permetta di rendere più user friendly e robusto il tutto (in quanto poi dovrò aggregare alcuni dati)

La tabella utilizzata (Tab_ordini) contiene i seguenti campi:
ID (nr ordine)
Cliente
Turno cucina (si cucina su tre turni nell'arco della mattinata)
Packaging (monoporzione o multirazione o altro)
Data (data ordine, che poi essendo giornalieri è la data corrente)
poi tutti i campi con le pietanze (primo piatto, primo piatto baby, secondo piatto, menù completo, ecc...)

al momento sto lavorando sulla parte di programma che verrà utilizzata dalla persona che prende l'ordine telefonicamente.


Ho creato una maschera iniziale con una serie di pulsanti, dove ogni pulsante rappresenta un cliente.

Al clic sul pulsante si apre la maschera ordini (maschera di input) ed in automatico si compilano la casella di testo "nr ordine" con il valore dell'ID, mentre la casella di testo Cliente assume un valore di testo specifico (associata all'evento clic del pulsante).

Veniamo alla questione:

Siccome in questa maschera, all'operatore non "interessa" vedere in quale turno cucina verrà preparato l'ordine (primo, secondo o terzo turno), né la tipologia di packaging di quel cliente, nella maschera questi controlli non sono presenti.

Ho pensato di inserire altre 2 istruzioni al codice che già in automatico compila nome cliente e nr ordine:

Private Sub Comando8_Click()
DoCmd.OpenForm "Tab_ordini"
Forms![Tab_ordini]!Cliente = "BABY WORLD"
Forms![Tab_ordini]!Data = Date

End Sub

L'unico problema è che non essendoci controlli casella di testo non posso utilizzare la stessa sintassi che ho utilizzato per data e cliente in quanto quelle servono per i controlli.

Ho cercato un pò ma non sono riuscito a trovare un esempio di sintassi in vba per "scrivere" in un campo direttamente sulla tabella senza passare per la casella di testo della maschera.

per cui la domanda è:

E' possibile, tramite vba, dare un comando di scrittura di un valore in un campo, senza che vi sia una casella di testo?

10 Risposte

  • Re: [RISOLTO] Compilare un campo tramite pulsante senza controllo associato

    Oppure dovrei fare una seconda tabella con cliente, packaging e turno cucina;
    li inserisco una sola volta e me li richiamo in qualche modo nella compilazione dell'ordine?
  • Re: [RISOLTO] Compilare un campo tramite pulsante senza controllo associato

    Carmine Sepe ha scritto:


    sto progettando un db che mi permetta di rendere più user friendly e robusto il tutto (in quanto poi dovrò aggregare alcuni dati)

    La tabella utilizzata (Tab_ordini) contiene i seguenti campi:
    ID (nr ordine)
    Cliente
    Turno cucina (si cucina su tre turni nell'arco della mattinata)
    Packaging (monoporzione o multirazione o altro)
    Data (data ordine, che poi essendo giornalieri è la data corrente)
    poi tutti i campi con le pietanze (primo piatto, primo piatto baby, secondo piatto, menù completo, ecc...)
    Per ragionare alla Access maniera, devi "normalizzare" su più tabelle. Per esempio:
    Clienti uno-a-molti Ordini
    Ordini uno-a-molti DettagliOrdini
    Pietanze uno-a-molti DettagliOrdini
  • Re: [RISOLTO] Compilare un campo tramite pulsante senza controllo associato

    Grazie Osvaldo per la risposta,

    Se ho capito bene, dovrei creare le seguenti tabelle:

    1) Tabella "Clienti" con i seguenti campi

    [ID cliente]
    [Denominazione cliente]
    [Turno_cucina]
    [packaging]

    2) Tabella "Ordini" con i seguenti campi
    [ID ordine]
    [ID cliente]
    [data ordine]

    3) Tabella "Dettaglio ordini"
    [ID Ordine]
    [pietanza 1]
    [pietanza 2]
    ...
    [pietanza n]

    e mettere in relazione la tabella "clienti" con la tabella "ordini" mediante il campo [Id cliente] e la tabella ordini con la tabella "dettaglio ordini" mediante il campo [ID ordine].

    Corretto?
  • Re: [RISOLTO] Compilare un campo tramite pulsante senza controllo associato

    Carmine Sepe ha scritto:


    mettere in relazione la tabella "clienti" con la tabella "ordini" mediante il campo [Id cliente] e la tabella ordini con la tabella "dettaglio ordini" mediante il campo [ID ordine].
    Sì.

    I campi [Turno_cucina] e [Packaging] non riesco ad afferrare il loro significato. Occorre una descrizione più chiara e dettagliata. Sicuramente non devono stare nella tabella Clienti.

    DettagliOrdini deve avere i seguenti campi:
    IDDettaglio (PK)
    IDPietanza (FK)
    IDOrdine (FK)

    Devi anche creare una tabella Pietanze con i campi:
    IDPietanza (PK)
    Pietanza

    Di conseguenza avrai le relazioni:
    Ordini.IDOrdine uno-a-molti DettagliOrdini.IDOrdine
    Pietanze.IDPietanza uno-a-molti DettagliOrdini.IDPietanza
  • Re: [RISOLTO] Compilare un campo tramite pulsante senza controllo associato

    Ti spiego il significato dei due campi:

    Premesso che nel centro cottura dove lavoro si producono pasti per le scuole d'infanzia, e che non tutti i nostri clienti vogliono i pasti nello stesso orario (ci sono scuole che "mangiano" alle 11:30, altre alle 13:30), i pasti non vengono prodotti tutti nello stesso orario (altrimenti la scuola che "mangia" alle 13:30 riceverebbe cibi scotti).

    Per migliorare il servizio, cuciniamo (la stessa tipologia di pietanze) in tre orari differenti (per consegnare alle 11:30, alle 12:30, alle 13:30). questa caratteristica viene concordata col cliente in fase contrattuale. per cui avremo, ad esempio, 5 scuole clienti per cui dovremo consegnare entro le 11:30, altre 12 scuole a cui consegnare alle 12:30, altre 6 a cui consegnare alle 13:30.
    una volta concordato, in fase di stipula di contratto, l'orario di consegna, al cliente viene assegnato un "turno cucina" che può essere 1° turno, 2° o 3°.
    tale turno rimane fisso per tutta la durata del contratto.

    Stesso ragionamento vale per il packaging: ci sono alcune scuole clienti che hanno un refettorio e porzionano i pasti direttamente in loco (quindi mandiamo direttamente la "pentola"), mentre altri ci chiedono di mandare i pasti in vaschette monoporzione (quindi mandiamo i box termici contenenti un tot di vaschette di primo piatto, un tot di vaschette di secondo piatto e così via).

    Entrambi questi aspetti si definiscono in fase contrattuale e restano immutati durante tutto l'anno scolastico (o gli anni scolastici a seconda della durata del contratto)

    Essendo fissi ed essendo in relazione 1 ad 1 con il cliente io li metterei come attributi cliente direttamente.

    E' corretto secondo te?
  • Re: [RISOLTO] Compilare un campo tramite pulsante senza controllo associato

    Carmine Sepe ha scritto:


    Essendo fissi ed essendo in relazione 1 ad 1 con il cliente io li metterei come attributi cliente direttamente.
    E' corretto secondo te?
    Io credo che la relazione uno-a-uno risieda con il Contratto "annuale" che tu stipuli volta per volta. Ritengo che TurnoCucina e Packaging siano strettamente legati a un Contratto. Pertanto direi:
    Clienti uno-a-molti Contratti
    Contratti uno-a-molti Ordini

    Nella tabella Contratti ci metti i campi TurnoCucina e Packaging.
  • Re: [RISOLTO] Compilare un campo tramite pulsante senza controllo associato

    Questo db mi serve per gestire gli ordini che arrivano quotidianamente, non per gestire i contratti di appalto (ad avercene bisogno di un db per gestire contratti )

    per cui le caratteristiche del contratto, in questo momento, le posso tranquillamente associare direttamente al cliente, in quanto questo db mi servirà in produzione.

    L'idea di questo db è quella di far inserire in maniera robusta e semplice gli ordinativi che quotidianamente le scuole clienti fanno per ordinare i pasti (c'è un menù settimanale e i clienti mi comunicano quanti pasti voglio per la consegna del giorno) per cui ogni record è un ordine cliente effettuato.
    Tale record (ordine) deve contenere le seguenti informazioni (campi):

    1) Quantità per ogni tipologia di pasto (oltre alla pietanza prevista dal menù vi sono una serie di pietanze "fisse" cioè sempre disponibili, tipo pasta al sugo o pasta in bianco). tale dato è l'unico che viene comunicato quotidianamente dal cliente il quale effettua, oggi, un ordine telefonico del tipo: "oggi mi porti 15 primi piatti, 6 pasta al sugo, 1 pasta in bianco, 8 secondi, 2 prosciutto cotto)

    2) Cliente (il destinatario dei pasti)
    3) Data (in fase di ordinazione sarà sempre la data corrente). La data mi serve come parametro per effettuare successivamente query di selezione e raggruppamento per comunicare alla cucina le quantità da produrre in quel turno (alla cucina non interessa a chi devono andare quei pasti)

    4) turno cucina ( attributo che mi serve anche a livello di record ordine in quanto sarà un parametro per query di selezione e raggruppamento per comunicare in quale turno cucina deve andare quell'ordine).
    5) Packaging (come dovranno essere confezionati i pasti)

    Questi ultimi due campi mi servono per poter instradare le informazioni lungo la filiera.

    Al momento sto focalizzando l'attenzione sulla creazione del record.

    L'idea di base è quella di avere una maschera iniziale dove l'operatore che riceve la telefonata visualizzi una maschera con l'elenco dei clienti (sotto forma di pulsanti da cliccare).

    Al clic su un cliente qualsiasi si apre la maschera di input dove l'operatore inserisce i numeri che il cliente gli comunica e salva il record, memorizzando l'ordine.

    Non so se sono stato chiaro nello spiegarti questa parte iniziale (la parte finale presumo sia più semplice in quanto penso si tratterà solo di query di selezione e raggruppamento con criteri Where). ma al momento sono impantanato nella parte iniziale
  • Re: [RISOLTO] Compilare un campo tramite pulsante senza controllo associato

    Carmine Sepe ha scritto:


    Questo db mi serve per gestire gli ordini che arrivano quotidianamente, non per gestire i contratti di appalto (ad avercene bisogno di un db per gestire contratti

    per cui le caratteristiche del contratto, in questo momento, le posso tranquillamente associare direttamente al cliente, in quanto questo db mi servirà in produzione.
    Sei libero di progettarlo anche così, ma considera che se la Scuola Marconi nel 2010-2011 ha scelto un certo Turno+Packaging e nel 2015-2016 un altro, tu vai a modificare qualcosa che poi ritroverai INCOERENTE nel corso "storico". Forse questi 2 valori ti tornano utili per "pilotare/controllare" l'input dati degli orari Ordini/Pietanze che dovrai comunque tracciare a parte...altrimenti combini "pasticci".

    P.S.: Ripensandoci. Ho capito che non vuoi ritrovarti una tabella Contratti IN MEZZO. Potresti comunque tenerla A PARTE e gestire così:
    Clienti uno-a-molti Ordini (per non guastare la struttura base)
    Clienti uno-a-molti Contratti (te la tieni come memorandum storico)

    N.B.: Il titolo che hai proposto inizialmente, durante il prosieguo della discussione, ha preso tutta un'altra direzione. Ne avremmo discusso meglio nella sezione "Progettazione database". Nulla di grave, va bene anche così.
    Se la struttura tabelle ti sta bene così, questa discussione può dirsi conclusa. Per altre problematiche, apri nuove discussioni (un problema=una discussione).
  • Re: [RISOLTO] Compilare un campo tramite pulsante senza controllo associato

    F30 Sicuramente questo db può essere progettato in maniera migliore, e concordo sul fatto che non è il thread giusto.

    Tornando in topic e per rispondere alla mia stessa domanda iniziale.... mi sono reso conto che il mio problema nasceva dall'ignoranza in materia.

    La sintassi per popolare un campo è praticamente la stessa.... mentre io pensavo SBAGLIANDO che si potesse scrivere in un campo solo se fosse presente il controllo casella di testo...

    invece, dato che la maschera di input poggia sulla tabella "tb_ordini", posso popolare con la stessa sintassi a prescindere che ci sia o meno nella maschera la casella di testo.


    per cui al codice

    Private Sub Comando8_Click()
    DoCmd.OpenForm "Tab_ordini"
    Forms![Tab_ordini]!Cliente = "BABY WORLD"
    Forms![Tab_ordini]!Data = Date

    End Sub

    basta inserire, dopo la stringa della data la stringa
    Forms![Tab_ordini]!Turno_cucina = 1

  • Re: [RISOLTO] Compilare un campo tramite pulsante senza controllo associato

    Carmine Sepe ha scritto:


    Tornando in topic e per rispondere alla mia stessa domanda iniziale

    Carmine Sepe ha scritto:


    Ho creato una maschera iniziale con una serie di pulsanti, dove ogni pulsante rappresenta un cliente.
    Questo modo di progettare non è affatto funzionale. I Clienti oggi sono 10, domani 15, dopodomani 40...serve una LISTA (casella combinata) che governi questa cosa.

    Conosci il database di esempio NorthWind? Rispecchia a grandi linee la tua situazione. Invece di Prodotti c'è Pietanze.
    Una gestione ideale sarebbe maschera/sottomaschera Ordini/DettagliOrdini con Ordini che ha una casella combinata su IDCliente, mentre su DettagliOrdini ci metti una casella combinata su IDPietanza.
Devi accedere o registrarti per scrivere nel forum
10 risposte