Newsgroup: it.comp.lang.delphi
Titolo: dblookupcombobox o dbcombobox per tabelle correlate

ciao ragazzi.
come al solito sono a chiedervi una cosa che pensavo fosse una stupidata invece non riesco a farlo :|
 
in pratica ho 3 tabelle:
 ANAGRAFICA con alcuni campi tra cui un codicedi un altra tabella lookup.
 
ZONE,  con due campi (codice e descrizione) dove codice è quello legato alla anagrafica.
 
e poi ho un altra tabella:
LUOGHI, tra i cui campi ho descrizione  e codicezona, che è legato alla tabella zone.
 
 
in pratica vorrei avere due lookup  o due lookupcombobox che funzionino da filtro:
cioe' scelgo la zona e poi mi carica tutti i luoghi di quella zona,
una sorta di.
 
select * from luoghi where luoghi.codicezona = zone.codice.
 
ho fatto cosi:
dblookupcombobox_zone:
listsource: datasource legato alla tabella zone.
listfield:descrizione 
keyfield: codice tabella zone
datasource:datasorce legato alla tabella anagrafica
datafield: campo codicezona della tabella anagrafica.
 
 
poi un altra dblookupcombobox per la tabella luoghi:
listsource:datasoirce legato alla tabella luoghi;
listfield:campo descrizione luogo;
keyfield: campo codice zona della tabella luogo
 
 
pensavo che cosi quando scelgo una zona mi facesse vedere solo i luoghi di quella zona ma non è cosi'...
 
 
in pratica se clicco sulla lista luoghi nn succede nulla e quando clicco sulla lista zone... sembra quasi che mi selezioni le righe della lista luoghi e non mi fa scegliere neanche piu un luogo.
 
 
qualcuno potrebbe darmi una dritta per sta cosa?.
 
grazie di cuore.
 

ovviamente ho anche sbagliato a scrivere ^_^
 
 
ciao ragazzi. 
come al solito sono a chiedervi una cosa che pensavo fosse una stupidata invece non riesco a farlo :| 
 
in pratica ho 3 tabelle: 
 ANAGRAFICA con alcuni campi tra cui un codicedi un altra tabella lookup. 
 
ZONE,  con due campi (codice e descrizione) dove codice è quello legato alla anagrafica. 
 
e poi ho un altra tabella: 
LUOGHI, tra i cui campi ho descrizione  e codicezona, che è legato alla tabella zone. 
 
 
in pratica vorrei avere due lookup  o due lookupcombobox che funzionino da filtro: 
cioe' scelgo il luogo e poi mi carica la zona relativo a quel luogo, 
una sorta di. 
 
select * from zone where zone.codicezona = luogo.codicezona
 
ho fatto cosi: 
dblookupcombobox_zone: 
listsource: datasource legato alla tabella zone. 
listfield:descrizione 
keyfield: codice tabella zone 
datasource:datasorce legato alla tabella anagrafica 
datafield: campo codicezona della tabella anagrafica. 
 
 
poi un altra dblookupcombobox per la tabella luoghi: 
listsource:datasoirce legato alla tabella luoghi; 
listfield:campo descrizione luogo; 
keyfield: campo codice zona della tabella luogo 
 
 
pensavo che cosi quando scelgo una zona mi facesse vedere solo i luoghi di quella zona ma non è cosi'... 
 
 
in pratica se clicco sulla lista luoghi nn succede nulla e quando clicco sulla lista zone... sembra quasi che mi selezioni le righe della lista luoghi e non mi fa scegliere neanche piu un luogo. 
 
 
qualcuno potrebbe darmi una dritta per sta cosa?. 
 
grazie di cuore. 
 
 
rileggendo sta cosa mi è passata in mente che prob c'e' qualcosa di sbagliato nella logica:
teoricamente quando scelgo un luogo, dovrei caricare sempre una sola zona.
percui forse non serve una lookup per le zone? forse basterebbe un dbedit ?
 
son fuso.. tra l'ora tarda e le 15 ore davanti al pc.......
 
 
 

 pensavo che cosi quando scelgo una zona mi facesse vedere solo i luoghi di 
 
Che vuol dire "pensavo"?
Il sistema non sa che a fronte di una selezione "a" deve filtrare le voci selezionabili dall'elenco "b" e cosi via, salvo che non glielo dica tu stesso.
 
La prima domanda è con quanti record hai a che fare.
La seconda è se hai valutato soluzioni alternative alle dbcombobox.
 
A.

i luoghi saranno un migliaio, mentre le zona una decina.
 
Per ora ho risolto con due dblookupdombobox....
 
da quella dei luoghi, quando scelgo il luogo mi carica quella delle zona... non mi piace molto perche appunto nella dblookup non posso scrivere, ma solo selezionare ( e tra un migliaio non è la cosa più comoda), ma vabbè.


 
Ho un altra domandina :)
 
alla fine ho messo una dblookupdbcombobox che alla scelta della riga modifica la query della tabella collegata e carica in un altra dblookupdbcombobox i valori "figli" della padre..
 
 
 
quello che pero' vorrei fare io è poter scrivere nella combo...ma oter scegliere solo e solamente valori presenti in lista..... per poi caricare un'altra combo con record figli della prima.
 
 
se usa una dbcombobox non riesco a farlo...posso scrivere e ricercare i valori ma posso scrivere anche qualcosa che non è in lista.. e poi no ho il campo chiave su cui poter fare la select sulla tabella figlia.
 
 
 
 

Ciao,
probabilmente quello che sto per scrivere fara' venire il mal di pancia a 
molti !!!!
Poi c'e' da tenere in considerazione la grandezza del tuo db, ovvero quanti 
record devi gestire.
Nel mio caso ho un db di circa 3 milioni di record, con 4 file indice.
 
Detto cio' la strada che ho scelto e' stata quella di NON usare i componenti 
DB aware (anche se sono quelli
di piu' facile impiego).
 
Quando uso i combobox, entro nella form, imposto la tabella con il file 
indice desiderato, e la filtro secondo le impostazioni.
Dopo il filtro avro' qualche decina di migliaio di record e popolo le 
combobox (il tutto impiega poco piu' di 1 secondo),
ovviamente la prima combobox sara' in sola lettura dato che i vari items 
serviranno per posizionarmi sui record corrispondenti.
Nella seconda combobox, che non e' in sola lettura, ho caricato uno dei 
campi secondari (tipo descrizione) che potro' editare
per esempio benz*; alla pressione del tasto enter la tabella sara' filtrata 
con la nuova stringa contente benz* (benzina, benzene ecc..)
 
Sempre nel campo "non diciamo stupidaggini", se lavori con i componenti DB 
aware tutte le modifiche che fai in quei componenti (dbedit per esempio)
vengono immediatamente riflesse sul record (salvate), aspetto che a me non 
piace molto.
 
Diciamo che gli unici componenti db aware che uso (per ragioni di comodita') 
sono due griglie
SMDBGrid della scalabium e la DBAdvGrid della TMS, e le uso rigorosamente in 
sola modalita' lettura.
 
Saluto sperando di essere stato utile e di non aver contribuito allo 
sbiancamento di capelli di che ne sa piu' di me ....!!
 
Ciao
 
Daniele