Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   SQL a Texto con Delphi (https://www.clubdelphi.com/foros/showthread.php?t=28452)

YaninaGenia 20-12-2005 15:31:12

SQL a Texto con Delphi
 
Hola a todos!!!
Necesito pasar el contenido de todo un query a un archivo de texto, y ya he publicado en este foro como se hace, pero si o si es necesario especificarle uno a uno los campos de query.
¿Hay alguna forma de generar el archivo de texto sin tener que meterse con el contenido del query especìficamente?

Yanina Genia

delphi.com.ar 20-12-2005 15:59:09

¿A algo así te referís? :
http://www.clubdelphi.com/foros/show...95&postcount=5

O vos querés definir campo a campo?

YaninaGenia 20-12-2005 16:32:20

Si...
 
El problema que tengo con esta solución (que me pareciòn muy eficiente) es que no me pone en el archivo los nombres de las columnas y son muy importantes para lo que tengo que hacer, porque sino el usuario veria numeros sueltos y no entenderìa nada (ya sabemos como son los usuarios), ¿Hay alguna forma de agregarle a esa función algo para que pongas los nombres de los campos?

Yanina Genia

ContraVeneno 20-12-2005 17:08:09

Código Delphi [-]
TuQuery.Fields[x].FieldName

YaninaGenia 20-12-2005 17:36:45

...
 
Quise decir donde pongo ese código para que en la exportación figuren los nombres de las columnas. Esa propiedad la conozco, tan novata no soy!!!


Yanina

ContraVeneno 20-12-2005 17:40:31

_________________________________
:confused: :eek: :( :rolleyes:

YaninaGenia 20-12-2005 17:47:42

...
 
Jajaja, no llores hijo, ahora me voy a poner a resolverlo porque ya vine de comer y me volviò a andar el cerebro. Es muy facil, en un ratito lo publico.

Yanina

YaninaGenia 20-12-2005 18:02:59

Listo!!!
 
Gracias Delphi.com.ar por tu ayuda, aca publico el còdigo que me mandaste un poco modificado:

Código:

procedure DataSetToStream(ADataSet: TDataSet; AStream: TStream);
var
  i: Integer;
  S: string;
begin
  if not ADataSet.IsEmpty then
  begin
        S := '';
        ADataSet.EnableControls;
        try
          for i := 0 to ADataSet.Fields.Count -1 do
          begin
                if (i = ADataSet.Fields.Count -1) then
                  S := S + ADataSet.fields[i].FieldName + #13#10
                else
                  S := S + ADataSet.fields[i].FieldName + ';';
          end;
          AStream.Write(S[1], Length(S));
          ADataSet.First;
          repeat
                S := '';
                for i := 0 to ADataSet.Fields.Count -1 do
                  if ADataSet.Fields[i].Visible then
                  begin
                        if (i = ADataSet.Fields.Count -1) then
                          S := S + ADataSet.Fields[i].DisplayText + #13#10
                        else
                          S := S + ADataSet.Fields[i].DisplayText + ';';
                  end;
                AStream.Write(S[1], Length(S));
                ADataSet.Next;
          until ADataSet.Eof;
        finally
          ADataSet.DisableControls;
        end;
  end;
end;

Con eso me salen las exportaciones con los nombres de las columnas. Le saquè el if que pregunta i > 0 porque no es necesario. Y en lugar del #9 le puse ; porque lo convierto a CSV.

Yanina Genia

Thales 20-12-2005 23:02:58

Cita:

Empezado por YaninaGenia
Quise decir donde pongo ese código para que en la exportación figuren los nombres de las columnas

Yanina

Te muestro una modificación del código de Federico para que muestre los nombres de los campos al principio del fichero

Código Delphi [-]
procedure DataSetToStream(ADataSet: TDataSet; AStream: TStream);
var
  I: integer;
  S: string;
begin
  with ADataSet do
  begin
    // Nombres de Campos
    S := '';
    for I := 0 to Pred(FieldCount) do
    begin
      if I > 0 then S := S + #9;
      S := S + Fields[i].DisplayLabel;
    end;
    S := S + #13#10;
    AStream.Write(S[1], Length(S));
    Open;
    // Registros
    while not Eof do
    begin
      S := '';
      for I := 0 to Pred(FieldCount) do
      begin
        if I > 0 then S := S + #9;
        S := S + Fields[i].DisplayText;
      end;
      S := S + #13#10;
      AStream.Write(S[1], Length(S));
      Next;
    end;
  end;
end;
 
procedure DataSetToFile(ADataSet: TDataSet; AFileName: string);
var
  Stream: TStream;
begin
  Screen.Cursor := crHourglass;
  try
    Stream := TFileStream.Create(AFileName, fmCreate);
    try
      DataSetToStream(ADataSet, Stream);
    finally
      Stream.Free;
    end;
  finally
    Screen.Cursor := crDefault;
  end;
end;

Un saludo

Thales 20-12-2005 23:07:54

oops.. no me di cuenta que había más mensajes en el hilo y que YaninaGenia ya había dado con una solución

Un saludo


La franja horaria es GMT +2. Ahora son las 10:59:18.

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