Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Problemas al exportar a excel con FireSoft (https://www.clubdelphi.com/foros/showthread.php?t=41147)

Espartaco 08-03-2007 15:11:25

Problemas al exportar a excel con FireSoft
 
Hola de nuevo amigos, tengo otro pequeño problema que supongo será una tontería.
Resulta que estoy usando los componentes de FireSoft para exportar a Excel, y me funcionaban perfectamente, pero no sé porqué resulta que ahora cuando ejecuto el programa me dice que no encuentra el archivo DataExport.pas. Lo he buscado donde tengo los archivos de FireSoft y sólo existe el DataExport.dcu. El DataExport.pas no existe en mi disco duro y sin embargo antes me funcionaba. Puede alguien decirme que está ocurriendo.

Utilizo Delphi 5. He desinstalado los componentes y los he vuelto a instalar pero sigue pidiendome el pas.

Gracias por anticipado. Un saludo.

Espartaco 12-03-2007 14:43:09

Soy yo otra vez, compañeros. Solo añadir al post anterior, que uso lo mismo en otra forma del programa para hacer otra exportación y me va bien. He mirado y esta todo igual incluidas las uses de las dos formas.

Espero que me podais ayudar.
Muchas gracias.

delphi.com.ar 12-03-2007 20:11:27

Los archivos DCU no son mas que los PAS compilados, por lo que si tu proyecto encuentra el DCU podrías evitar el problema. De todos modos de mi página tambien puedes bajar la versión con código, donde puedes encontrar el querido: "DataExport.pas". :D

Saludos!

Espartaco 13-03-2007 12:49:46

Gracias por tu respuesta Delphi.com.ar. He descargado el dichoso archivo .pas y lo he colocado en su sitio, pero ahora me da el siguiente error que te pongo para que lo veas.
Código Delphi [-]
        if not ACancel then
        begin
          WriteRecord;
          Inc(FRecNo);
          if Assigned(FAfterWriteRecord) then
            FAfterWriteRecord(Self);
        end;
        FDataSet.Next;
      end;
    finally //AQUI SE PARA EL DEBUGER DE DELPHI CUANDO DA EL ERROR
      if FPreserveBookmark then
        FDataSet.Bookmark := Bookmark;
    end;
  finally
    FDataSet.EnableControls;
  end;
end;
procedure TDataExport.SetDataSet(const Value: TDataSet);
begin
  FDataSet := Value;

Nota: Este codigo es parte del DataExport.pas

Ya sabia que el dcu es el compilado del pas, incluso he borrado el dcu del path pero aun asi sigue igual.

Lo que me extraña mucho, es que antes funcionaba perfectamente, pero ahora solo me funciona en una de las formas del programa y en otra no. Es lo que no entiendo, pues lo pongo todo igual.

La verdad estoy un poco desesperado porque el cliente me esta apretando. He probado desinstalar los componentes y volverlos a instalar, pero nada.

Gracias por tu apoyo y a ver si ves algo raro en todo esto.

delphi.com.ar 13-03-2007 14:39:40

Sería bueno que nos digas que error es que da!. Por otro lado, por lo que cuentas sospecho que el error pueda venir del tipo de cursor que estes abriendo, por ejemplo que sea unidireccional.

Saludos!

roman 13-03-2007 18:18:01

¿Tu componente no trabaja con unidireccionales? ¿Cuál sería la restricción?

// Saludos

Espartaco 14-03-2007 10:49:03

El mensaje de error es que no puede crear el archivo.

Por otro lado no sé a qué os referís con lo de unidireccional, a lo mejor sé lo que es pero dicho así no sé a qué se refiere. Os agradecería si pudierais explicarme un poco.

Lo que sí he descubierto tras varios intentos son dos cosas:

- Si realizo la operación de exportar desde otra ficha nueva, empieza a funcionar bien hasta que a partir de un momento determinado empieza a fallar otra vez. No sé en qué momento exactamente.

- Yo utilizo otra ficha con un DirectoryListBox para decidir el nombre del archivo y la carpeta donde se va a colocar.
Para obtener el nombre del archivo abro la ficha así

Código Delphi [-]
        Ficha1:=TExportExcel.Create(Self);
        Ficha1.ShowModal;
        Ficha1.Free;

y Utilizo una variable pública

Código Delphi [-]
DestinoC :string;

y luego cuando cierro la ficha anterior, una vez añadido a la variable la extensión XLS, creo el archivo de esta manera

Código Delphi [-]
DataToXLS1.SaveToFile(DestinoC);

Bien pues si en vez de hacer esto, le pongo directamente el nombre del archivo sí funciona, de esta manera

Código Delphi [-]
DataToXLS1.SaveToFile('c:\fichmaq\DestinoC.xls');

pero ojo, en la otra ficha que comenté anteriormente, lo hago igual y funciona perfectamente.

La verdad no entiendo qué puede estar pasando.

Gracias por vuestro interés.

roman 14-03-2007 18:38:52

La variable DestinoC, ¿dónde está declarada?

// Saludos

Espartaco 15-03-2007 10:00:09

La tengo declarada en la ficha que inicia el proceso, a continuación pongo un trozo del código de dicha ficha

Código Delphi [-]
    procedure BitBtn2Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
  DestinoC: String;
implementation
uses ExpExcl, Menu, LAsigFab;
{$R *.DFM}
procedure TForm1.BitBtn3Click(Sender: TObject);
var ficha1: TExportExcel;

Pero reitero, en otra ficha está igual que en esta y funciona perfectamente.

Gracias.

delphi.com.ar 15-03-2007 14:22:46

Cita:

Empezado por roman
¿Tu componente no trabaja con unidireccionales? ¿Cuál sería la restricción?

Si funciona!.. tenía una idea errónea :p


Cita:

Empezado por Espartaco
El mensaje de error es que no puede crear el archivo.

...

- Si realizo la operación de exportar desde otra ficha nueva, empieza a funcionar bien hasta que a partir de un momento determinado empieza a fallar otra vez. No sé en qué momento exactamente.

¿No será que empieza a fallar en el momento en que tienes el archivo abierto y bloqueado por el Excel? :D

Espartaco 16-03-2007 10:55:41

No sé donde puediera estar el archivo bloqueado por el Excel, ya que yo no tengo el Excel abierto en el momento de exportar. Además, insisto en que en otra ficha me lo hace bien.

Creo que voy a tirar la toalla y ponerle un nombre de archivo fijo en una carpeta fija:( Frustrante, no?

Gracias a todos por vuestra ayuda, de todas formas seguiré visitando este hilo por si a alguien le ha pasado lo mismo y lo ha solucionado. También he pensado en usar otro componente similar, lo que pasa es que este funciona muy rápido, muy bien y es muy sencillo.

delphi.com.ar 16-03-2007 16:24:07

Es que algo me dice que el problema no viene propiamente del control, sobre todo por el error que dices que informa. ¿Has probado poner un punto de ruptura sobre el SaveToFile para evaluar el contenido de la variable DestinoC?
Básicamente el control crea un TFileStream y escribe la información en este stream, al igual que muchas clases de la VCL. Dudo que falle en sí el procedimiento, ademas que aparenta ser un clásico error informado por el SO, tal como si hacemos:
Código Delphi [-]
  with TStringList.Create do
    try
      SaveToFile('');
    finally
      Free;
    end;
o
Código Delphi [-]
  with TStringList.Create do
    try
      SaveToFile('c:\?');
    finally
      Free;
    end;
O algún archivo en uso:
Código Delphi [-]
  with TStringList.Create do
    try
      SaveToFile('c:\pagefile.sys');
    finally
      Free;
    end;

¿Solo dice que no se puede crear el archivo?

Saludos!

Espartaco 19-03-2007 13:47:33

Si eses es el error que da, pero si lo prueba en diseño, me da el error y se queda parado en DataExport.pas en la parte que comentas del TFileStream.

Efectivamente creo que el problema debe estar en la variable, he probado ponerla global en la ficha principal pero hace lo mismo, en cambio si en vez de utilizar la ficha con el DirectoryListBox lo hago con un InputBox, no tengo ningún problema, por tanto debe haber algo raro en eso.

No he probado lo del punto de ruptura porque no estoy muy ducho en el Debug, es mi asignatura pendiente, de todas formas seguiré intentado solucionarlo y si encuentro el problema lo postearé para otros foreros.

Si podeis recomendarme alguna lectura sobre el Debug que sea buena os lo agradecería.

Muchas gracias Delphi.com.ar y Roman por vuestra ayuda.

Un saludo,;)

delphi.com.ar 19-03-2007 15:29:57

Te recomiendo que te bajes el libro "La cara oculta de Delphi 4" que puedes bajar gratuitamente de la página del autor: www.Marteens.com

Igualmente, rápidamente puedes hacer la siguiente prueba, agregando un mensaje antes de intentar crear el archivo:
Código Delphi [-]
  ShowMessageFmt('El archivo que quiero generar es:"%s"', [DestinoC]);
  DataToXLS1.SaveToFile(DestinoC);
Saludos!

Espartaco 20-03-2007 13:31:33

Tenías razón, me daba el error porque la variable DestinoC estaba vacía. Lo he comprobado con el codigo que me has pasado. El problema era que tenía que poner la variable en la unidad principal y poner en el uses de la ficha que contenía el DirectoryListBox la ficha principal.

Ahora funciona correctamente, muchas gracias por todo.

Foros como este hacen la vida del programador un poco menos solitaria.:)


La franja horaria es GMT +2. Ahora son las 19:20:08.

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