Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Utilizar plantillas Excel... (https://www.clubdelphi.com/foros/showthread.php?t=65893)

JoysticK 20-01-2010 16:39:28

Utilizar plantillas Excel...
 
Hola, tengo una duda con algo que tengo en mente voy a explicaros a ver si alguno le veis solucion....


Por un lado quiero tener un archivo de excel con ciertas celdas que deben ser rellenadas automaticamente con los datos de una base de datos (utilizo firebird) la idea es poner en las celdas que quiera algun dato algo como "CAMPOAuto.Logica.TClientes.Empresa.AsString" esto lo pondria dentro de una celda de excel, despues abriria ese fichero con delphi recorreria x filas y x columnas mirando si el contenido de la celda donde este posicionado empieza por "CampoAuto." y si es asi, miraria que campo es el que tengo que insertar aqui, es este caso seria "Logica.TClientes.Empresa.AsString", esa es la teoria ahora lo que no se es como acceder al valor de "Logica.TClientes.Empresa.AsString" dado que hasta este punto lo esto tratando como un string y lo que yo quiero es el valor, como si de un puntero se tratara...

¿ me he explicado bien o alguien se ha perdido ?

Neftali [Germán.Estévez] 20-01-2010 19:03:01

Cita:

Empezado por JoysticK (Mensaje 351251)
...esa es la teoria ahora lo que no se es como acceder al valor de "Logica.TClientes.Empresa.AsString" dado que hasta este punto lo esto tratando como un string y lo que yo quiero es el valor, como si de un puntero se tratara...

Te has explicado bastante bien y además la idea me parece buena.
Creo que todo depende de las posibilidades que tengas de acceder a las clases de la lógica y a sus propiedades.

En mi caso (modelo de lógica/persistencia), se puede acceder a una clase y a sus propiedades a partir de una string; En tu caso dependerá de cómo esté implementada la clase Cliente y el resto pertenecientes a tu lógica.

No se si me he explicado bien.

JoysticK 20-01-2010 19:36:09

Gracias Neftali por responder, aunque la verdad no he comprendido mucho, te doy mas datos...

en "Logica.TClientesEmpresa.AsString"

Logica es un Data Module, TCliente un ClientDataSet y Empresa uno de sus campos, ahora lo que no se es como acceder al contenido de ese campo partiendo de esa string...

Código:

Cadena : String;
Cadena :=  'Logica.TClientesEmpresa.AsString';
ShowMessage( Cadena ); --> "Logica.TClientesEmpresa.AsString"
ShowMessage( Logica.TClientesEmpresa.AsString ); --> "EMPRESAS DEL SUR S.L."


Neftali [Germán.Estévez] 21-01-2010 11:32:16

Cita:

Empezado por JoysticK (Mensaje 351297)
Gracias Neftali por responder, aunque la verdad no he comprendido mucho, te doy mas datos...

Ok. Fallo mío. Al ver el código y los nombres, pensé que estabas utilizando algun sistema de Lógica de negcio, Persistencia o similar.... Nada, ni caso a lo que te he dicho.

Código Delphi [-]
  Cadena :=  'Logica.TClientesEmpresa.AsString';

En tu caso tal vez sea más sencillo.

Puedes buscar los formularios de la aplicación haciendo un recorrido por la variables Screen:

Código Delphi [-]
  for i := 0 to (Screen.FormCount - 1) do begin
    if (Screen.CustomForms[i] is TForm) then begin
      DM := TForm(Screen.Forms[i]);
      MessageDlg('Encontrado el formulario: ' + DM.Name, mtInformation, [mbOK], 0);

Creo que con eso no puedes llegar a un TDataModule, que basta con que lo cambies por un TForm.

Una vez que accedas al formulario, puedes hacer algo similar para acceder a los componentes (entre ellos los campos), utilizando:

Código Delphi [-]
  for i := 0 to (Screen.FormCount - 1) do begin
    if (Screen.CustomForms[i] is TForm) then begin
      DM := TForm(Screen.Forms[i]);
      MessageDlg('Encontrado el formulario: ' + DM.Name, mtInformation, [mbOK], 0);

      // Buscar el campo
      comp := DM.FindComponent('TClienteEmpresa');
      if Assigned(comp) then begin
        MessageDlg('Sí encontrado el campo en el formulario: ' + DM.Name, mtInformation, [mbOK], 0);
      end
      else begin
        MessageDlg('No encontrado el campo en el formulario: ' + DM.Name, mtInformation, [mbOK], 0);
      end;
    end;
  end;

Con esto, teniendo "Logica.TClienteEmpresa", suponiendo que Logica sea un formulario (no un datamodule), podrías acceder al TField Empresa.

Para acceder cómo "AsString", sólo se me ocurre que hagas un CASE con las varias posibilidades segun el tipo de campo.

Espero haberme explicado bien.


La franja horaria es GMT +2. Ahora son las 13:35:52.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi