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

    [D2010] Gestione componenti in DataModule

    Ciao ragazzi, sono in procinto di implementare un nuovo progetto software e mi è sorto un dubbio riguardo ad una questione legata alla velocità di esecuzione delle procedure, mi spiego meglio:

    Il software sarà un gestionale completo (anagrafiche, magazzino, agenda lavori, preventivi, ordini, ddt, fatture, ecc.) per cui avrò una serie di componenti table e query (mysql) che mi collegano tramite il componente connessione agli archivi del relativo database.

    La sequenza x ogni componente è Table/Query - DataSetProvider - ClientDataSet - DataSource

    Penso di strutturare il software in modalità MDI form / child, così da non avere il limite di una form aperta per volta.

    Di conseguenza mi è sorto questo dubbio su come gestire l'apertura delle tabelle/query: subito all'inizializzazione dell'applicazione con refresh dei ClientDataSet all'apertura delle form oppure apro tutto volta per volta che apro le form?
    Inoltre, se più form si interfacciano con gli stessi ClientDataSet si creano conflitti?

    Grazie per la collaborazione, buon lavoro!
    Maurizio

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Originariamente inviato da Mco2983
    Penso di strutturare il software in modalità MDI form / child, così da non avere il limite di una form aperta per volta.
    Io abbandonerei l'idea di utilizzare questa modalità che ha fatto il suo tempo ed è stata dichiarata obsoleta da tempo, oltre al fatto di non essere più impiegata praticamente in alcun software recente.

    Molto meglio strutturare l'applicazione in modo diverso, ad esempio facendo un uso intelligente di Frame per creare delle pagine, oppure Form per disporre di finestre di dialogo che consentano, in ogni punto, di modificare un dato senza dover uscire e andare nell'interfaccia corrispondente (che grazie ai Frame può essere visualizzata "in loco" e in generale dove si desidera, senza duplicare controlli e codice).


    Originariamente inviato da Mco2983
    Di conseguenza mi è sorto questo dubbio su come gestire l'apertura delle tabelle/query: subito all'inizializzazione dell'applicazione con refresh dei ClientDataSet all'apertura delle form oppure apro tutto volta per volta che apro le form?
    Non esiste una risposta assoluta a questa domanda: in alcuni casi è utile il primo approccio (per questione di condivisione dati e performance di caricamento), in altri casi è meglio disporre di un DataSet specifico per ogni istanza di Form o Frame specifico.


    Originariamente inviato da Mco2983
    Inoltre, se più form si interfacciano con gli stessi ClientDataSet si creano conflitti?
    Sì, se condividi un DataSet collegando allo stesso due differenti TDataSource contemporaneamente visibili, agendo sul DataSet dalla prima interfaccia riflette le modifiche sul secondo, poiché entrambi i DataSource devono sincronizzarsi in base allo stato del DataSet che è unico e condiviso da entrambe le visualizzazioni.

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

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

  3. #3
    Ciao alka, grazie innanzitutto per le utili info

    Ho iniziato a documentarmi sui Frame e ho "cabalizzato" questa idea su come procedere:

    Creo una form principale da cui garantisco l'accesso a tutte le sezioni generando ogni volta che vengono richieste delle istanze ai Frame corrispondenti (uno x anag. Clienti, uno x anag. Fornitori, uno x Magazzino, uno x Ordini, uno x Fatture, ecc.)

    Per quanto riguarda l'accesso ai dati del db MySQL, carico i miei componenti Table/Query e DataSetProvider nel DataModule unico del progetto e i componenti ClientDataSet e DataSource che mi servono all'interno dei Frame.

    E' secondo te la soluzione più performante?

    Grazie e buon 2011!!!

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Originariamente inviato da Mco2983
    E' secondo te la soluzione più performante?
    Tutto dipende sempre dalle funzionalità specifiche che devono essere implementate.

    Ad ogni modo, così a prima vista, mi sembra una buona implementazione.
    Avendone fatta una del tutto simile, col proverbiale senno di poi posso dire che funziona bene.

    Originariamente inviato da Mco2983
    Grazie e buon 2011!!!
    Ciao e buon 2011 anche a te!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    la domanda non mi è chiarissima, ma se si può così riformulare
    "conviene aprire le connessioni e le tabelle mysql all'avvio, oppure una alla volta", nella mia esperienza, la risposta è
    "dipende dal componente che usi per collegarti, e soprattutto quali sono le query iniziali".

    Esempio (usando ZEOS): se hai una tabella "codiciiva" di 10 righe, con una query del tipo select * from codiciiva, puoi tranquillamente "aprirla" all'avvio (tenendo conto che si tratta di una tabella ubiquitaria)

    se ne hai una del tipo "documenti" con 100.000 righe e 200 colonne, una select * from documenti sarebbe invece "devastante", giacchè caricherebbe in memoria una caterva di dati, rallentando parecchio l'avvio, sprecando memoria etc.

    In questo caso, in generale, preferisco l'approccio
    "fai una procedura che apre i vari tdataset è aperto (o la query o quello che sono"), se sono già aperti niente, altrimenti aprili, specifici per ogni Tform.

    In sostanza sono procedure chiamate nella formshow che "al momento" aprono solo (e solamente) tabelle e query necessarie.

    ---
    Quelle invece "piccole" e "ubique" (es. tabella utenti, permessi, codici iva), come già accennato, all'avvio
    ---
    Riguardo invece ad MDI concordo che non ha tantissimo senso, anche considerato che puoi creare a runtime tutte le TForm che vuoi, mostrarle con show (anzichè showmodal) e "spostarle" davanti e dietro l'una alle altre come vuoi.

    Anche qui (parlo sempre della mia esperienza, ognuno sceglie la strada che preferisce) in generale uso tform modali (create a runtime, tranne quelle "ubique", con la stessa logica di prima) CON alcune form non-modali (finestre log, essenzialmente, chat con gli utenti etc), "portate davanti" (niente ontop, funziona male)

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.