Cita:
Empezado por Casimiro Notevi
[...] recuerdo que había una solución muy elegante para resolver el problema.
|
Hola amigos.
Creo que Casimiro se refiere a este "antiguo"
hilo, escrito antes de que los componentes MagiaData fueran integrados a
GH Freebrary.
Si alguien se interesa en echar un vistazo al código fuente del
repositorio, puede ver lo sencillo que es implementar una propiedad llamada
StoreConnected o
StoreActive para los componentes de conexión a base de datos, agregando la directiva
Stored a las propiedades Connected o Active. En la versión para Delphi 7, estos ejemplos aparecen en las unidades GHFSQLConnection.pas, GHFSQLQuery.pas y GHFClientDataSet.pas.
En específico, del componente TghSQLConnection extraigo la parte que resuelve el problema:
Código Delphi
[-]
TghSQLConnection = Class (TSQLConnection)
Protected
...
FStoreConnected :Boolean;
Published
...
Property Connected Stored FStoreConnected;
Property StoreConnected :Boolean Read FStoreConnected
Write FStoreConnected Default False;
End;
No es necesario escribir ningún método, solo derivar el componente con esas declaraciones, instalarlo en algún paquete y queda listo para usarse. La clase padre puede ser TADOConnection o cualquier otra a la que aplique.
Recojo algunos comentarios que en su momento surgieron cuando planteaba esta característica:
Cita:
Empezado por roman
Lo que me parece genial es el la propiedad StoreActive. ¡Cuántos dolores de cabeza no da el dejar esta propiedad activa durante el diseño! Creo que ninguna componente derivada de DataSet debió dejar siquiera la opción de poder almacenar esto en el dfm.
|
Cita:
|
Empezado por Marc
Vaya, solo por esta propiedad "StoreActive" ya valdría la pena hacer el cambio 
Voy a echarle un vistazo [...]
|
Cita:
Empezado por Al González
Cuando tienes StoreActive en False (el valor predeterminado), el valor de la propiedad Active no se guardará en el archivo .dfm, el archivo donde se almacena todo lo que estableces en tiempo de diseño —generalmente usando el inspector de objetos—. Esto quiere decir que si abres un conjunto de datos en tiempo de diseño para facilitar la labor de delinear un DBGrid, por ejemplo, enseguida puedes compilar el programa y al correrlo no abrirá automáticamente ese conjunto de datos; la tendencia hoy en día (y lo que señalan los cánones) es que el programa abra los conjuntos de datos por orden explícita, sólo en el momento en que se requieran, para ahorrar recursos y operar con una velocidad óptima.
Así mismo [sic], cuando vuelvas a abrir el proyecto en Delphi, los módulos de datos no demorarán en cargarse, ya que no tratarán de abrir los conjuntos de datos que hayas dejado con las propiedades Active en True y StoreActive en False. En pocas palabras, StoreActive concilia la tendencia de conjuntos de datos cerrados con la necesidad de abrirlos para diseñar.
|
Espero sirva mi aportación en este caso.
Un cordial saludo.
Al.