Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Exportar datos de firebird a archivo de texto (https://www.clubdelphi.com/foros/showthread.php?t=46937)

capo979 14-08-2007 13:56:05

Exportar datos de firebird a archivo de texto
 
Hola les quería preguntar si es posible en firebird 1.5 exportar los datos de la base de datos a un archivo de texto dejandolos todos los datos como insert.

La idea es si hay algún programa que trae el instalador del firebird tipo el gbak o alguno que esté en la carpeta bin de firebird que me permita hacer lo antes mencionado.

Muchas gracias por escucharme

saludos a todos

Gabo 14-08-2007 14:03:13

El programa Database Worckbench te permite exportar los datos de una tabla de la manera que quieres...

capo979 14-08-2007 14:06:23

si eso si se que hay programas que lo hacen pero yo quiero hacerlo desde mi programa en delphi y dejarlo en un archivo en formato de texto. Por ejemplo si el gbak lo permite usaría gbak ya que a mis clientes les doy el gbak. No es una utilidad para utilizarla yo sino directamente mis clientes.

jhonny 14-08-2007 16:05:19

¿Que componentes de conexion a BD usas?

jhonny 14-08-2007 16:57:48

Bueno, lo mas normal es que tu aplicación tenga descendientes de TDataSet, entonces hice estas dos funciones, que te devuelven la cadena insert, tu diras si te sirven:

Código Delphi [-]

function DatoFormateado(const Campo: TField): String;
begin
  if (Campo is TStringField) or (Campo is TDateField) then
  begin
    Result := ''''+Campo.AsString+'''';
  end
  else
    Result := StringReplace(Campo.AsString, ',', '.', [rfReplaceAll]);
end;

function ExportarInsert(DataSet: TDataSet; Tabla: String): String;
var
  i :Integer;
  cadena :string;
begin
  cadena := '';
  cadena := 'insert into '+Tabla+' values(';
  for i := 0 to DataSet.FieldCount -1 do
  begin
    cadena := cadena + DatoFormateado(DataSet.Fields[i]);
    if ((DataSet.FieldCount -1) = i) then
      cadena := cadena + ')'
    else
      cadena := cadena + ',';
  end;
  Result := cadena + ';';
end;

Solo es cuestion de que pongas a recorrer cualquier DataSet y exportes los resultado de la función ExportarInsert en un archivo, un ejemplo de esto es:

- Coloque un TMemo y una tabla, a los cuales se les hace esto:

Código Delphi [-]
Tabla1.First;
Memo1.Lines.Clear;
while not Tabla1.Eof do
begin
  Memo1.Lines.Add(ExportarInsert(Tabla1, 'TablaPrueba'));
  Tabla1.Next;
end;

Espero te sirva ;).

capo979 14-08-2007 17:29:42

Los componentes de base de datos que utilizo son de la paleta Interbase el TIBDatabase

gracias

jhonny 14-08-2007 17:43:57

Ahh bueno, entonces si te sirve la función, ya que los TIBTable, los TIBQuery e IBStoredProc son hijos de TDataSet, podrias usar uno de esos para traer la tabla que quieres y usar la función que mas arriba te he explicado.

capo979 14-08-2007 18:37:10

Muchas gracias por todo lo voy a probar

saludos

eduarcol 14-08-2007 19:24:28

Hola, esta de pelos el codigo jhony, disculpa que me meta, pero no te sirve un simple respaldo???

capo979 14-08-2007 19:27:25

No me sirve un simple respaldo porque mis clientes se pasan los datos entre ellos y para quedar con toda la historia se tienen que pasar parte de la base es un sistema que lo maneja mucha gente por eso

gracias

saludos

jhonny 14-08-2007 20:18:07

Gracias eduarcol...

Cita:

Empezado por capo979 (Mensaje 222985)
No me sirve un simple respaldo porque mis clientes se pasan los datos entre ellos y para quedar con toda la historia se tienen que pasar parte de la base es un sistema que lo maneja mucha gente por eso

gracias

saludos

Bueno, ¿Pero te sirvio la función?.

capo979 14-08-2007 20:20:45

Gracias si la función estuvo joyita asi que ya la estoy usando una masa todo

gracias che!!!

suerte

saludos

jhonny 14-08-2007 20:37:25

Cita:

Empezado por capo979 (Mensaje 222999)
Gracias si la función estuvo joyita asi que ya la estoy usando una masa todo

gracias che!!!

suerte

saludos

Que bueno hombre, :D.

P.D: No conocia eso de "una masa" :D.

Delphius 14-08-2007 21:17:39

Cita:

P.D: No conocia eso de "una masa"
Ese término significa: Todo bien, OK, sin problemas, etc.

Se usa mucho en Buenos Aires, o como los llamamos quienes viven en el interior: porteños.
Es evidente que esta persona es de Argentina.

Yo al menos, no se que se use en otros lugares.
Saludos,

jhonny 14-08-2007 21:23:24

Cita:

Empezado por Delphius (Mensaje 223029)
Es evidente que esta persona es de Argentina.

Yo también lo deducía asi, pero esa deducción la saque, por lo de "CHE" :D, pero si no hubiera usado el "CHE", no hubiera sabido de donde era :)

Delfino 15-08-2007 02:35:26

Si no me equivoco mucho el componente TIBExtract tb te ayudaria a generar los insert de los datos, miralo y cuentanos..
Cita:

TIBTable, los TIBQuery e IBStoredProc son hijos de TDataSet
o hijas, quien sabe :D

jhonny 15-08-2007 02:42:40

Cita:

Empezado por Delfino (Mensaje 223130)
o hijas, quien sabe :D

Jo jo jo, en ese caso, dejemoslo en prole. :D.

Cita:

Empezado por Delfino
Si no me equivoco mucho el componente TIBExtract tb te ayudaria a generar los insert de los datos, miralo y cuentanos..

Pero creo que el TIBExtract esta amarrado a la tecnologia de los IBX, mientras que mi humilde y sencilla funcioncita, funciona con cualquier miembro pertenciente a la prole de TDataSet ;), estan los BDE, dbexpress, ADO, IBX, componentes como el TClientDataSet, Tablas en memoria como las RXMemoryData y demas familiares :D

jhonny 15-08-2007 03:02:20

De todas maneras hay que reconocer que estos IBX tienen unas cosas muy divertidas, me puse a buscar un poco, sobre lo que Delfino a comentado y me he encontrado con que termine haciendo lo siguiente:

- Puse un TIBDatabase en un Form, tambien un TIBExtract, un TButton, un TMemo y un TIBTransaction, a los cuales no les cambie el nombre, pero hice los respectivos enlaces.

En el OnClick del Boton hice...

Código Delphi [-]
Memo1.Lines.Clear;
IBExtract1.ExtractObject(eoTable, 'Lista', [etData]); //Lista es el nombre de la tabla que quice llamar
Memo1.Lines := IBExtract1.Items;

Y adivinen que... todo funciono de maravillas y a una velocidad impresionante. La verdad es que son divertidos estos componentes :)

jhonny 15-08-2007 03:23:29

Acabo de hacerle una pequeña mejora a la función que mas arriba explique llamada DatoFormateado, resulta que cuando un dato es menor a su tamaño del campo, toma el resto como espacios y no creo que eso sea conveniente para nadie, de manera pues que la función quedaria asi:

Código Delphi [-]
function DatoFormateado(const Campo: TField): String;
begin
  if (Campo is TStringField) or (Campo is TDateField) then
  begin
    Result := ''''+Trim(Campo.AsString)+'''';
  end
  else
    Result := StringReplace(Campo.AsString, ',', '.', [rfReplaceAll]);
end;

Y el resto sigue igual ;).

egostar 15-08-2007 03:27:12

Hablando de cosas divertidas, hay otro componente que extrae la información de la base de datos. El componente IBDatabaseInfo.

Código Delphi [-]
var
  I: Integer;
begin
  IBDataBase1.Open;
  Memo1.Lines.Add(IBDataBaseInfo1.Version);
  Memo1.Lines.Add(IBDataBaseInfo1.DBFileName);
  Memo1.Lines.Add(IBDataBaseInfo1.DBSiteName);
  for I := 0 to IBDataBaseInfo1.UserNames.Count - 1 do
      Memo1.Lines.Add(IBDataBaseInfo1.UserNames[i]);
  Memo1.Lines.Add(InttoStr(IBDataBaseInfo1.CurrentMemory));
  Memo1.Lines.Add(InttoStr(IBDataBaseInfo1.MaxMemory));
  IBDataBase1.Close;
end;

Haber que les parece

Salud OS


La franja horaria es GMT +2. Ahora son las 17:15:58.

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