Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: ffabio - Gennaio 11, 2012, 12:46:31 pm

Titolo: tdbsimple combobox a cascata.
Inserito da: ffabio - Gennaio 11, 2012, 12:46:31 pm
Ciao a tutti, qualcuno sa come si possono gestire tdbsimple combobox a cascata.

la classica regione - provincia - cittą ???

scelgo prima la regione poi da quella la provincia ecc ????

se scelgo subito la cittą vorrei recuperare subito regione - provincia .

qualcuno ha gią affrontato questo problema ???


grazie

Titolo: Re:tdbsimple combobox a cascata.
Inserito da: xinyiman - Gennaio 11, 2012, 01:36:57 pm
Ciao, TDBSimpleCombobox e TDBSimpleListBox sono mie creature  8)

Per fare quello che dici tu devi usare 3 TDBSimpleCombobox e devi gestire l'evento sulla evento OnChange
Titolo: Re:tdbsimple combobox a cascata.
Inserito da: ffabio - Gennaio 11, 2012, 02:08:55 pm
carine :-)) quindi se ho problemi chiedo a te :-))))
Titolo: Re:tdbsimple combobox a cascata.
Inserito da: xinyiman - Gennaio 11, 2012, 02:19:22 pm
Ok  ;)
Titolo: Re:tdbsimple combobox a cascata.
Inserito da: Maverich - Gennaio 15, 2012, 10:16:34 am
Ti dico la mia idea, non e' detto che sia la mgliore, ma funziona.
Perchč complicarsi la vita e complicarla a chi utilizza il software, con scelte multiple , basta creare nelle tabelle del DB dei campi ID che identificano in modo univoco una data citta'.
del resto una Cittą non puo' appartenere a piu' provincie o regioni:

es:
TB_REGIONI
ID_REGIONE: Integer
REGIONE:Varchar
...

TB_CITTA
ID_CITTA: integer
ID_REGIONE: integer
CITTA: Varchar
PROVINCIA: Varchar
... etc

cosi' per ogni citta' avrai anche ID_REGIONE
ti basta creare una Query che estragga anche REGIONE, cosi' per ogni citta' che
scorri/selezioni avrai la rispettiva appartenenza.

Fai visualizzare le Cittą, ed avrai le regioni di appartenenza (1 sola query)
Se invece Parti dalla Regione, devi fare 3 Query .

Ricorda di mettere il ProviderFlags dei campi in Join = False (se usi TSQLQuery), in caso
contrario durente le opeazioni di Inserimento/Variazione avrai errore quando esegui la Query.

SELECT TB_COMUNI.*,
 USR.REGIONE    AS NOMEREGIONE,
FROM TB_COMUNI LEFT OUTER JOIN TB_REGIONI  AS USR ON TB_COMUNI.ID_REGIONE=USR.ID_REGIONE
WHERE TB_COMUNI.ID_COMUNE >= 1

con questa query estrai il nome regione dalla Tabella Regioni, e per ogni citta avrai sempre il nome regione nel
campo NOMEREGIONE

questo sistema di Query lo puoi estendere a piacimento, pensa ad un elenco clienti, dove ti possono servire anche le informazioni sulla Banca d'Appoggio, metti sempre in relazione le Tabelle che ti servono;
se devi interrogare piu' volte la stessa Tabelle (TB_COMUNI), non potrai usare lo stesso suffisso USR_COM

LEFT OUTER JOIN TB_COMUNI  AS USR_COM ON TB_CLIENTI.ID_COMUNE=USR_COM.ID_COMUNE

ma ti basta cambiare nome USR_COM1, per non incorrere in errore eseguendo la query

LEFT OUTER JOIN TB_COMUNI  AS USR_COM1 ON TB_CLIENTI.ID_CITTABANCA=USR_COM1.ID_COMUNE

SELECT TB_CLIENTI.*,
 USR_COM.COMUNE      AS NOMECITTA,
 USR_COM.CAP         AS CAPCITTA,
 USR_COM.PROVINCIA   AS PROVCITTA,
 USR_BAN.BANCA       AS RAGSOCBANCA,
 USR_BAN.AGENZIA     AS AGENZIABANCA,
 USR_BAN.ABI         AS ABIBANCA,
 USR_BAN.CAB         AS CABBANCA,
 USR_PAG.DESCRIZIONE AS PAGAMENTO,
 USR_COM1.COMUNE     AS CITTABANCA

FROM TB_CLIENTI
LEFT OUTER JOIN TB_COMUNI  AS USR_COM ON TB_CLIENTI.ID_COMUNE=USR_COM.ID_COMUNE
LEFT OUTER JOIN TB_BANCHE  AS USR_BAN ON TB_CLIENTI.ID_BANCAAPPOGGIO=USR_BAN.ID_BANCA
LEFT OUTER JOIN TB_MODALITAPAGAMENTO  AS USR_PAG ON TB_CLIENTI.ID_MODALITAPAGAMENTO=USR_PAG.ID_MODALITAPAGAMENTO
LEFT OUTER JOIN TB_COMUNI  AS USR_COM1 ON TB_CLIENTI.ID_CITTABANCA=USR_COM1.ID_COMUNE