Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    [delphi 2006]dbexpress

    Ciao!
    Utilizzo due TSimpleDataset per visualizzare i record presenti in due tabelle di un db Firebird legate tra loro da una relazione master-detail. Esempio:
    1 tabella che contiene le Provincie italiane;
    1 tabella che contiene i comuni italiani.
    Provincie e Comuni sono elencati in due TDBLookupCombobox.
    L'utente deve poter eseguire due modalità di ricerca:
    - selezionare una provincia dalla prima cmb e vedere nella seconda cmb l'elenco dei comuni contenuti in quella provincia;
    - aprire la cmb dei comuni, vederne l'elenco completo e sceglierne uno (senza passare prima dalla scelta della provincia).
    In realtà il TSimpleDataset non mi consente di fare questo perché se anche non seleziono prima nessuna provincia e passo direttamente alla scelta dei comuni la prima provincia dell'elenco è di default come se fosse selezionata e quindi non ottengo mai l'elenco completo di tutti i comuni.
    Possibili soluzioni?
    Ne ho già provate un paio (da codice con un costrutto if...then oppure tramite aggiunta di un campo [qualsiasi] nella tabella delle provincie)senza ottenere risultati efficaci. C'è una strada alternativa migliore?

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301
    Non credo sia possibile ottenere ciò che chiedi dal semplice TSimpleDataSet in quanto marcia contro il principio stesso di funzionamento del componente e del master/detail in generale.

    Forse, a mali estremi, converrebbe popolare una comunissima TComboBox "a mano" inserendo al suo interno tutti gli elementi necessari...
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    A mano...L'esempio provincie comuni era solo un esempio: ho 15 campi sulla prima lookupcombobox e 395 sulla seconda. Se le sostituisco con le semplici combobox perdo la dipendenza fra di loro?

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301
    Originariamente inviato da vicky
    A mano...L'esempio provincie comuni era solo un esempio: ho 15 campi sulla prima lookupcombobox e 395 sulla seconda. Se le sostituisco con le semplici combobox perdo la dipendenza fra di loro?
    La dipendenza la perdi senz'altro, in quanto non benefici più di un controllo data aware e del collegamento master/detail.

    Non capisco però lo stupore sul numero di record: non li devi caricare scrivendo una riga di codice per ciascuno.

    Semplicemente, scandisci la tabella del primo DataSet inserendo il testo che vuoi vedere comparire nella prima Combo Box, eventualmente inserendo in cima un elemento "neutro"; a fronte della selezione di un elemento, ricerchi e carichi nella seconda Combo Box, dal secondo DataSet, tutti i valori correlati, gestendo autonomamente il "master/detail".
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    ....gestendo autonomamente il "master/detail".
    Non capisco cosa vuol dire: se carico i miei 17 distretti nella prima cmb e i miei 397 comuni nella seconda cmb, come faccio a far si che selezionando in seguito uno dei distretti io ottenga solo l'elenco dei comuni in esso contenuti? Forse ho capito male il tuo discorso

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301
    In effetti, ci sarebbe qualcosa in più da fare probabilmente, allocando qualche record (struttura dati Pascal) o istanziando classi, e la cosa sarebbe complessa, ma onestamente non mi sovviene nient'altro al momento.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  7. #7

    Mi è venuta un'idea su come risolvere la faccenda:
    non è possibile fare una query select, i cui risultati riempiano la cmbComuni, che sia condizionata dal valore della proprietà "text" della cmbProvince? La proprietà text della TDBLookupCombobox dovrebbe corrispondere al valore che io vedo a video e non al primo record del dataset, o sbaglio?

  8. #8
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301
    Originariamente inviato da vicky
    Mi è venuta un'idea su come risolvere la faccenda
    non è possibile fare una query select, i cui risultati riempiano la cmbComuni, che sia condizionata dal valore della proprietà "text" della cmbProvince? La proprietà text della TDBLookupCombobox dovrebbe corrispondere al valore che io vedo a video e non al primo record del dataset, o sbaglio?
    Non ho la possibilità di verificarlo, ma indicativamente potresti tentare questa strada.

    In sostanza, potresti verificare se la proprietà Text ti restituisce una stringa di lunghezza maggiore di zero; in caso affermativo, è sufficiente che tu osservi il record corrente sul DataSet per ottenere la chiave da usare per la selezione dei record di dettaglio; in caso negativo...non fai nulla (o rimuovi la query precedente).

    Non è il massimo dell'eleganza, tuttavia......
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  9. #9
    Ho fatto la prova con questo codice che ho inserito all'apertura del form:
    codice:
        Provincia.active:=true;
        Provincia.open;
        cmbProvincia.Enabled:=true;
    
        if cmbProvincia.Text='' then
          Comune.DataSet.CommandText:='select * from "Comune"'
          else
        Comune.Params.ParamByName('PROVINCIA').AsInteger:=Provincia.FieldByName('Provincia_id').AsInteger;
          Comune.DataSet.CommandText:='select * from "Comune" where "PROVINCIA_ID"=:PROVINCIA';
          Comune.Active:=true;
          Comune.Open;
          cmbComune.Enabled:=true;
    Non è che funzioni molto...

  10. #10
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301
    Originariamente inviato da vicky
    Non è che funzioni molto...
    Quale errore ottieni?

    In ogni caso, qualsiasi parametro va assegnato dopo aver definito lo statement SQL da eseguire, non prima.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.