Ver Mensaje Individual
  #17  
Antiguo 12-06-2015
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.610
Reputación: 32
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Cita:
Empezado por Casimiro Notevi Ver Mensaje
[...] 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 [-]
    { SQL Connection class }
    TghSQLConnection = Class (TSQLConnection)
      Protected
        { Fields }
        ...
        FStoreConnected :Boolean;
      Published
        { Properties }
        ...
        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 Ver Mensaje
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 Ver Mensaje
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.
Responder Con Cita