<-- Capítulo

Índice del tutor de Delphi
© Copyright 1998,99
por David Martínez.

Todos los derechos reservados

Capítulo -->

[Capa Media] [Midas E Interfases] [Cliente]

Capítulo 6.6. Migrando Nuestra Aplicación a MIDAS

En esta sección migraremos nuestra aplicación a módulos de datos, que pueden vivir en la misma computadora como dos procesos diferentes o en dos computadoras distintas.

En este caso, nuestra aplicación anterior se convertirá en un "cliente" de la aplicación que realiza el acceso a bases de datos.

Creando la Capa Media

Primero necesitamos crear un proyecto nuevo para nuestra "capa intermedia". Seleccione "File-New" y después "Application". Esto creará un proyecto básico con una forma.

A continuación necesitamos crear nuestra interfase para que nuestros clientes la encuentren. Utilice "File-New" y Seleccione "Remote Data Module" desde la página "Multitier".

A continuación, el wizard le pedirá los datos necesarios para generar el nuevo módulo de datos.

Para mayor información de estos modelos, vea la sección de programación en COM de este curso.

Ahora grabe su nuevo módulo de datos (el nombre del mío fué "dmTutorClientes.pas".

El módulo de datos que usted acaba de crear es además una interfase. Esta interfase es pública una vez que se haya registrado con la computadora, y otros procesos la pueden accesar. Así que ahora todo lo que debe usted hacer es crear queries y exportarlos. Para ahorrar tiempo, copie y pegue los queries del proyecto de Clientes a este. Una vez que haya copiado y pegado, terminará con un módulo de datos público con tres queries que aún son privados. Para exportarlos, haga click con el botón derecho del mouse y seleccione "Export Query from DataModule" del menú de opciones. Haga lo mismo con los tres queries. Una vez hecho esto, compile y ejecute el programa una vez para que el sistema registre la existencia de estas nuevas interfases.

Si usted no ejecuta una vez el programa antes de comenzar a programar el cliente, la interfase nunca será registrada en Windows y no podrá seleccionar el servidor cuando programe el cliente.

Ahora su proyecto tiene tres módulos de datos exportados (uno por cada query). Veamos cómo fueron generados en su aplicación.

MIDAS e Interfases

Delphi exporta interfases utilizando una librería de tipos. Una librería de tipos es un archivo que mantiene la especificación de las interfases. Como MIDAS necesita exportar su módulo de datos como una interfase, utiliza el editor de tipos para generar interfases de manera estándar.

Nuestro proyecto ha exportado una interfase con tres propiedades. Para verlas, seleccione "View-Type Library". A continuación podrá ver la interfase TutorClientes ("ITutorClientes"), contenida en una CoClass llamada "TutorClientes". Esta interfase tiene tres propiedades, con los nombres de los queries que usted ha exportado.

Estas propiedades son de tipo IProvider. IProvider es una interfase específica de MIDAS, que se utiliza para comunicar un DataSet con sus clientes.

Modificando el Cliente para Comunicarse con el Servidor

Ahora modificaremos el cliente para que se comunique con el servidor. Abra el proyecto de Clientes.dpr y elimine todos los queries del Módulo de datos. También deberá eliminar las menciones a dbtables y bde (si la tiene) de su módulo de "uses", tanto en el módulo de datos como en las formas del programa. Esto no sería necesario si usted nunca hubiera tenido TQueries en su programa.

Esto sólo es necesario porque el TQuery depende del BDE, y si usted no elimina las unidades que necesitan el BDE de su cláusula de uses, el programa cliente requerirá el BDE para operar correctamente!

A continuación, vaya a la página de componentes "Midas" y añada un componente TDCOMConnection al módulo de datos. En el combobox de la propiedad "ServerName" usted verá los nombres de los programas que están registrados como módulos de datos. Seleccione servicioclientes.TutorClientes, que es la capa media que creamos con anterioridad.

Note que el TDComConnection también permite la propiedad "ComputerName", que usted puede utilizar para ejecutar la capa en otra computadora.

A continuación agregue tres componentes "TClientDataSet". El ClientDataSet nos permite representar la interfase IProvider en el Cliente, y se comporta de manera muy parecida a los componentes TQuery y TTable (porque descienden del mismo componente, TDataSet). Para cada uno de estos ClientDatasets, asigne la propiedad "RemoteServer" al objeto TDCOMConnection que creó.

Una vez que ha hecho eso, necesitará seleccionar el IProvider correcto para cada ClientDataSet. Asigne la propiedad ProviderName de cada uno de los TClientDatasets dependiendo del nombre.

Cuando haga click en el combobox para seleccionar el nombre, la propiedad "Connected" de TDComConnection se activará automáticamente para que Delphi "averigüe" qué IProviders están registrados en el servidor (esto se hace llamando un procedimiento llamado "GetProviderNames").

Como eliminamos los queries, usted necesitará cambiar el DataSource de la forma principal para especificar el nuevo ClientDataSet, y cambiar un poco de código en el botón "Consultar" para que utilice el ClientDataSet en vez del TQuery (esto requerirá que usted añada "dbClient" a la clausula de uses del programa principal, para poder declarar la variable local como TClientDataSet (recuerde eliminar dbTables porque ya no estamos usando TQueries).

El código del botón ha cambiado de la siguiente manera:


procedure TfrmClientes.btnConsultarClick(Sender: TObject);
var
  QueryAUsar : TClientDataSet;
begin

  // Muestra el diálogo de consultas
  dlgConsulta.ShowModal;
  QueryAUsar := Nil;
  if dlgConsulta.ModalResult = mrOK then begin

    // Primero decide que query vamos a usar.
    with dmClientes do begin
      case dlgConsulta.rgConsulta.ItemIndex of
         0: QueryAUsar := cdsClientesporApellido;
         1: QueryAUsar := cdsClientesPorCuenta;
         2: QueryAUsar := cdsClientesPorRiesgo;
       end; //case
    end; // with
    if QueryAUsar = Nil then Exit;
    QueryAUsar.Close;
    QueryAUsar.FetchParams;

Note que al final he añadido el comando "FetchParams" para que el cliente pida la lista de parámetros del servidor (esto no ocurre automáticamente).

Por ahora, mantenga la propiedad Connected del TDComConnection encendida (True) para que no tenga que conectarse. Usted podrá hacer esto más tarde con un botón de "Conectar" o algo así.

Ahora puede usted ejecutar el programa. Notará que funciona de la misma manera que los programas anteriores, sólo que éste no requiere el BDE y funciona de manera distribuida. Cualquier regla que usted aplique a los TQueries y a los TFields dentro de los queries será copiada al cliente.

Le recomiendo mucho que estudie TClientDataset y lo aplique. Es muy útil aún sin necesidad de un servidor de aplicaciones.

Copiar el Código fuente (7K, formato Zip) para esta sección

Capítulo -->