Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Tablas planas (https://www.clubdelphi.com/foros/forumdisplay.php?f=20)
-   -   como exportar una tabla paradox a un archivo plano (https://www.clubdelphi.com/foros/showthread.php?t=82324)

hamer 22-02-2013 23:47:31

como exportar una tabla paradox a un archivo plano
 
si alguien me puede colaborar necesito exportar una tabla en paradox por medio de dephi a un archivo plano he mirado por muchos lados y no he podido realizar esta operación la verdad no conozco delphi y por eso es tan complicado

ecfisa 23-02-2013 00:22:52

Hola hamer, bienvenido a Club Delphi :)

Como a todos los que se inician te invitamos a que leas nuestra guía de estilo.

No entiendo a que te refieres con "archivo plano" ¿ A un archivo de texto ?

Saludos.

duilioisola 23-02-2013 14:44:37

Básicamente debes conectarte a la tabla y recorrerla hasta que no haya mas elementos.
Para cada elemento escribes los datos en un fichero.
Código Delphi [-]
AssignFile(F, 'TextoPlano.txt');
Rewrite(F);
tabla.Open;
while (not tabla.EOF) do
begin
   WriteLn(F, tabla.FieldByName('CAMPO1').AsString + ', '+ tabla.FieldByName('CAMPO2').AsString + ...);
end;
CloseFile(F);

hamer 25-02-2013 17:09:00

yo estoy manejando delphi 4 ya que es el único que tengo y al compilar este código en la primer linea me sale el siguiente error unknown identifier le cambie la F a C que creo que es donde se ubicaría el archivo, no se si deba de usar otro delphi donde estén estas funciones o si es que estoy colocando el código donde no es, yo lo que hice fue utilizar en data access puse una tabla y lo conecte seleccionando los nombres de la tabla y puse un data source que leí que así se conectaba entonces nada mas ingreso el código en un archivo que se genera llamado unit.pas, pero estoy como perdido muy perdido


Código Delphi [-]
AssignFile(F, 'TextoPlano.txt'); ////aquí me sale un error
Rewrite(F);
tabla.Open;
while (not tabla.EOF) do
begin
   WriteLn(F, tabla.FieldByName('CAMPO1').AsString + ', '+ tabla.FieldByName('CAMPO2').AsString + ...);
end;
CloseFile(F);

ecfisa 25-02-2013 17:41:41

Hola hamer.

Proba de este modo:
Código Delphi [-]
...
var
  F: TextFile;
begin
  AssignFile(F, 'TextoPlano.txt');
  Rewrite(F);
  tabla.Open;
  while (not tabla.EOF) do
  begin
    WriteLn(F, tabla.FieldByName('CAMPO1').AsString + ', '+ tabla.FieldByName('CAMPO2').AsString) + ...);
    tabla.Next;  // registro siguiente
  end;
  tabla.Close;
  CloseFile(F);
end;

Saludos.

hamer 25-02-2013 18:14:59

ahora si reconoce el código pero al correrlo sale esto este error Runtime error 202 at 0001:28CA y se cierra

ecfisa 25-02-2013 19:36:14

Cita:

Empezado por hamer (Mensaje 455553)
ahora si reconoce el código pero al correrlo sale esto este error Runtime error 202 at 0001:28CA y se cierra

Hola hamer.

El error 202 (Fatal errors), con seguridad no lo está provocando el código anterior.
Es muy probable que en algún punto de tu programa estés realizando alguna llamada que provoca un ciclo infinito.

Saludos.

hamer 25-02-2013 21:03:42

tenias razón con lo del ciclo infinito cuando lo pongo a correr ya no salen errores pero sale el form en blanco y no se si esta realizando la acción y si es así donde se pondría el archivo ya en .txt gracias por la ayuda

ecfisa 25-02-2013 21:07:54

Cita:

Empezado por hamer (Mensaje 455563)
tenias razón con lo del ciclo infinito cuando lo pongo a correr ya no salen errores pero sale el form en blanco y no se si esta realizando la acción y si es así donde se pondría el archivo ya en .txt gracias por la ayuda

Hola hamer.

Para mostrarlo en el form, podrías hacer:
Código Delphi [-]
  Memo1.Lines.LoadFromFile('TextoPlano.txt');

Saludos.

hamer 26-02-2013 16:04:31

Muchas gracias me sirvió mucho el código exporta muy bien a txt pero una ultima cosa es como un poco lento no se si es por la cantidad de datos de la tabla que tengo que pasar, si es posible hacerlo mas rápido o es así en general

hamer 26-02-2013 16:38:02

aunque ahora que miro no es que este lenta sino que no quiere exportar esa tabla no se si es por el password que tiene que no deja exportar, ya que cree una tabla nueva y esta si me exporto sin ningún problema pero la que necesito no lo realiza.

hamer 27-02-2013 17:31:41

Muchas gracias de verdad me sirvió mucho el error que tenia era algo sencillo por copiar mal una cosa pero esta exportando perfecto gracias por la colaboración

bulc 20-03-2013 18:25:44

Sácalo por impresora en archivo de texto.
 
Se te ha olvidado una opción sencilla. Es colocar un módulo de impresión y seleccionar como salida un archivo. De esta forma te quedará bien colocado. Ah... y con la posibilidad de ordenarlo a tu gusto según el criterio que impongas como índice. Más vale tarde que nunca.
Bulc

radenf 18-08-2013 02:38:37

Hola amigos:

He adaptado el código de ecfisa para exportar los datos de una tabla de Access a un archivo de texto y funciona a la perfección.
Necesito hacer la operación inversa, es decir exportar los datos del archivo de texto a una tabla de Access, pero no he podido dar con el código. Me quedé pegado asignando los datos a un Stringlist y no he logrado asignar los datos a los campos de la tabla.
¿Puede alguien echarme una mano?
Saludos y muchas gracias

ecfisa 18-08-2013 16:21:28

Hola randenf.

Fijate si te sirve de este modo:
Código Delphi [-]
procedure ExportToText(const aFileName: TFilename; aDataSet: TDataSet); //(o TADODataSet, etc ...)
var
  F: TextFile;
  i: Integer;
  s: string;
begin
  AssignFile(F, aFileName);
  Rewrite(F);
  aDataSet.Open;
  while (not aDataSet.EOF) do
  begin
    s := '';
    for i := 0 to aDataSet.FieldCount-1 do
      s := s + aDataSet.Fields[i].AsString +',';
      SetLength(s, Length(s)-1);
    Writeln(F, s);
    aDataSet.Next;
  end;
  aDataSet.Close;
  CloseFile(F);
end;

procedure ImportFromText(const aFileName: TFileName; aDataSet: TDataSet); //(o TADODataSet, etc ...)
var
  TS1, TS2: TStrings;
  i, j: Integer;
begin
  aDataSet.Open;
  TS1 := TStringList.Create;
  try
    TS1.LoadFromFile(aFileName);
    for i := 0 to TS1.Count-1 do
    begin
      try
        TS2 := TStringList.Create;
        ExtractStrings([','], [], PChar(TS1[i]), TS2);
        aDataSet.Append;
        for j := 0 to aDataSet.FieldCount-1 do
          aDataSet.Fields[j].AsString := TS2[j];
        aDataSet.Post;
      finally
        TS2.Free;
      end;
    end;
  finally
    TS1.Free;
    aDataSet.Close;
  end;
end;

Ejemplo llamadas:
Código Delphi [-]
 ExportToText('C:\Export.txt', DataSet);
 ...
 ImportFromText('C:\Export.txt', DataSet);

Saludos. :)

radenf 18-08-2013 20:25:57

Muchas gracias Daniel.
Lo probaré y te cuento.
Saludos

Iván

radenf 18-08-2013 23:28:16

Funcionó perfecto.
Modifiqué las llamadas para poder sobreescribir la tabla y que no me arrojara excepciones por duplicar índices.

Para guardar el archivo:

Código Delphi [-]
procedure TFormConfiguracion.bsSkinButton1Click(Sender: TObject);
var
SpecialFolder: integer;
begin
SpecialFolder := CSIDL_PERSONAL;
Label5.Caption := GetSpecialFolderPath(SpecialFolder) ;
SaveDialog1.InitialDir:= Label5.Caption;
SaveDialog1.FileName:= 'Servidores Dicom';
if SaveDialog1.Execute then
ExportToText(SaveDialog1.FileName, DataSourceServidores.DataSet);
end;

y para cargar el archivo:

Código Delphi [-]
procedure TFormConfiguracion.bsSkinButton3Click(Sender: TObject);
begin
if OpenDialog1.Execute then
try
Data1.TablaServidores.Edit;
ADOQuery3.Close;
ADOQuery3.SQL.Text:= ' Delete * from Servidores ';
ADOQuery3.ExecSQL;
finally
ImportFromText(OpenDialog1.FileName, DataSourceServidores.DataSet);
Data1.TablaServidores.Close;
Data1.TablaServidores.Open;
Data1.TablaServidores.Refresh;
DBAdvGrid3.Update;
end;
end;

Me arroja sin embargo el siguiente warning y no entiendo por qué.
[DCC Warning] Configuracion.pas(674): W1036 Variable 'TS2' might not have been initialized

Saludos Daniel y muchas gracias


La franja horaria es GMT +2. Ahora son las 19:41:28.

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