Maschera campo pre inserito

di il
31 risposte

Maschera campo pre inserito

Come faccio a fare un pulsante che mi apre la maschera di inserimento ordine con però già compilato il campo città.
Per esempio, pulsante MILANO che se lo clicco mi apre la maschera di inserimento ordine con già il campo della città compilato per milano.
Mi serve perchè ci sono più negozio e non posso fargli inserire ogni volta la città del negozio, quindi vorrei fare n pulsanti quanti sono i negozi in modo

tks

31 Risposte

  • Re: Maschera campo pre inserito

    Ciao asnaldo, devi aprire la maschera e poi assegnare il valore testuale alla casella di testo. Sull'evento "suclick" del tuo pulsante, inserisci qualcosa del genere:
    
    DoCmd.OpenForm "tuamaschera", ....
    [Forms]![tuamaschera]![tuacaselladitesto] = "Milano"
    
    Penso che così dovrebbe funzionare.
  • Re: Maschera campo pre inserito

    Personalmente cerco sempre di evitare le dipendenze incrociate da maschera a maschera sono poco flessibili e scarsamente riciclabili.
    Io passerei come parametro Args il valore e lo recuperarei su load di form andando a valorizzare la proprietà DefaultValue e non Value direttamente... hanno 2 sensi molto differenti.
  • Re: Maschera campo pre inserito

    asnaldo ha scritto:


    Come faccio a fare un pulsante che mi apre la maschera di inserimento ordine con però già compilato il campo città.
    Per esempio, pulsante MILANO che se lo clicco mi apre la maschera di inserimento ordine con già il campo della città compilato per milano....

    @Alex ha scritto:


    Personalmente cerco sempre di evitare le dipendenze incrociate da maschera a maschera sono poco flessibili e scarsamente riciclabili.
    Io passerei come parametro Args il valore e lo recuperarei su load di form andando a valorizzare la proprietà DefaultValue e non Value direttamente... hanno 2 sensi molto differenti.
    che, gira gira, è quello che già avevamo fatto qui Nuovo record con campo pre inserito con l'intervento di @Alex proprio su DefaultValue.
  • Re: Maschera campo pre inserito

    @alex preferisco fare un pulsante per negozio anche perchè non capisco dove potrei prendere in load la città del negozio. L'unica sarebbe fare un nome utente che quando si usa quello alcuni campi vengono pre compilati ma è troppo un casino per me che sono poco esperto in programmazione..
    Mi potreste dare una mano con il codice corretto?
    ho provato così ma non funge
    
    Private Sub saronno_new_order_Click()
        DoCmd.OpenForm "ordine", acNormal, "", "[punto_vendita]=saronno, acEdit, acNormal"
    End Sub
  • Re: Maschera campo pre inserito

    asnaldo ha scritto:


    ...
    Mi potreste dare una mano con il codice corretto?
    ho provato così ma non funge
    
    Private Sub saronno_new_order_Click()
        DoCmd.OpenForm "ordine", acNormal, "", "[punto_vendita]=saronno, acEdit, acNormal"
    End Sub
    Evito ogni commento su quanto non quotato,
    Per il codice, sistema i parametri e i doppi apici, che sono sparsi un po' qua e un po' là.
    L'intellisense non ti guida nella compilazione?
  • Re: Maschera campo pre inserito

    No non mi aiuta @alex o @mike mi potete aiutare con il codice corretto?

    tks
  • Re: Maschera campo pre inserito

    Buongiorno a tutti.

    Asnaldo, secondo me sbagli candeggio.

    Nel senso che, ad intuito, se hai bisogno di immettere un campo precompilato tramite un tasto, hai strutturato male le tabelle e sopratutto i collegamenti, perchè quello che tu cerchi di fare manualmente, lo dovrebbe fare in automatico il database.

    Ora non so come sia strutturato tutto il database,ma da quello che dici ho l'impressione che hai un mega tabellone chiamato ordini e dove immetti tutti i dati.

    La soluzione che tu cerchi di attuare, a me personalmente non piace, ma naturalmente è solo una mia opinione, perchè anche se il database è a tuo uso e consumo, mettendo un tasto per ogni negozio, non lo rende dinamico e non modificabile e se nel caso avrai bisogno di aggiungere al volo un nuovo negozio. dovrai mettere mano al codice sorgente, aggiungere un nuovo pulsante etc etc, cosa che sinceramente è scomoda e poco ottimale.

    Secondo me la via più ottimale e semplice che ti risolve al volo un sacco di cose, senza dovere mettere mano a codici VBA macro o altro, è quella di sfruttare la naturale predisposizione dei database e trattare il negozio come un record normale.

    Mi spiego. ( la soluzione che attuerei io)

    Io creerei una tabella dedicata all'inserimento dei dati anagrafici dei vari negozi, ed una tabella ordini. (naturalmente avrai anche altre tabelle prodotti pressuppongo, ed anche quelle devono essere ben collegate con la tabella ordini)
    Collegherei le due tabelle con un ID di riferimento al negozio.
    Dalla maschera ordini in apertura completamente vuota,( ma collegata ad una query che mi richiama tutti i dati dalle varie tabelle che mi interessano) al dipendente, invece di cliccare un tasto, farei scegliere da una combobox il negozio corrispondente.
    Automaticamente si crea un nuovo ordine univoco collegato a quel negozio e quindi poi andrei a popolare manualmente gli altri dati dell'ordine.

    In questo modo, non ti complichi la vita con il codice VBA, non devi creare variabili globali, oppure passare valori tra una routine e l'altra, non devi gestire l'apertura, chiusura ed aggiornamento di maschere separate, controlli etc etc, gestire errori imprevisti (del tipo impossibile passare al controllo perchè non è attivo ),ed hai un database perfettamente normalizzato.
    Soprattutto da una semplice ed unica maschera, (quella ordini) con i corretti collegamenti tra tabelle, ed una giusta e semplice query di selezione, riesci a recuperare in una sola interrogazione al motore del database, tutti i dati necessari per il nuovo ordine, tutto in automatico.
    Ad esempio puoi immettere il negozio, e far apparire in automatico l'indirizzo o le varie note, poi, immettere l'articolo ordinato e visualizzare tutti i dati corrispondenti a quell'articolo etc etc, magari puoi mettere anche il nome del dipendente che inserisce l'ordine e chi ha più ne metta.
    Naturalmente in fase di salvataggio dei dati, nella tabella ordini verranno archiviati solamente i dati relativi all'ordine e non tutti i dati che hai visualizzato a schermo.
    Tutto però dipende dalla struttura base del database.

    Inizialmente mentalmente può sembrare più semplice ed intuitivo agire a valle tramite le maschere od il codice, ma invece è fondamentale avere una struttura a monte ben creata ed organizzata ed una volta che si impara bene a creare i collegamenti tra le tabelle, e sopratutto sfruttare il codice nativo dei database che sono le query e l'SQL, tutto si risolve (magari fosse vero) con pochi click e pochi passaggi.

    Naturalmente come detto questa è una mia proposta. Se vuoi continuare la strada del pulsante, mi sembra di ricordare, ma non sono sicuro perchè è una soluzione che non attuo mai, devi prima creare un nuovo record manualmente, via codice, e poi riempire la casella con il dato corrispondente, perchè altrimenti appena immetti un altro valore in un altra casella, automaticamente il database si posiziona su nuovo record cancellando il testo che hai inserito nella casella del negozio, sempre che, si riesca facilmente a visualizzarlo, proprio perchè passare un valore ad un controllo non attivo non è proprio cosa semplice ed intuitiva.

    Correggetemi se sbaglio.
  • Re: Maschera campo pre inserito

    @mypipe il mio db è già strutturato esattamente come hai spiegato tu e anche la maschera di inserimento è come l'hai descritta tu, ti allego uno screen di come è adesso.
    Dove vedi la freccina è perchè appunto è una combo box dove puoi selezionare dall'elenco il negozio.
    GIà così va bene ma preferisco far inserire meno possibile alla commessa è per questo motivo che voglio fare un tasto per negozio in modo che la commessa non potrà sbagliare ad inserire da che negozio proviene l'ordine.
    E' un campo importante e non vorrei vedere consegnate torte in un negozio sbagliato..
    quindi l'unica via che vedo è da codice VB
    Allegati:
    16249_50e62576701a4fb1b480b0004fd6c5c9.jpg
    16249_50e62576701a4fb1b480b0004fd6c5c9.jpg
  • Re: Maschera campo pre inserito

    Complimenti, a veder l'immagine sembra realizzato a dovere.

    Allora io ho provato al volo questo, mettendo una text ed il pulsante direttamente sulla stessa maschera:

    Private Sub Comando0_Click()
    Me.Tipo.SetFocus
    Me.Tipo.Text = "prova"
    End Sub
    dovrebbe funzionare

    Dove tipo è il nome della text box.

    Però poi dipende tutto da come viene salvato il nome della città nella tabella ordini.

    Se è un semplice campo della tabella ordini, la soluzione da me proposta non crea problemi, ma se invece è collegato con un ID e nella combobox recuperi il numero ID del negozio e quindi nella tabella ordini salvi il collegamento invece che il testo esteso (ad esempio SARONNO) la storia; a naso si complica

    Aggiunta.

    Se hai problemi con gli id dei negozi, Una possibile soluzione veloce al problema degli ID potrebbe essere di spostare la chiave primaria dei negozi, sul nome stesso del negozio.

    Se non vuoi creare due maschere separate, (che trovo scomodamente mal gestibile, una possibile soluzione è quella di sovrapporre i comandi sulla stessa maschera.
    Cioè, apri la maschera con tutti i controlli dei dati relativi all'ordine nascosti e visibili solamante i pulsanti delle città. Una volta che si clicca un pulsante, nascondi i command button e riporti visibili tutti gli altri.

    Private Sub Comando0_Click()
    Me.Tipo.Visible = True
    Me.Tipo.SetFocus
    Me.Tipo.Text = "prova"
    End Sub
  • Re: Maschera campo pre inserito

    E mi sa che nel tuo codice manca qualcosa, tipo l'apertura della maschera mmm
    cmq ho fatto altri tentativi e ho fatto qualche passo avanti ma niente ancora..
    sono fermo a questo codice
    DoCmd.OpenForm "ordine", acNormal, , , accFormAdd, , "[punto_vendita] = 4"
  • Re: Maschera campo pre inserito

    asnaldo ha scritto:


    e mi sa che nel tuo codice manca qualcosa, tipo l'apertura della maschera mmm
    cmq ho fatto altri tentativi e ho fatto qualche passo avanti ma niente ancora..
    sono fermo a questo codice
    DoCmd.OpenForm "ordine", acNormal, , , accFormAdd, , "[punto_vendita] = 4"

    Si asnaldo, certo che manca l'apertura della maschera.

    Faccio tutto dalla stessa maschera

    Non so se hai letto le aggiunte al mio messaggio iniziale.

    Praticamente invece di utilizzare due maschere, faccio il Silvan della situazione e faccio apparire e scomparire i comandi sulla stessa maschera.
    Poi secondo me non ti conviene utilizzare quel codice da te scritto, ma passare una variabile byval o byref dalla maschera dei pulsanti direttamente al form load (o activet dipendo dove non ti da problemi) della maschera inserimento dell'ordine.

    Ma per me la soluzione della stessa maschera con i controlli nascosti è la più veloce e semplice.
    Poi per carità tutto si fà, anzi a volte è più stimolante seguire la strada più tortuosa, si imparano cose nuove etc etc, ma per praticità, appunto, preferisco la strada più semplice.
  • Re: Maschera campo pre inserito

    Non ti seguo... mi provi a scrivere il codice esatto che dovrei usare?
    intendi così: ?
    Private Sub saronno_new_order_Click()
        Me.punto_vendita.SetFocus
        Me.punto_vendita.Text = "4"
        DoCmd.OpenForm "ordine", acNormal, , , accFormAdd, , "[punto_vendita] = [Me.punto_vendita.text]"
    End Sub
  • Re: Maschera campo pre inserito

    No.

    Allora fai una cosa al volo.

    Fai una copia della maschera ordini, così non rovini quella originale.

    Cambia la casella combobox del nome del negozio in una normale casella di testo.

    In un qualsiasi punto della maschera ordini crea un pulsante e scrivi il codice VBA che ho messo nel post precedente sull'evento click (naturalmente sostituisci tipo, con il nome della casella di testo)

    crea un nuovo record e clicca il pulsante.
    In teoria nella text box del negozio appare la parola Prova.

    Il passo successivo del mio suggerimento è quello di aprire la maschera di inserimento ordini con tutti i controlli relativi all'ordine in modalità invisibile (di defaul) e con visibili solo i pulsanti della città (o dei nomi dei negozi)

    Una volta che tu clicchi un pulsante, automaticamente nascondi i pulsanti, riporti visibili tutti gli altri controlli ed assegni alla casella di testo della città il relativo valore che gli passi tramite il pulsante che la dipendente ha cliccato.

    Se poi la dipendente si sbaglia pure in questo frangente, compri una frusta.......
  • Re: Maschera campo pre inserito

    Dall'immagine non mi ero accorto che in realtà hai una maschera e due sottomaschere.

    Puoi direttamente nascondere e far apparire direttamente le sottomaschere, senza dover ripetere il codice per tutti i controlli.
Devi accedere o registrarti per scrivere nel forum
31 risposte