Dataset virtuale

A volte si presenta la necessità di lavorare con dei dataset virtuali ovvero dataset che non fanno riferimento ad una tabella reale.
I casi sono i più disparati, ad esempio per usare i file come se fossero dei database oppure per fare degli esempi che simulino l'uso di un database!

Bene vediamo come funzionano, per prima cosa creiamo un nuovo progetto applicazione e nella form che ci si presenta inseriamo dalla Tab "Data Access" un oggetto DataSource e un oggettoTBufDataSet (che rinomineremo VDset ovvero Virtual DataSet).
Poi ci spostiamo nella Tab "Data Controls" e inseriamo una TDBGrid sulla form, inoltre aggiungiamo anche due nuovi pulsanti che useremo per applicare un filtro ai dati e uno per rimuovere il filtro ai dati.

Bene ora ci troviamo con i seguenti oggetti inseriti
Codice: [Seleziona]

    VDSet: TBufDataset;
    Cmd_Applica_Filtro: TButton;
    Cmd_Elimina_Filtro: TButton;
    Datasource1: TDatasource;
    DBGrid1: TDBGrid;    

Bene ora andiamo nell'evento OnShow della nostra Form (che si chiama Form1) e incolliamo il seguente codice
Codice: [Seleziona]

     {dichiaro la struttura del dataset virtuale}
     VDSet.FieldDefs.Add('Nome',ftString,50);
     VDSet.FieldDefs.Add('Cognome',ftString,50);
     VDSet.CreateDataset;{creo il dataset virtuale con la struttura sopra dichiarata}
     VDSet.Open; {apro la connessione al dataset virtuale}
     VDSet.Append; {dico che voglio accodare dei dati al dataset virtuale}
     VDSet.Fields[0].Value:='Carlo'; {inserisco il campo Nome}
     VDSet.Fields[1].Value:='Verdi'; {inserisco il campo Cognome}
     VDSet.Post; {applico l'accodamento}
     VDSet.Append;{dico che voglio accodare dei dati al dataset virtuale}
     VDSet.Fields[0].Value:='Mario'; {inserisco il campo Nome}
     VDSet.Fields[1].Value:='Rossi'; {inserisco il campo Cognome}
     VDSet.Post; {applico l'accodamento}      

Come potete vedere tale codice è suddiviso in una prima parte dove definiamo la struttura del dataset virtuale e successivamente da una parte in cui inseriamo i dati nel dataset.
Nel nosto esempio abbiamo inserito due campi stringhe di 50 caratteri che hanno i seguenti nomi "Nome" e "Cognome" e poi li abbiamo riempiti con Carlo Verdi e Mario Rossi.
Nel nostro esempio dove c'è scritto ftString va inserita una variabile di tipo TFieldType che può essere valorizzata con uno dei seguenti valori
Codice: [Seleziona]

ftADT;
ftArray;
ftAutoInc;
ftBCD;
ftBlob;
ftBoolean;
ftBytes;
ftCurrency;
ftCursor;
ftDataSet;
ftDate;
ftDateTime;
ftDBaseOle;
ftFixedChar;
ftFixedWideChar;
ftFloat;
ftFMTBcd;
ftFmtMemo;
ftGraphic;
ftGuid;
ftIDispatch;
ftInteger;
ftInterface;
ftLargeint;

Altri valori si possono recuperare semplicemente scrivendo TFieldType. (con il punto dopo TFieldType) allorchè comparirà la lista completa dei possibili valori.
Ora andiamo ad assegnare (dall'object inspector) il DataSet dell'oggetto DataSource1 e lo settiamo con l'unico valore disponibile: VDSet.
Ora andiamo ad assegnare (dall'object inspector) il Datasource dell'oggetto DBGrid1 e lo settiamo con l'unico valore disponibile: Datasource1.

Ora andiamo ad inserire il seguente codice nell'evento OnClick dell'oggetto Cmd_Applica_Filtro      
Codice: [Seleziona]

VDSet.Filter:='Nome="Mario"';
VDSet.Filtered:=TRUE;    

Questo codice applica un filtro che consente di vedere solo i record che hanno il campo Nome valorizzato come Mario.
Ora andiamo ad inserire il seguente codice nell'evento OnClick dell'oggetto Cmd_Elimina_Filtro
Codice: [Seleziona]

VDSet.Filtered:=FALSE;

Questo codice elimina ogni filtro applicato.
Ora compilate e vedrete i vostri dati nella DBGrid e provate anche a cliccare sui pulsanti che applicano ed eliminano il filtro.

Potete scaricare l'esempio completo al seguente link: www.lazaruspascal.it/esempi/BufDataset.zip

SMF 2.0.8 | SMF © 2011, Simple Machines
Privacy Policy
SMFAds for Free Forums
TinyPortal © 2005-2012

Go back to article