Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [Delphi2010] Frame e clientdataset

    Ciao a tutti, sto sviluppando una nuova applicazione in cui sto sperimentando una serie di nuovi (per me) metodi, funzioni e procedure, tra cui la gestione dei frame.
    Il dubbio che ho attualmente è il seguente:
    è corretto inserire nel DataModule i componenti dbExpress (TSQLconnection, TSQLTable, TSQLQuery, TSQLDataSet) e caricare invece i componenti DataSetProvider, ClientDataSet e DataSource nei singoli frame? O è meglio che anche questi ultimi siano contenuti nel DataModule?

    Grazie per l'attenzione e la collaborazione!

    Maurizio

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463
    La risposta è ovviamente dipende.

    In linea generale, nel DataModule vanno messi quei componenti che sono condivisi nell'intero progetto; per questo motivo ci si va a inserire, ad esempio, il componente che implementa la connessione al database.

    Può essere utile inserire al suo interno anche un TClientDataSet, tenendo presente però che se sono creati e visualizzati più Frame che fanno riferimento allo stesso componente CDS inserito nel DM, questi non potranno gestirlo ciascuno separatamente per proprio conto e saranno costretti a "condividerlo"; se ciascuno dei Frame deve invece funzionare separatamente, devono avere il proprio CDS, oppure riferirsi a un CDS distinto definito altrove.

    La soluzione corretta va quindi valutata in base alle funzionalità e al modo di impiego di questi Frame.

    Io inserisco di solito nel DataModule la connessione e i componenti che effettuano query, mentre i CDS sono definiti all'interno di Form e Frame che, una volta ottenuti i dati dalle query, ne fanno l'uso che preferiscono (filtro, ordinamento, ricerca, aggiornamenti, ecc.).

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

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

  3. #3
    Grazie Alka per la rapida ed esaustiva risposta!

    Ponendo il fatto che decido di mettere nel DataModule i componenti dbExpress e nei frame i ClientDataSet, dove devo inserire i DataSetProvider? Qual'è la regola di base, un DataSetProvider per query/table o un DataSetProvider per ClientDataSet?

    Grazie e buon lavoro,
    Maurizio

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463
    Originariamente inviato da Mco2983
    Qual'è la regola di base, un DataSetProvider per query/table o un DataSetProvider per ClientDataSet?
    I componenti DataSetProvider forniscono i dati in un formato standard al ClientDataSet, e nel contempo hanno delle opzioni per poter personalizzare il meccanismo di reperimento dei dati e del loro aggiornamento; siccome questo comportamento potrebbe essere diverso in base al caso, a mio avviso sarebbe meglio metterne uno per ogni CDS, per sicurezza.

    In pratica, il DataModule diventa quasi uno strato esclusivamente di accesso al DB e di interrogazione dei dati effettiva, mentre tutto il resto (cache gestite con i CDS, opzioni di aggiornamento specifiche, "consumatori" dei dati acquisiti) va inserito nel posto specifico in base all'operazione che deve essere eseguita o alla funzionalità da implementare.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  5. #5
    Grazie mille per le tue delucidazioni Marco!

    Buona giornata,
    Maurizio

  6. #6
    Per proseguire lo sviluppo di questa applicazione, ho in testa di utilizzare un unico frame per la visualizzazione degli archivi in elenco: quindi un unico frame con una DBgrid, un DataSetProvider, un ClientDataSet, un DataSource, un pannello in cui gestire filtri di ricerca dati.

    Così facendo, ogni volta che l'operatore "chiama" la visualizzazione di un archivio dati, creo un'istanza del frame, a cui passo determinati parametri che attivano e configurano la griglia ed il collegamento alla vista richiesta.
    Mi chiedevo: ho fatto una boiata pazzesca oppure è un metodo valido?
    In quest'ultimo caso, per passare i parametri, dichiaro delle variabili public nel frame?

    Ciao,
    Maurizio

  7. #7
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463
    Originariamente inviato da Mco2983
    Per proseguire lo sviluppo di questa applicazione, ho in testa di utilizzare un unico frame per la visualizzazione degli archivi in elenco: quindi un unico frame con una DBgrid, un DataSetProvider, un ClientDataSet, un DataSource, un pannello in cui gestire filtri di ricerca dati.
    In un'applicazione gestionale che ho realizzato, ho seguito un approccio del tutto simile.

    Originariamente inviato da Mco2983
    Mi chiedevo: ho fatto una boiata pazzesca oppure è un metodo valido?
    In quest'ultimo caso, per passare i parametri, dichiaro delle variabili public nel frame?
    Secondo me, la strada scelta è buona come base di partenza, ma io implementerei in modo diverso le "viste specializzate".

    Usando un unico Frame per tutte le viste dati, si dovrà andare a scrivere una marea di codice per personalizzare - in base alla vista specifica - le colonne, i filtri, le query e tutto il resto.

    Utilizzare una classe base generica che implementi una "vista comune" è positivo, ma invece di codificare tutte le personalizzazioni per adattare quell'unico Frame a tutte le visualizzazioni, io andrei a creare dei discendenti, uno per ogni vista, in cui a designtime si vanno a modificare query, colonne, filtri, comandi, ecc.

    In pratica, non si scrive codice per customizzare un unica interfaccia, ma si usa l'interfaccia creata come base per costruirne di nuove, che ereditino tutta l'implementazione comune dalla prima e vadano ad aggiungere tutto ciò che serve.

    Chiaramente, la bontà dell'implementazione dipende poi dalla cura e dalla precisione con cui si separano le parti comuni (nella classe base) da quelle specializzate (nelle classi discendenti).

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