Espressione funziona su maschera e non su query

di il
12 risposte

Espressione funziona su maschera e non su query

Salve e un saluto a tutti gli utenti e moderatori. Volevo sottoporvi un problema a cui non riesco a trovare una soluzione riguardante un database access.

In pratica si tratta di una database gestionale di un piccolo negozio ebay, che dovrebbe gestire prodotti contabilità e alcune altre funzioni semplici. In questo momento mi trovo impelagato in un problema particolare.

Ho creato una query chiamata "Contabilità Prodotto" che serve a calcolare le spese e i ricavi di un singolo prodotto. All'interno della query ci sono i seguenti campi (derivati ovviamente dalla tabella corrispondente di inserimento):
- Prezzo di Vendita
- Prezzo di acquisto
- Spese inserzione
- Mesi di giacenza

Per ognuno di questi campi provvedo io all'immissione manuale
Poi ho integrato i seguenti campi con le relative espressioni:
- Totale costo inserzioni: [Spese Ebay]*[Mesi di giacenza]
- Commissioni Ebay: ([Prezzo di vendita]*9)/100
- Commissioni paypal: ([Prezzo di vendita]*3)/100
- Totale Commissioni: IIf([Anagrafica cliente]![Negozio]=On;[Totale costo inserzioni];[Totale costo inserzioni]+[Commissioni Ebay]+[Commissioni Paypal])
- Totale Spese: [Totale Commissioni]+[Prezzo di acquisto]
- Ricavo: [Prezzo di vendita]-[Totale Spese]

Il problema viene a crearsi con l'espressione "Totale commissioni" in cui la variabile IIF viene attiva solo se il campo SI/NO di un'altra tabella è attivo. Tale calcolo mi serve per fare la differenza tra cio che vendo di "persona" e cio che vendo su ebay in modo da scalare automaticamente le spese di ebay e paypal se vendo di persona, ma non quelle di inserzione che sono comunque fisse.

Nella maschera di riferimento dove è caricata la submaschera "Contabilità prodotto" che fa riferimento alla query di cui sopra funziona tutto perfettamente. Se seleziono o deseleziono il controllo "NEGOZIO" calcola automaticamente le spese giuste. Mentre anche se aggiorno, nel foglio di query "Contabilità prodotto", vengono calcolate solo il "Prezzo di acquisto" e il "Totale costo inserzioni", come se l'espressione Totale Commissioni: IIf([Anagrafica cliente]![Negozio]=On;[Totale costo inserzioni];[Totale costo inserzioni]+[Commissioni Ebay]+[Commissioni Paypal]) si bloccasse a [Totale costo inserzioni].

Il problema, ripeto, è che nella maschera, anche se cambio i valori in tempo reale, funziona tutto perfettamente, nella query no.

Dovrei risolvere questo problema perchè ho delle query correlate che poi mi calcolano i totali di tutti i prodotti in un altra maschera e non del singolo (come nel caso sopra). Se non risolvo questo problema i conti risulteranno tutti sballati.

Qualcuno riuscirebbe cortesemente a dirmi dove sbaglio?? Grazie in anticipo

12 Risposte

  • Re: Espressione funziona su maschera e non su query

    Le query generalmente sono progettate per VEDERE risultati da tabelle che hanno valori a monte. A parte alcuni casi semplici, es:
    1) Query su una sola tabella: OK
    2) Query su 2 tabelle correlate potrai modificare valori su alcuni campi, su altri no
    3) A mano a mano che aumenti il numero di tabelle coinvolte nella query, tanto più sarà impossibile modificare dati.
    La spiegazione di tutto ciò, neanche la guida in linea di Access è in grado di fornirla esaurientemente. Morale: nelle query non si devono modificare dati.

    Siamo sicuri che nella IIf...=On va bene?
    Prova IIf...=True

    Nelle maschere il discorso è un po' diverso. I valori vengono direttamente prelevati dalle singole caselle di testo.
  • Re: Espressione funziona su maschera e non su query

    Salve Osvaldo e grazie per la risposta,

    ho provato come hai detto tu, la funzione =true è equivalente ad =on ed infatti sulla maschera funzionano perfettamente tutte e 2, il problema rimane nella query.

    Ho notato un altra cosa. Praticamente aprendo la maschera che ha tutti i totali delle celle elencate nel primo post
    - Totale costo inserzioni: [Spese Ebay]*[Mesi di giacenza]
    - Commissioni Ebay: ([Prezzo di vendita]*9)/100
    - Commissioni paypal: ([Prezzo di vendita]*3)/100
    - Totale Commissioni: IIf([Anagrafica cliente]![Negozio]=On;[Totale costo inserzioni];[Totale costo inserzioni]+[Commissioni Ebay]+[Commissioni Paypal])
    - Totale Spese: [Totale Commissioni]+[Prezzo di acquisto]
    - Ricavo: [Prezzo di vendita]-[Totale Spese]


    la maschera mi ha sempre dato il messaggio
    Immettere valore parametro
    Anagrafica cliente!Negozio

    Io immettevo sempre il valore 1, giusto per far funzionare la maschera e così facendo si verificava il problema descritto nel primo post.

    Oggi ho provato a immettere il valore 0 e stavolta invece di calcolare esclusivamente il campo [Totale costo inserzioni] (come nell'espressione Totale Commissioni), invece calcola la seconda parte dell'espressione [Totale costo inserzioni]+[Commissioni ebay]+[Commissioni paypal].

    Quindi in base al valore che immetto nel messaggio di errore, calcola o la prima o parte dell'espressione true o la parte false, ma non fa lo switch in automatico.

    Qualche idea?
  • Re: Espressione funziona su maschera e non su query

    Per entrare a pieno nel tuo problema, e soprattutto nella tua logica, occorre che tu descriva esattamente tutte le tabelle che entrano in gioco con tutti i campi, le relazioni, le maschere e le query. Se diventa troppo complesso, puoi anche allegare immagini significative per farci capire cosa c'è al di sotto di tutto il quadro generale.
  • Re: Espressione funziona su maschera e non su query

    la maschera mi ha sempre dato il messaggio
    Immettere valore parametro
    Anagrafica cliente!Negozio
    Questo significa che non funziona neanche in maschera.
    Sarà che il campo Anagrafica cliente!Negozio, che utilizzi in un campo calcolato, non è presente nella query per cui
    te lo richiede sempre?
    Secondo me si.
  • Re: Espressione funziona su maschera e non su query

    Ciao Bogus,

    ho provato, come hai suggerito tu, ad inserire il campo [Negozio] direttamente nella query modificando anche l'espressione nel comandoTotale Commissioni: da
    Totale Commissioni: IIf([Anagrafica cliente]![Negozio]=On;[Totale costo inserzioni];[Totale costo inserzioni]+[Commissioni Ebay]+[Commissioni Paypal])

    a

    - Totale Commissioni: IIf([Negozio]=On;[Totale costo inserzioni];[Totale costo inserzioni]+[Commissioni Ebay]+[Commissioni Paypal]).

    In effetti il messaggio non appare piu ma ora continua a non fare il calcolo a seconda che il campo [Negozio] sia selezionato o meno. Oltretutto mi ha sballato l'ordinamento dei record (che prima era sequenziale) nella query "Contabilità prodotto" e sopratutto non fa più il calcolo neanche in Maschera che prima faceva.

    Ho controllato e tra le tabelle le relazioni dovrebbero essere giuste...
    Quindi pur avendo implementato il campo [Negozio] nella query continua a non funzionare

    Forse ha ragione Osvaldo, in serata provo a postare gli screen del database così magari la situazione è più chiara.

    Fino a quel momento comunque grazie a tutti dell'aiuto
  • Re: Espressione funziona su maschera e non su query

    Dunque ecco il link dove trovare lo screenshot delle schermate varie:


    Imm1: A sinistra la struttura del database
    Imm2: Schermata delle relazioni
    Imm3: Schermata query "Contabilità prodotto" dove i valori non si aggiornano in base al campo Totale commissioni
    Imm4: Stessa schermata di prima con il valore di "Immetti valore parametro" settato a 1
    Imm5: La query struttura con il campo "Totale commissioni" tanto decantato.

    In questo caso il campo "Negozio" non è stato inserito nella query dell'ultima immagine in quanto pur inserendolo ed eliminando il messaggio di errore Immetti valore parametro non ha risolto il problema dell'aggiornamento dei dati sulla query.

    Spero che bastino o potrebbe servire altro?
    Ormai non so piu dove sbattere la testa
  • Re: Espressione funziona su maschera e non su query

    Dagli screenshot che hai linkato non si vede il campo negozio incriminato e che
    si suppone sia nella tabella anagrafica cliente.
    L'espressione
    ([Anagrafica cliente]![Negozio]=On
    nel tuo caso è sbagliata perché fai dipendere la query a ciò che vede
    nella maschera, che deve essere quindi rigorosamente aperta
    nella tabella (il fatto che hanno lo stesso nome sia la tabella che la maschera mi ha portato all'errore).
    Pertanto, nella query deve essere immessa anche la tabella anagrafica cliente e inseriti
    il campo codice e negozio o anche solo negozio.
    In questo modo la query avrà la sua autonomia.
    Per avere un aggiornamento dei risultati in tempo reale modificando il valore del controllo campo in maschera è necessario forzare il ri - aggiornamento della query nell'evento su modifica.
    PS. Io ti consiglio di modificare la denominazione dei campi codici in maniera diversificata altrimenti nelle varie query dovrai sempre anteporre al nome codice anche la tabella a cui appartiene. Tutte le relazioni sono 1 a 1, questo significa che hai previsto che ad ogni prodotto hai e avrai sempre e solo un cliente.
  • Re: Espressione funziona su maschera e non su query

    Anzi basta solo mettere solo la tabella anagrafica clienti nella query senza aggiungere nemmeno il campo negozio lasciando la tua espressione iniziale:
    Totale Commissioni: IIf([Anagrafica cliente]![Negozio]=On;[Totale costo inserzioni];[Totale costo inserzioni]+[Commissioni Ebay]+[Commissioni Paypal])
    .
  • Re: Espressione funziona su maschera e non su query

    Dunque, si vede che sono una persona fortunata di natura.

    Stavo aprendo il file per implementare i cambiamenti come suggerito da Bogus e mi si è scollegato l'hd esterno. Quando l'ho ricollegato e ho provato a riaprire il file mi da il seguente messaggio di errore
    Formato del database nomefile.accdb non riconosciuto
    Ovviamente cliccando su ok non mi apre il file.

    Ho provato a recuperarlo con Stellar Phoenix access recover e anche il programma mi da il messaggio di errore
    This is not a valid MS Access file

    Idee o posso staccare computer (e relativo HD) e lanciarlo dalla finestra come nella sigla di Mai Dire TV?
  • Re: Espressione funziona su maschera e non su query

    Per me c'è grande caos nella organizzazione delle tabelle (finestra Relazioni). Trovo che il tutto andrebbe gestito diversamente. Per me la finestra Relazioni deve contenere sostanzialmente solo tabelle...le query le fai lavorare come query per fatti loro...comunque sia ci sono molti campi delle tabelle di cui non comprendo il significato. Almeno io, ho bisogno di sapere anche lo scopo del database (non so come funziona un negozio eBay) e, in base ad esso, accomodare i campi diversamente. Se parlo così, secondo una via normalizzata, anche le query sarà più facile costruirle coerentemente. Con l'attuale impostazione di tabelle, Access lavora più faticosamente sui campi, in quanto si va a scontrare con una sua logica intrinseca...bla bla bla...potrei sbagliarmi...ma io non riesco affatto a trovare il bandolo della matassa.
  • Re: Espressione funziona su maschera e non su query

    Una breve descrizione del database. In questo caso dovrebbe gestire contemporaneamente i prodotti venduti in negozio (quindi fisicamente) e sul negozio ebay. Ovviamente in negozio i prodotti non sono soggetti alle commissioni ebay ma solo alle tasse statali, mentre su ebay si aggiungono anche le commissioni di ebay e paypal. Il punto principale di tutto il database è ovviamente il codice del prodotto. Ogni prodotto in negozio è catalogato con un codice. Il database dovrebbe mostrare contemporaneamente Il codice del prodotto, il nome del prodotto, la descrizione, la data di acquisto e di pubblicazione su ebay (serve per calcolare le spese di ebay visto che ogni mese che il prodotto è invenduto, si rinnovano), il tipo di prodotto, la classe di prodotto, il prezzo di acquisto e di vendita con il calcolo automtico delle tariffe e dell'eventuale ricavo. Questo per decidere il prezzo corretto di vendita in base al prezzo di acquisto (se devo acquitare un prodotto a 10 € da un privato, e questo su ebay è valutato 20, inserendo il prezzo di vendita vedo il ricavo netto di un eventuale vendita su ebay, so immediatamente se mi conviene comprarlo a 10 o a 5 etc etc).
    Infine c'è il gestore di spedizioni (che calcola automaticamente il costo della spedizione in base al peso del prodotto) e l'anagrafica cliente per creare un elenco di clienti che hanno acquistato su ebay e per gestire eventuali ordini multipli.
    Infatti quando il database funzionava avevo creato nella tabella anagrafica cliente un IDcliente alternativo al codice del prodotto per gestire i vari dati del cliente, ma era ancora in fase di costruzione (in effetti stavo riflettendo come fare ).

    Dulcis in fundo in base alla contabilità del prodotto singolo mi serviva sapere la contabilità generale (quanto speso in totale per l'acquisto di tutta la merce, il ricavo effettivo e virtuale delle vendite, il totale delle vendite in negozio e a parte su ebay, la differenza tra guadagno e spese del negozio fisico e spese del negozio ebay).

    E questo è quanto. Ma a quanto pare il file è andato e non riesco a recuperarlo in nessun modo e quindi mi dovrò rimettere a ricostruirlo da capo. E già mi viene da piangere (sopratutto per le formule che avevo utilizzato per il calcolo delle spese di spedizione che erano una serie incredibile di IIF).

    Ovviamente ogni suggerimento sulla costruzione del database, sull'organizzazione di tabelle e query, sul modo di non ricapitare nuovamente nel problema elencato ne 3d (anche se avevo riflettuto che FORSE bastava inserire il campo di spunta [Negozio] direttamente nella tabella Contabilità prodotto seguendo il consiglio di Bogus) e sul modo di salvare il file (anche solo per copiare qualche formula) è bene accetto!
  • Re: Espressione funziona su maschera e non su query

    Quando si struttura un database, ogni tabella deve contenere campi STRETTAMENTE legati al nome/significato della tabella stessa.

    Eddizzo ha scritto:


    Il database dovrebbe mostrare contemporaneamente Il codice del prodotto, il nome del prodotto, la descrizione
    Questi sono campi strettamente legati a Prodotti

    Eddizzo ha scritto:


    la data di acquisto e di pubblicazione su ebay (serve per calcolare le spese di ebay visto che ogni mese che il prodotto è invenduto, si rinnovano)
    Questi campi non sono strettamente legati a Prodotti, proprio perchè variano nel tempo

    Eddizzo ha scritto:


    il tipo di prodotto, la classe di prodotto
    Questi potrebbero andare a finire in una ulteriore tabella di livello superiore a Prodotti.

    La tabella Clienti va bene come sta.

    Io eliminerei tutte quelle query e rivedrei tutte le relazioni.

    Vorrei metterti in guardia sul fatto di voler usare Access come una calcolatrice. Access è un insieme di tabelle/contenitori di dati che omogeneamente devono interagire fra di loro dal punto di vista soprattutto archivistico: qualcuno non sarà daccordo con me, ma calcoli e ricalcoli in Access si possono fare, ma in maniera molto e relativamente macchinosa per la quale io delegherei questo compito a Excel che svolge questa funzione in maniera molto più snella, facile e intuitiva.
Devi accedere o registrarti per scrivere nel forum
12 risposte