Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente bannato
    Registrato dal
    Nov 2011
    Messaggi
    150

    [Delphi] Oggetti "vari" e tdataset

    Estenuato dal malefico php sto cercando di imbarcarmi verso un'altra avventura... che rischia di essere ancora peggiore!

    La domanda riguarda la possibilità di "mascherare" il tipo di un oggetto, con riferimento ai vari tquery t-qualcosa-query e così via.

    Esempio:
    miaquery: tobject; (un oggetto generico)

    querysumysql: tquerysumysql;
    querysumssql: tquerysumssql; (nota: sono due Tipi diversi!)

    if (tipodatabase=mysql) then
    miaquery:=tquerysumysql
    else
    miaquery:=querysumssql;

    in sostanza, a seconda di certe circostanze, voglio usare due oggetti query diversi per agganciare due database a loro volta diversi.

    Paradossalmente sembra funzionare MA... poi devo "trasformare" il tobject in un tdataset mediante un cast esplicito.

    Tdataset(miaquery).append;
    tdataset(miaquery).fieldbyname('campo').asstring:= qualcosa;
    tdataset(miaquery).post;

    (...)
    if tdatset(miaquery).recordcount=0 then blablabla
    (...)
    tdataset(miaquery).locate('chiave','qualcosa' (...)


    Esiste (immagino di sì!) un sistema meno barbaro di questo?

  2. #2
    Un metodo meno "barbaro" sarebbe dichiarare miaquery direttamente come tdataset, a meno di non spiegare il motivo per cui l'hai dichiarato come tobject.
    ...

  3. #3
    Utente bannato
    Registrato dal
    Nov 2011
    Messaggi
    150
    Originariamente inviato da Caiodark
    Un metodo meno "barbaro" sarebbe dichiarare miaquery direttamente come tdataset, a meno di non spiegare il motivo per cui l'hai dichiarato come tobject.
    Per la verità non ho ben chiaro come fare, ho usato un tobject perchè mi permette di fare l'assegnazione

    miooggetto:= praticamente-qualsiasi-cosa

    Modo migliore?

  4. #4
    Originariamente inviato da lanciafiamme
    Per la verità non ho ben chiaro come fare, ho usato un tobject perchè mi permette di fare l'assegnazione

    miooggetto:= praticamente-qualsiasi-cosa

    Modo migliore?
    Mmm studiare l'OOP aiuterebbe, non ci sono altre scorciatoie.
    ...

  5. #5
    mmm io opterei per una strada un po' diversa, butto giù un idea al volo, poi volendo ci si può lavorare.
    Metterei n connessioni diverse in un datamodule, poi in un secondo datamodule ci metto i dataset, e ogni volta che creo il secndo datamodule lo faccio attaccare ad una connessione diversa in base all'esigenza... come ho detto è solo un idea 'al volo' ... ma ci si può ragionare

  6. #6
    Utente bannato
    Registrato dal
    Nov 2011
    Messaggi
    150
    Originariamente inviato da Caiodark
    Mmm studiare l'OOP aiuterebbe, non ci sono altre scorciatoie.
    Ok allora non si può fare, getto la spugna.
    Però speravo meglio

  7. #7
    Utente bannato
    Registrato dal
    Nov 2011
    Messaggi
    150
    Originariamente inviato da Nettuno95
    mmm io opterei per una strada un po' diversa, butto giù un idea al volo, poi volendo ci si può lavorare.
    Metterei n connessioni diverse in un datamodule, poi in un secondo datamodule ci metto i dataset, e ogni volta che creo il secndo datamodule lo faccio attaccare ad una connessione diversa in base all'esigenza... come ho detto è solo un idea 'al volo' ... ma ci si può ragionare
    la tecnica che ho messo funziona, sono sicuro di questo.
    Però son due @@ dover tutte le sante volte metterci un tdataset(questo) invece di questo e basta.
    Pazienza

  8. #8
    Se l'unico "problema" è il CAST .. puoi ovviare come ha detto Caiodark dichiarando la variabile di tipo TDataSet, ma pensandoci anche TDataSource, e con una funzione incapsuli il tutto in modo da ritornare il collegamento al server desiderato.
    Altra strada sarebbe usare gli "Anonymous Methods" o le interfacce (TInterfacedObject) con le nuove classi generics, le hai a disposizione da D2009 in avanti, ci vuole un po' di studio ma credo sia fattibile, anche se la strada della funzione che in base ai parametri passati ti ritorna un TDatasource già bello e pronto non sarebbe malvagia
    Un Saluto
    N.

  9. #9
    Utente bannato
    Registrato dal
    Nov 2011
    Messaggi
    150
    Originariamente inviato da Nettuno95
    Se l'unico "problema" è il CAST .. puoi ovviare come ha detto Caiodark dichiarando la variabile di tipo TDataSet, ma pensandoci anche TDataSource, e con una funzione incapsuli il tutto in modo da ritornare il collegamento al server desiderato.
    Il "problema" è che lo metto in un tdataset, "spariscono" metodi e procedure proprie delle query (SQL.text, Open, ExecSQL e così via).
    In pratica mentre un tobject posso "castarlo" un po' a tutto, un tdataset resta... un tdataset.
    O almeno credo...


    Altra strada sarebbe usare gli "Anonymous Methods" o le interfacce (TInterfacedObject) con le nuove classi generics, le hai a disposizione da D2009 in avanti, ci vuole un po' di studio ma credo sia fattibile, anche se la strada della funzione che in base ai parametri passati ti ritorna un TDatasource già bello e pronto non sarebbe malvagia
    Un Saluto
    N.
    Qui il convento passa delphi 5... altro che delphi 2009!
    Grazie comunque

  10. #10
    Studiati un attimo l'albero della VCL e scegli la classe meno astratta possibile in comune tra i componenti che vuoi utilizzare.
    Con il cast salti il controllo sul tipo, cosa piuttosto pericolosa quando l'istanziazione della variabile avviene in un punto diverso del codice e quando qualcun altro deve metter mano al tuo codice (oppure quando tu stesso devi rimetter mano al tuo codice dopo qualche mese magari).
    ...

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.