Pagina 2 di 3 primaprima 1 2 3 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 28
  1. #11
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,466
    Mi sembra che tu stia tentando di avvicinarti al concetto di Master/Detail, che sta per "Principale/dettaglio". In cosa consiste? Si tratta di collegare due tabelle tra loro, ad esempio una tabella Clienti e una tabella Ordini. E' possibile correlare le tabelle facendo in modo che la tabella Ordini, che rappresenta il dettaglio, filtri i record mostrando solo quelli inerenti al record del cliente selezionato nella tabella principale.
    Il controllo DBLookupComboBox non è adatto per impostare filtri, ma serve solo per reperire il valore di un campo utilizzando un procedimento vagamente simile a quello scritto sopra. La ComboBox va associata ad un campo che deve essere completato; supponiamo che il campo corrisponda alla tabella Ordini e debba contenere il codice identificativo del cliente al quale l'ordine corrente si riferisce. Però forse è più bello presentare una lista di ragioni sociali invece degli ID dei record clienti, giusto? La DBLookupComboBox ti permette di elencare i valori di un campo e, quando questo viene selezionato, restituire il valore di un altro campo della tabella che viene inserito nel campo editato del record corrente. E' più facile da capire che da spiegare.
    Nel frattempo, prova a leggere questo thread al quale ho partecipato anche io: http://forum.html.it/forum/showthrea...hreadid=234639

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

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

  2. #12

    filtrare i record

    ciao Alka,

    forse non mi sono spiegato bene. Nella tabella 'interventi' Come per il campo 'stato' dove i valori possono essere 'Si' o 'No', dovrei filtrare i record con lo stesso contenuto nel campo 'tecnico' dove sono molti. come posso visualizzarli in una dbgrid??

    ciao

  3. #13
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,466
    Devi spiegarmi bene ciò che vuoi ottenere, tenendo a mente che non ho sott'occhio la struttura e i principi di funzionamento del tuo database. In ogni caso, il metodo per filtrare i record è analogo a quello che hai già utilizzato: controlli che il campo Tecnico della tabella da filtrare per il record corrente contenga il valore che ti aspetti di trovare. Supponi di avere una casella di testo col nome del tecnico da usare per il filtro, allora nell'evento OnFilter scriverai un blocco di codice simile a questo:
    codice:
      Accept := (Table1.FieldByName('TECNICO').AsString = Edit1.Text);
    Se non ho indovinato il problema, spiegami tutto per filo e per segno, altrimenti non sono in grado di aiutarti.

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

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

  4. #14
    perfetto!!! solo che al posto di una casella di testo c'è una combobox...come posso fare???

    ciao!

  5. #15
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,466
    Anche la ComboBox dispone di una proprietà Text, anche se è più opportuno utilizzare la proprietà ItemIndex per ottenere l'indice dell'elemento selezionato e determinarne il valore in questo modo:
    codice:
    Accept := (Table1.FieldByName('TECNICO').AsString = ComboBox1.Items[ComboBox1.ItemIndex]);
    Prima di utilizzare questa istruzione, verifica che un elemento sia stato selezionato; in tal caso, la proprietà ItemIndex ha un valore diverso da -1.

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

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

  6. #16

    conflitto..

    ciao alka,

    utilizzando una dbcombobox per filtrare i 'tecnici' funziona. solo che c'è un conflitto con il filtro sullo 'stato'

    listato:

    if form16.combobox1.itemindex=0 then
    accept:=DataSet.FieldByName('stato').AsString = 'Si'

    else

    if form16.combobox1.itemindex=1 then
    accept:=DataSet.FieldByName('stato').AsString = 'No'

    else

    accept:=dataset.fieldbyname('tecnico').asString=fo rm16.dbcombobox1.items[form16.dbcombobox1.itemindex];

  7. #17
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,466
    In che senso "sono in conflitto"? Che viene applicato il primo filtro anche quando è attivato il secondo? Ricordati che nell'evento puoi scrivere tutto il codice che vuoi, purchè non esegua operazioni eccessivamente pensanti poichè tale metodo viene richiamato per ogni record della tabella (è per quello che spesso non vengono utilizzati i filtri, ma bensì dei componenti per query).
    Nel tuo caso, puoi utilizzare tutti i costrutti if...then che ritieni necessari, implementando logiche un po' più complesse.
    Ad esempio
    codice:
      se FILTRO 1 ABILITATO allora
        se CAMPO 1 vale X
        se CAMPO 2 vale Y
        ...
          ACCETTARE
      se FILTRO 2 ABILITATO allora
        se CAMPO 1 vale X
        se CAMPO 2 vale Y
          *NON* ACCETTARE
      se FILTRO 3 ABILITATO allora
        ...
        se CAMPO 5 vale X
        se CAMPO 6 vale Y
          ACCETTARE
    Non è codice Delphi, ma serve solo per spiegarti che puoi distinguere inizialmente il filtro selezionato; successivamente, in base al filtro, controlli il contenuto dei campi e imposti il parametro Accept a True per accettare il record, oppure a False per rifiutarlo.

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

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

  8. #18
    sto provando ad utilizzare il componente query (di ADO..).
    Sono riuscito a fare correttamente una semplice query di prova che seleziona i record che hanno l'ID uguale a 2 (uno solo ovviamente.)

    Ho posizionato sul form una Dbgrid che visualizza tutti i record contenuti nella tabella. Come faccio a fare in modo che premendo un tasto venga lanciata la query???? attualmente utilizzo 2 datasource (uno con la query e uno senza...) ma non riesco a far variare il datasource associato alla dbgrid...

    ciao!

  9. #19
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,466

    Rieseguire la query

    Per eseguire la query devi chiuderla e riaprirla nuovamente.
    Imposta la proprietà Active a False e poi a True, oppure richiama il metodo Close e successivamente il metodo Open.

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

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

  10. #20
    ok. Per applicare + filtri posso utilizzare una sola query SQL "costruita" in base ai criteri scelti dall'utente???

    Ad esempio: l'utente sceglie di impostare il filtro per "Ragione Sociale", subito dopo imposta anche quello per "Nome Tecnico". Come faccio a fare in modo che nella DBgrid vengano mostrati i record che soddisfano entrambi i criteri di ricerca???

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 © 2025 vBulletin Solutions, Inc. All rights reserved.