Relazione tra 2 caselle combinate di una maschera

giovedì 22 novembre 2007 - 18.18

salinis Profilo | Junior Member

In una maschera ho creato una casella combinata associata ad una query di unione. La query di unione è composto da due campi: Matricole, Descrizione. Siccome il campo matricole contiene dati che differiscono in base alla descrizione: esempio A000 descrizione PC , B000 descrizione monitor ecc. ecc. All' interno della maschera esiste un 'altra casella combinata (B) che include la tipologia degli articoli cioè PC , Monitor ecc.... Il mio obiettivo è che quando seleziono all'interno della casella combinata (A)una tipologia di articolo ad esempio PC nella seconda casella combinata (B)si apre solo le matricole associate ai PC quindi A000, A001, A002 ecc.
In conclusione una relazione tra le due caselle combinate. Come posso fare?


Grazie.

SSUPERPIPPO Profilo | Guru

Con cosa hai realizzato le tue maschere?
Che database usi?


http://blogs.dotnethell.it/alebadalin

salinis Profilo | Junior Member

Giusto.

Access 2003

salinis Profilo | Junior Member

Ho 2 caselle combinate.

1 casella combinata: campo2: descrizione articolo.
2 casella combinata: campo1: matricola.

Nota: Il numero di matricola varia a seconda della descrizione articolo.

Quando seleziono la 1 casella combinata cioè la descrizione articolo, nella seconda casella combinata mi si deve aprire il campo matricola ma filtrato solo con le matricole associate alla descrizione articolo selezionata dalla prima casella combinata.
Praticamente nella seconda casella combinata deve effettuare un filtro sulla base della selezione della prima casella combinata.

SSUPERPIPPO Profilo | Guru

>Ho 2 caselle combinate.
>
>1 casella combinata: campo2: descrizione articolo.
>2 casella combinata: campo1: matricola.
>
>Nota: Il numero di matricola varia a seconda della descrizione
>articolo.
>
>Quando seleziono la 1 casella combinata cioè la descrizione articolo,
>nella seconda casella combinata mi si deve aprire il campo matricola
>ma filtrato solo con le matricole associate alla descrizione
>articolo selezionata dalla prima casella combinata.
>Praticamente nella seconda casella combinata deve effettuare
>un filtro sulla base della selezione della prima casella combinata.

Devi agire via codice VBA.

Dovresti intercettare l'evento 'Su modifica' (change) della prima caselle combinata e inserire il codice che modifichi la query di selezione (proprietà recordset) della seconda Combobox e poi esegua un refresh della stessa (metodo requery).

Non è difficile ma devi avere un minimo di conescenze di VBA.

Ciao

Alessandro


http://blogs.dotnethell.it/alebadalin

salinis Profilo | Junior Member

Non essendo pratico di codice VBA non è che saresti così gentile nell' inviarmi un piccolo mdb come esempio?


GRAZIE 1000.

SSUPERPIPPO Profilo | Guru

Lo preparo e te lo mando, abbi un pò di pazienza perchè sono un pò incasinato con il lavoro.

Ciao

Ale

http://blogs.dotnethell.it/alebadalin

salinis Profilo | Junior Member

ok grazie in anticipo......

salinis Profilo | Junior Member

Saresti così gentile nell'inviarmi il database come esempio?


Grazie 1000

salinis Profilo | Junior Member

Ale nulla ancora?

Grazie

salinis Profilo | Junior Member

Help Help

Sono riuscito ad associare ad ogni casella combinata una query però la seconda casella non mi consente di selezionare i valori. Mi filtra i valori sulla base della scelta effettuata della prima casella combinata ma non mi consente di selezionare il valore desiderato. Potrebbe esserci un problema di routine.
Esempio: Quando seleziono nella prima casella combinata il primo articolo mi aggiorna nella seconda casella combinata i valori associati all articolo però mi fa selezionare solo il primo dall'elenco.

Come posso fare???

SSUPERPIPPO Profilo | Guru

Ciao, scusa se non ti ho risposto prima ma sono un pò di giorni che sono nella cac.. con il lavoro...

Potresti allegare la parte del tuo database che riguarda la problematica? Così vado meglio a capire la tua problematica avendo anche le tabelle del database di riferimento.

Attendo, ciao

Ale

http://blogs.dotnethell.it/alebadalin

salinis Profilo | Junior Member

Ti invio in allegato il database di esempio.

Nella seconda casella combinata non mi fa selezionare i valori o meglio solo B002 posso selezionare e gli altri invece ?



Grazie

salinis Profilo | Junior Member

Novità?

SSUPERPIPPO Profilo | Guru

Ora vedo...

http://blogs.dotnethell.it/alebadalin

SSUPERPIPPO Profilo | Guru

Scusa se mi permetto ma così a buttata d'occhio mi sembra ci sia un pò di confusione...

ti chiedo un paio di chiarimenti prima di continuare con l'analisi del tuo problema:

Come mai utilizzi una tabella diversa per ogni famiglia di prodotto? Non ti sembra che sia decisamente poco flessibile?
Se tu creassi un'unica tabella, visto che i dati ho visto che sono omogenei, inserendo un campo che identifichi la tipologia di prodotto (campo collegato magari ad una tabella Tipologie), credo che la gestione risulterebbe alquanto semplificata: la prima combo andrebbe semplicemente collegata alla tabella Tipologie e nella seconda combo andrebbe collegata alla tabella Prodotti (complessiva) semplicemente filtrando per il codice Tipologia selezionato nella prima combo.

Cosa ne pensi? C'è magari un motivo particolare per cui hai così strutturato il database?

Attendo tue nuove

Alessandro

http://blogs.dotnethell.it/alebadalin

salinis Profilo | Junior Member

Sarebbe perfetto. La mia esigenza è che in base alla tipologia dell' articolo ci sia un contatore diverso e soprattutto predefinito. Il contatore che viene generato corrisponde alla matricola dell' articolo.
La tua soluzione mi va benissimo e sarebbe una grandissimo risultato se si può applicare questo criterio. La matricola deve essere generata automaticamente ad ogni inserimento e deve mutare in base alla selezione della tipologia dell'articolo.

Mi aiuti?

SSUPERPIPPO Profilo | Guru

La soluzione è gestire manualmente l'assegnazione del codice e non delegare al contatore automatico.

Io creerei un campo numerico contenente il codice ID progressivo (sempre generato manualmente) e un campo tipologia (testo di 1 carattere che conterrà la sigla A, B, ecc)

A questo punto quando inserisci un nuovo record non farai altro che eseguire una query di questo tipo: "SELECT MAX(Id) FROM TabellaArticoli WHERE TipoArticolo='A'" per ricavare il codice con valore più alto, aggiungi 1 e ottieni il valore da assegnare al campo ID del nuovo record.

Spero di essere stato sufficientemente chiaro

Se hai bisogno di help sono a disposizione

Ciao

Alessandro

http://blogs.dotnethell.it/alebadalin

salinis Profilo | Junior Member

Mi potresti fare un esempio pratico sul database che ti ho inviato come esempio?



Gentilissimo

salinis Profilo | Junior Member

Ale niente ancora?

Scusami ti ricordi anche del problema delle caselle combinate?


Grazie

salinis Profilo | Junior Member

Ci sono novità per me?


Help Help Help

SSUPERPIPPO Profilo | Guru

Sto rivedendo il database e anche la maschera con le combobox...
devi avere un pò di pazienza perchè ci vuole del tempo, sono un pò sommerso dal lavoro, e lo sto preparando nei ritagli di tempo.

A presto, ciao

Alessandro



http://blogs.dotnethell.it/alebadalin

salinis Profilo | Junior Member

OK Grazie...

SSUPERPIPPO Profilo | Guru

Caro amico, sto vedendo di sistemare il tuo progetto ma veramente sono in difficoltà...
ci sono talmente tante cose da rivedere che mi sà che sto prima a rifarlo di sana pianta...

Io ti posso preparare velocemente un nuovo database con una tabella Prodotti, una Tipologia prodotti e una maschera di inserimento/barra ricerca per tipologia/matricola con creazione automatica del codice progressivo matricola... ti può andar bene? poi vedi tu come adattare il tutto al tuo progetto.



http://blogs.dotnethell.it/alebadalin

salinis Profilo | Junior Member

OK Perfetto.

Ti ringrazio per la tua disponibilità.

Lo posso adattare tranquillamente al mio progetto. Importante è per me risolvere il problema delle caselle combinate, la generazione delle matricole sulla base della selezione della tipologia articolo.
Ti sollevo un'altra mia esigenza non proritaria come i due punti precedenti. Ho il campo: flag garanzia. Vorrei che sulla base della durata di garanzia che inserisco, il flag o il baffetto si seleziona o si deseleziona in automatico. Magari un mese prima della scadenza mi evidenzia un messaggio che tra un mese il prodotto scade.


Grazie ancora per l'aiuto.




SSUPERPIPPO Profilo | Guru

Ciao,

ti allego l'MDB di esempio.

Ho creato un'unica tabella Hardware con i campi TipologiaProdotto e IDMatricola (campi chiave).

Ho Creato le due combo, la prima si collega direttamente alla tabella TipologieProdotti e la seconda è associata ad una query che prende i dati dalla tabella Hardware filtrandoli per la tipologia selezionata, visualizzando per concatenazione di stringhe il campo matricola (Tipologia+IDMatricola).

Selezionando una voce dalla combo Matricole, viene modificata la query della form filtrandola per la selezione effettuata.

Ho infine creato un pulsante Nuovo per aggiungere un nuovo record. Qui via codice determino l'ID massimo per la tipologia di prodotto selezionato e aggiungendo 1 ottengo il primo numero matricola disponibile e lo visualizzo nel relativo campo in modalità inserimento.

Spero ti sia tutto chiaro, in caso contrario sono a disposizione.

Ciao

Alessandro

P.S.: Ho buttato giù la cosa molto velocemete per cui potrei aver fatto qualche cazzata, comunque quello che ti serviva funziona.



http://blogs.dotnethell.it/alebadalin

salinis Profilo | Junior Member

Ho provato sul mdb che mi hai inviato come esempio ma non mi funziona. Quando aggiungo un record nel combo delle matricole non mi evidenzia la matricola. Come mai?


Grazie

SSUPERPIPPO Profilo | Guru

Nel mdb che ti ho mandato ho inserito anche un esempio.
Apri la maschera, seleziona la tipologia "Docking Station".
Ora nella casella 'matricole' troverai due numeri di matricola, se selezioni il primo ti verranno visualizzati nella maschera i dati relativi al primo, idem se selezioni il secondo.
Se tu ora inserisci un nuovo record con l'apposito pulsante, vedrai che automaticamente il record generato acquisirà un progressivo che è riferito alla tipologia selezionata.
Una volta inserito il nuovo record, se tu selezionerai di nuovo la casella matricola ti apparirà il nuovo numero di matricola composto dalla sigla identificatrice della tipologia concatenata con il relativo progressivo numerico.

Spero ti sia chiaro, ciao

Alessandro

http://blogs.dotnethell.it/alebadalin

salinis Profilo | Junior Member

OK Perfetto.

Aggiungo i record attraverso una query di accodamento. E' possibile applicare la funzione della generazione delle matricole sulla query di accodamento e non sul comando nuovo?


Grazie per la tua disponibilità

SSUPERPIPPO Profilo | Guru

>OK Perfetto.
>
>Aggiungo i record attraverso una query di accodamento. E' possibile
>applicare la funzione della generazione delle matricole sulla
>query di accodamento e non sul comando nuovo?
>
>
>Grazie per la tua disponibilità

Perchà no! Usi l'istruzione che ho scritto io per determinare il primo numero disponibile e lo passi alla query di accodamento come parametro.

Ciao

Alessandro

http://blogs.dotnethell.it/alebadalin

salinis Profilo | Junior Member

Ho difficoltà a riportare la funzione nel cmd inserisci. Praticamente nella maschera ho integrato un comando "inserisci" che mi lancia una query di accodamento.
Potresti applicare questa funzione in sostituzione del comando nuovo per la generazione delle matricole nell' esempio che gentilmente mi hai inviato precedentemente?


grazie
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5