Elenco casella combinata da campo maschera

di Ren il
24 risposte

Salve

Ho un problema che non riesco a risolvere/capire.

Access 2021

Ho una maschera Ordini con sottomaschera RigheOrdine.

Nella maschera Ordini seleziono un Fornitore caricando il campo IDfor dalla tabella Fornitori tramite una combobox e fino qui tutto OK.

Nella sottomaschera ho un altra combobox Materiale che preleva i dati dalla tabella Materiali (dove vi è un campo IDFor che associa il materiale al fornitore) nella quale vorrei avere solo i materiali relativi al fornitore selezionato in Ordini, e qui inizia il problema.

Io di solito filtravo i dati per la combobox mettendo come criterio della query origine dati della combo nel campo IDFor:

[Maschere]![Ordini]![IDFor]

Vi metto anche l'SQL della  query per chiarezza

SELECT TMateriali.IDMat, TMateriali.Descr
FROM TMateriali
WHERE (((TMateriali.IDFor)=[Maschere]![Ordini]![IDFor]))
GROUP BY TMateriali.IDMat, TMateriali.Descr;

ma non funziona, ossia mi seleziona correttamente i materiali solo la prima volta a tabella Ordini completamente vuota (contatore azzerato) e poi non più, l'elenco nella combo non cambia mai anche cambiando fornitore, Ho provato a fare il requery/refresh/Recalc dell maschera ma niente da fare l'elenco non cambia.

Qualcuno ha un'idea del perché ciò accada?

Grazie 1K per l'help

24 Risposte

  • Da quale evento fai partire l'aggiornamento?

  • Non so darti una risposta.

    Seleziono il fornitore nella maschera Ordini e poi seleziono il Materiale nella sottomaschera, non so a quale evento ti riferisci.

    Ho provato un ulteriore opzione, creando una query che mi estrae il Materiale in base al Fornitore attivo in Ordini e da sola funziona, ma se la associo alla combo non funziona più, fa lo stesso problema sopra indicato.

    SQL della Query

    SELECT TMateriali.IDMat, TMateriali.Descr, TMateriali.um, TMateriali.Prezzo, TMateriali.Util, TMateriali.IDFor
    FROM TMateriali
    WHERE (((TMateriali.IDFor)=[Maschere]![Ordini]![IDFor]));
    
  • Mostra i controlli che hai nella maschera.

  • Quindi:

    Ordini: idordine; blabla; idfirnitore;

    Fornitori: idfornitore; blabla;

    Atricoli; idarticolo; blabla; idfornitore;

    Ordini > fornitore (pippo)

    Aricoli: select * from aricoli where idfornitore=pippo

    Pippo puoi prenderlo dalla stessa combobox usata per ordini.

    Where idfornitore=combobox

    02/03/2024 - Ren ha scritt

    02/03/2024 - Ren ha scritto:


    ma non funziona, ossia mi seleziona correttamente i materiali solo la prima volta a tabella Ordini completamente vuota (contatore azzerato) e poi non più, l'elenco nella combo non cambia mai anche cambiando fornitore, Ho provato a fare il requery/refresh/Recalc dell maschera ma niente da fare l'elenco non cambia.

    02/03/2024 - Ren ha scritto:


    ma non funziona, ossia mi seleziona correttamente i materiali solo la prima volta a tabella Ordini completamente vuota (contatore azzerato) e poi non più, l'elenco nella combo non cambia mai anche cambiando fornitore, Ho provato a fare il requery/refresh/Recalc dell maschera ma niente da fare l'elenco non cambia.

  • Metti una join a materiali con righeordini  su idfornitore. visto che non hai un link diretto con fornitori

    Select * from materiali innerjoin righeordini on materiali.idfornitore=righeordini.idfornitore

    Where righeordini.idfornitore=combo bla bla…

    Letto con più attenzione non dando nulla per scontato, spero di non aver omesso nulla…

    Stai selezionando la lista dei materiali ma come fai a inserirli sulle righe? Materiali è un'isola collegata solo con fornitori. Ti manca la relazione righe (m) materiali (m).

    A meno che non usi una query per inserire le righe ignora la select precedente.

    Creati la relazione tra materiali e righeordini.

    Corretto…

  • Come mai non usi un id ordine?

  • 02/03/2024 - Ren ha scritto:


    ossia mi seleziona correttamente i materiali solo la prima volta a tabella Ordini completamente vuota (contatore azzerato)

    Questa non la capisco. Che significa “ a tabella ordini completamente vuota”. Poi contatore di che?

  • Altra cosa che davo per ovvia e mi è sfuggita…

    Righeordinini è collegata con una chiave composta alla master (ordini). Usa un id e togli come chiave anno e nr che non ha senso…

    Troppe cose strane.

    Rifai le tabelle oer come giusto fare.

    Metti le relazioni e lancia il wizard che fai prima.

  • 03/03/2024 - sihsandrea ha scritto:


    Come mai non usi un id ordine?

    03/03/2024 - sihsandrea ha scritto:


    Altra cosa che davo per ovvia e mi è sfuggita…

    Righeordinini è collegata con una chiave composta alla master (ordini). Usa un id e togli come chiave anno e nr che non ha senso…

    Troppe cose strane.

    Rifai le tabelle oer come giusto fare.

    Metti le relazioni e lancia il wizard che fai prima.

    L'ID Ordine è N. ordine (NO) e anno (Anno) che è quello che voglio avere sul report di stampa dell'ordine. Il NO lo incremento da codice e si azzera ogni anno nuovo.

    Ora provo a fare come dici tu e ti faccio sapere.

    Grazie

  • 03/03/2024 - Antony73 ha scritto:


    02/03/2024 - Ren ha scritto:


    ossia mi seleziona correttamente i materiali solo la prima volta a tabella Ordini completamente vuota (contatore azzerato)

    Questa non la capisco. Che significa “ a tabella ordini completamente vuota”. Poi contatore di che?

    Significa che cancello manualmente dati di prova inseriti nelle tabelle, e Compatto e Ripristino il DB per azzerare i contatori (campo chiave primaria con numerazione automatica).

  • 03/03/2024 - Ren ha scritto:


    03/03/2024 - sihsandrea ha scritto:


    Come mai non usi un id ordine?

    03/03/2024 - sihsandrea ha scritto:


    Altra cosa che davo per ovvia e mi è sfuggita…

    Righeordinini è collegata con una chiave composta alla master (ordini). Usa un id e togli come chiave anno e nr che non ha senso…

    Troppe cose strane.

    Rifai le tabelle oer come giusto fare.

    Metti le relazioni e lancia il wizard che fai prima.

    L'ID Ordine è N. ordine (NO) e anno (Anno) che è quello che voglio avere sul report di stampa dell'ordine. Il NO lo incremento da codice e si azzera ogni anno nuovo.

    Ora provo a fare come dici tu e ti faccio sapere.

    Grazie

    Puoi sempre inserire nr e data ma non da usare come chiave.

    Comsidera che la chiave primaria diventa chiave esterna per le righe e li non ti servono data e nr ordine.

  • 03/03/2024 - Ren ha scritto:


    Compatto e Ripristino il DB per azzerare i contatori (campo chiave primaria con numerazione automatica).

    Sei sicuro che compattando e ripristinando il db azzeri i contatori. E pure che fosse a che prò?

    Cmq ci sono un po' di cose strane a mio parere.

Devi accedere o registrarti per scrivere nel forum
24 risposte