Maschere foglio dati e caselle combinate

di
Anonimizzato12662
il
18 risposte

Maschere foglio dati e caselle combinate

Ho creato un db per memorizzare il noleggio di apparecchiature.
ho una tabella prodotti
id prodotto, codice, descrizione ecc. questa tabella è collegata ad una tabella seriali con idseriale, s/n, idprodotto.
ho altre due tabelle poi contratti e dettagli contratti che sono in relazione tra di loro per un id
quando creo la maschera contratto con la sotto maschera. In sottomaschera voglio che su una casella combinata escano tutti i prodotti
sulla successiva tutte le descrizioni dei prodotti e per i seriali escano solo i seriali rispettici a quel codice prodotto.
Diciamo ce tutto questo riesco a farlo alla perfezione.
Il problema nasce quando magari voglio sulla riga andare a modificare il codice dalla casella combinata. Questo lo faccio ma la lista seriali rimane sempre del codice vecchio.
Se faccio me.casellacombinata.requery però funziona, ma quando poi inserisco la riga successiva anche se cambio codice la lista dei seriali rimane quella della prima riga, se faccio di nuovo requery allora si aggiorna la lista della seconda riga ma quella della prima riga si svuota, se ci clicco sopra sorpresa la lista dei seriali adesso rispoetta il codice della seconda riga.

La mia domanda è posso far si che nella condizione della query che faccio nella casella combinata indico magari la riga o il record in modo da poter differenziare ogni riga?
o devo fare questo non nella query ma nel comando requery?

Spero di essere stato chiaro e grazie per l'aiuto.

18 Risposte

  • Re: Maschere foglio dati e caselle combinate

    A me non sono chiare alcune cose:
    1. Parli di una casella combinata in DettagliContratti che guarda IDProdotto, ma non hai mai detto che esiste la relazione Prodotti.IDProdotto uno-a-molti con DettagliContratti.IDProdotto. È corretta questa mia osservazione?
    2. Non ho capito il significato della tabella Seriali. A cosa serve?
    3. Puoi raccontare esattamente come hai costruito la query che, immagino, serve a far funzionare la casella combinata?
    4. Non ho capito tutto il problema nel suo complesso. Dici che Requery funziona, ma poi non ho capito cosa ti aspetti che accada alla tua casella combinata. Puoi spiegare meglio questo passaggio? Puoi farlo con qualche record di esempio?
  • Re: Maschere foglio dati e caselle combinate

    TBL_CondizioniContratto
    idcondizionicontratto
    idstampante
    idserialnumber
    idcontratto
    .....
    ....

    TBL_Stampanti
    idstampanti
    codicestampante
    .....

    TBL_Serialnumber
    idsn
    idstampante
    ....
    ....

    le relazioni
    lato 1 TBL_Contratti.idcontratti lato molti TBL_CondizioniContratto.idcontratto
    lato 1 TBL_Stampanti.idstampanti lato molti TBL_CondizioniContratto.idstampante
    lato 1 TBL_Serialnumber.idsn lato molti TBL_CondizioniContratto.idserialnumber
    lato 1 TBL_Stampanti.idstampanti lato molti TBL_Serialnumber.idstampante

    ho creato una maschera con una sottomaschera
    la maschera principale ha una la seguente query

    SELECT TBL_Contratti.IDContratti, TBL_Contratti.DataContratto, TBL_Contratti.NumeroContratto, TBL_Contratti.cliente, TBL_Contratti.agente, TBL_Contratti.finanziaria, TBL_Contratti.TotaleFinanziamento, TBL_Contratti.CodicePratica, TBL_Contratti.DurataContratto, TBL_Contratti.DecorrenzaContrattodal, TBL_Contratti.DecorrenzaContrattoAl, TBL_Contratti.Fatturazionecanoni, TBL_Contratti.FattCopieEccedenti, TBL_Contratti.tipopagamento, TBL_Contratti.scadenzapagamento, TBL_Clienti.idclienti, TBL_Clienti.RSClienti, TBL_Clienti.Pivaclienti, TBL_Clienti.CodFiscClienti, TBL_Clienti.Viasedelegale, TBL_Clienti.IdComuneClienti, TBL_Clienti.TelClienti, TBL_Clienti.FaxClienti, TBL_Clienti.MailClienti, TBL_Clienti.Viadestinazionemerce, TBL_Clienti.IdComuneDestinazionemerce, TBL_Clienti.Iban, TBL_Clienti.Banca, TBL_Clienti.Filiale, TBL_Clienti.Codicecliente
    FROM TBL_Clienti INNER JOIN TBL_Contratti ON TBL_Clienti.[idclienti] = TBL_Contratti.[cliente];



    la sottomaschera punta invece a TBL_CondizioniContratto
    in questa sotto maschera ho creato 3 caselle combinate
    1) SELECT TBL_Stampanti.Idstampanti, TBL_Stampanti.CodiceStampanti
    FROM TBL_Stampanti
    ORDER BY TBL_Stampanti.[CodiceStampanti];

    2)SELECT TBL_Stampanti.Idstampanti, TBL_Stampanti.DescrizioneStampanti
    FROM TBL_Stampanti
    ORDER BY TBL_Stampanti.[DescrizioneStampanti];


    quella che mi da problemi è questa
    SELECT TBL_SerialNumber.idsn, TBL_SerialNumber.SerialNumber, TBL_SerialNumber.Noleggiata, TBL_SerialNumber.IdStampante, TBL_SerialNumber.Prezzo
    FROM TBL_SerialNumber
    WHERE (((TBL_SerialNumber.IdStampante)=[Maschere]![FRM_Contratti]![FRM_ContrattiDettagli]![idstampante]))
    ORDER BY TBL_SerialNumber.SerialNumber;


    in realtà come inizio l'inserimento della prima riga seleziono il codice e mi da la descrizione stampante vado su seriali e mi da solo i seriali di quella stampante, fin quà tutto bene
    se cambio codice stampante poichè ho attivato il requery al click sulla casella combinata codice si aggiorna il seriale e mi da i seriali del nuovo codice stampante
    il problema nasce come inserisco nella sottomaschera FRM_ContrattiDettagli un secondo record come clicco sulla casella combinata codice e scelgo un codice di un'altra stampante automaticamente anche
    la prima riga o le righe dei record superiori nella casella combinata dei seriali prendono come query quella casella combinata seriali quelli corrispondenti al codice dell'ultimo record
    esempio

    codice descrizione s/n
    m300 stampante1 s/n stampante1 cosi funziona bene

    codice descrizione s/n
    m300 stampante1 s/n stampante2
    1440 stampante2 s/n stampante2 cosi invece da errore


    codice descrizione s/n
    m300 stampante1 s/n stampante3
    1440 stampante2 s/n stampante3
    m356 stampante3 s/n stampante3 cosi l'errore è acnora pi' evidente



    Mi andrebbe bene anche poter aprire una nuova maschera con doppio click cliccando magari su s/n dove già o creato una casella combinata che filtra per id stampanti i rispettivi seriali il problema che non so come poi passare il seriale selezionato alla maschera sottostante non attiva FRM_ContrattiDettagli

    spero di essere stato chiaro.
    grazie per l'aiuto
  • Re: Maschere foglio dati e caselle combinate

    polling ha scritto:


    TBL_CondizioniContratto
    idcondizionicontratto
    idstampante
    idserialnumber
    idcontratto
    .....
    ....
    Per me questa tabella ha un campo di troppo. Non capisco il significato di questa tabella...devi spiegarmelo a parole e magari qualche esempio (non tecnicamente). Per me un Contratto in generale prende in considerazione il modello Stampante indipendentemente dal suo SerialNumber====>eliminerei il campo IDSerialNumber. Se invece è importante il campo IDSerialNumber (ma non ne conosco i motivi)======>occorre eliminare il campo IDStampante.
    Possiamo focalizzare l'attenzione su questi aspetti?
  • Re: Maschere foglio dati e caselle combinate

    In realtà ho pensato cosi.

    Ho una stampante che ha un suo seriale io la noleggio ad un cliente e scrivo il contratto poi successivamente mi reco dal cliente per cambiare pezzi o toner e farò cosi degli interventi.
    Il mio riferimento non sarà la stampante ma il seriale. questa stampante potrebbe poi successivamente essere noleggiata ad altro cliente. Faccio altro contratto altre riparazioni ecc.
    Io nel tempo voglio sapere tutta la storia di quella stampante e lo posso solo fare dal seriale.

    Ogni stampante ha un seriale ed il seriale ha il prezzo, questo per non fare il db con la gestione articoli e copiare un dato da una tabella ad un altra perdendo la normalizzazione
    il contratto ha un cliente e ha una o piu' stampanti con un seriale e con un flag noleggiata o no e con il prezzo di acquisto non modificabile.

    Tutto questo perchè io voglio poi avere dei report che mi faccia capire quanto sto guadagnando su quella stampante mettendo ricambi toner e riparazioni.
    In realtà quello che piu' mi interessa e proprio il seriale perche io da qui poi voglio vedermi tutta la vita della stampante noleggiata.

    Potrei aver ragionato in modo confuso ma non riuscivo nella progettazione a trovare soluzione migliore.
    Accetto suggerimenti, e soprattuto vorrei capire a questo punto come avresti risolto tu il problema.
  • Re: Maschere foglio dati e caselle combinate

    Volevo comunicare che ho risolto in questo modo.
    Ha lasciato la casella combinata per il codice stampante e per la stampante. Per il seriale ho fatto in modo che all'evento click si apra una maschera con un elenco dove filtro i seriali per stampante e ho fatto anche una casella dove posso selezionarli. Ho creato poi un tasto che fa questo
    Forms![FRM_Contratti]![FRM_ContrattiDettagli]![idserialnumber].Value = Me.idsn
    DoCmd.Close
    e funziona alla perfezione.
    Comunque rimango sempre in ascolto per qualsiasi altra soluzione migliore della mia.
  • Re: Maschere foglio dati e caselle combinate

    polling ha scritto:


    Ho una stampante che ha un suo seriale io la noleggio ad un cliente e scrivo il contratto poi successivamente mi reco dal cliente per cambiare pezzi o toner e farò cosi degli interventi.
    Il mio riferimento non sarà la stampante ma il seriale. questa stampante potrebbe poi successivamente essere noleggiata ad altro cliente. Faccio altro contratto altre riparazioni ecc.
    Io nel tempo voglio sapere tutta la storia di quella stampante e lo posso solo fare dal seriale.
    Questa considerazione aveva già la seguente risposta:

    OsvaldoLaviosa ha scritto:


    Se è importante il campo IDSerialNumber======>occorre eliminare il campo IDStampante
    tutto il resto va bene.
  • Re: Maschere foglio dati e caselle combinate

    Ok e poi come faccio a risalire al nome stampante e alla descrizione? Perche mi dici di eliminare idstampante da quella tabella?
    Potresti spiegarmi per quale motivo?
  • Re: Maschere foglio dati e caselle combinate

    Ho provato a cancellare dalla TBL_CondizioniContratto idstampante ma non so come gestire la casella combinata dove poi andro a visualizzare codice stampante e descrizione. Dove memorizzo i dati di quella casella se la cancello?
    Se cancello serial number sempre dove memorizzo quel dato per la tabella condizioni contratto'
  • Re: Maschere foglio dati e caselle combinate

    polling ha scritto:


    come faccio a risalire al nome stampante e alla descrizione? Perche mi dici di eliminare idstampante da quella tabella?

    polling ha scritto:


    ho provato a cancellare dalla TBL_CondizioniContratto idstampante ma non so come gestire la casella combinata dove poi andro a visualizzare codice stampante e descrizione. Dove memorizzo i dati di quella casella se la cancello?
    Se cancello serial number sempre dove memorizzo quel dato per la tabella condizioni contratto'
    Per entrambe le domande, occorre impostare una query dove importi le tabelle TBL_Stampanti e TBL_SerialNumbers. Quando importi entrambe le tabelle, noterai la linea di join che le collega. Trascinando gli opportuni campi nella query puoi vedere tutte le informazioni della stampante relativo al suo IDSerialNumber.
    Ai fini di una casella combinata per TBL_CondizioniContratto è utile trascinare come primo campo IDSerialNumber.
  • Re: Maschere foglio dati e caselle combinate

    Ho fatto diverse prove ma non riesco a fare a meno dei due Se è importante il campo IDSerialNumber e IDStampante.
    In realta nella maschera creata da una query io voglio poter trovare una stampante per codice descrizione e poi selezionare i rispettivi seriali che sono molti verso la stampante. Perciò ho optato per i due campi uno dove memorizzo idstampante e altro dove memorizzo l' idseriale. diveramente come dici tu non riesco a creare le caselle combinate dove posso rilevare i dati. Se elimino idstampante dalla tabella DettagliContratti non so in origine controllo della casella combinata cosa mettere se metto niente perdo le relazioni tra le tabelle e non mi va bene.

    Potresti spiegarmi meglio con un esempio a modo tuo come risolvere.
    Grazie...
  • Re: Maschere foglio dati e caselle combinate

    Allora ho accettato il tuo consiglio e ho eliminato idstampante. Ho proceduto a creare una nuova maschera dove ho una quey che seleziona i campi delle tabelle, poi ho due caselle di riepilogo, una per le stampanti e quando clicco nella seconda casella di riepilogo mi trovo tutti i seriali. Seleziono quello che mi interessa e ho questi aggiornati nei campi di questa maschera che sono codice stampante descrizione stampante marca e serial number. Poi ho fatto un tasto che prende il valore dell id s/n e lo porta nel form contratto. Prima che togliessi il campo id stampante funzionava adesso la stessa istruzione mi da errore seguente :
    Errore di run-time'-2146500594(800f00e)': Metodo 'Item' dell 'oggetto 'forms' non riuscito

    l'istruzione che eseguo è questa

    Forms![FRM_Contratti]![FRM_ContrattiDettagli]![idserialnumber].Value = Me.idsn

    dove sbaglio come posso passare dal form attivo a quello aperto ma non attivo i dati che mi servono?
  • Re: Maschere foglio dati e caselle combinate

    IDSerialNumber / IDStampante (prelevato dalla tabella Stampanti) / MarcaStampante / ModelloStampante
    514 / 7016 / Epson / P300
    802 / 44 / HP / S66034
    34567 / 881290 / Lexmark / L800
    32460 / 415 / Epson / P600
    3405 / 7016 / Epson / P300
    6547 / 7016 / Epson / P300

    Ricordando che la query deve importare sia la tabella SerialNumers sia Stampanti, diciamo che ho abbondato nell'inserire i campi (quelli che vedi in alto) per rendere la lettura più realistica. Come puoi notare il modello Epson P300 ha un IDStampante=7016 (sempre), ma avrà 3 diversi SerialNumbers perchè 3 persone diverse lo hanno acquistato (nei Contratti). Nella tabella/maschera Contratti, quando vai a scegliere IDSerialNumbers ti porterai appresso tutti gli altri valori di riferimento.
    Se il tuo problema, poi consiste nel voler vedere anche i restanti campi per capire meglio di quale Marca/Modello stiamo parlando, in maschera Contratti, potresti impostare delle caselle di testo "libere" e sfruttare la proprietà Column della casella combinata. Ricordando che Access ha una numerazione di Column in questo modo:
    1a colonna = Column(0)
    2a colonna = Column(1)
    3a colonna = Column(2)
    ecc...
    potresti mettere in maschera 2 "caselle di testo" con le seguenti sintassi (sfruttando l'esempio da me riportato):
    =[Maschere]![NomeMaschera]![NomeCampoCasellaCombinata].Column(2)
    =[Maschere]![NomeMaschera]![NomeCampoCasellaCombinata].Column(3)

    Tutto questo discorso presuppone che tu abbia impostato correttamente la casella combinata su 4 campi con coerenti larghezze colonne...ecc..ecc...trovi molti altri thread su questo argomento...
  • Re: Maschere foglio dati e caselle combinate

    Grazie, ma ho risolto creando una nuova maschera con la query che suggerivi. In questa maschera ho due elenchi uno con le stampanti che posso ricercare per codice e una con i soli seriali inseriti per quel codice. Ho messo poi dei campi che si aggiornano in base alle selezioni ed un tasto che inserisce questi dati nella maschera non attiva contratti.
    Non so se posso continuare in questo post, ma il mio problema adesso è quando seleziono un codice stampante dalla maschera contratti gia inserito in questa maschera dove vorrei cambiare il seriale mi ritrovo che, questo visto che gestisco anche il campo noleggiata vero/falso, ha un valore sbagliato percio' se inserisco un alta stampante con lo stesso codice mi ritrovo che posso inserire una seconda volta lo stesso seriale.
    DImmi se posso postarti i codici vba in questa discussione o crearne un altra, visto che come ti accenavo il problema iniziale del post è stato risolto.
  • Re: Maschere foglio dati e caselle combinate

    polling ha scritto:


    Non so se posso continuare in questo post
    Adesso è indifferente se continuare su questo thread o crearne un altro.

    polling ha scritto:


    se inserisco un altra stampante con lo stesso codice mi ritrovo che posso inserire una seconda volta lo stesso seriale
    Non avrei mai immaginato che ciò potesse mai accadere. Due SerialNumber uguali per due stampanti diverse? Sei sicuro? In teoria ciò potrebbe anche accadere, ma non lo avevo affatto messo in conto. Se davvero le cose stanno così, io rivedrei nuovamente la struttura tabelle, così:

    Clienti
    IDCliente
    Nome
    Cognome

    Stampanti
    IDStampante
    Marca
    Modello

    Contratti
    IDContratto
    Data (ce l'ho aggiunto io adesso)
    SerialNumber (da digitare manualmente qui)
    IDCliente
    IDStampante

    Ovvie relazioni uno-a-molti.
    Tutto sommato, diventa anche più semplice.
    Scusa se ti costringo a rivedere tutta la struttura, nessun altro utente è intervenuto a far notare questo eventuale baco, ma, come vedi, posso sbagliare anch'io.
    Sia chiaro che il nuovo assetto tabelle nulla toglie a ciò che di buono si può dire sulle caselle combinate ecc...
    L'ultimo tuo post non l'ho capito affatto.
Devi accedere o registrarti per scrivere nel forum
18 risposte