Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MS SQL Server
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-06-2015
Avatar de jeremiselxi
jeremiselxi jeremiselxi is offline
Miembro
 
Registrado: ago 2008
Posts: 199
Poder: 16
jeremiselxi Va por buen camino
Exclamation Como hacer un backups de una bd y exportarlo a excel

Buenos días.

Quiero compartir una pequeña aplicación que he realizado para hacer un backups a una bd y exportarlo a excel, ya que muchos en sentido general hemos querido hacer esto de alguna forma y no lo hemos logrado.

Esto es un aporte que quiero dar a esta comunidad.

Nota: el programa funciona a la perfección, pero lo pueden usar para mejorarlo, ya que solamente he hecho que el programa me exporte a excel todo lo que tiene una bd en especifico, en este caso una bd de sql server.

Adjunto una imagen de los formularios que necesito.



Aquí vemos que hay dos form, el form principal se llama "form1" y el 2 se llama "Form_esperar".

El Form_esperar tiene un progressbar el cual lo utilizaremos para que valla llenándose al elegir todos los registros que contiene una tabla.

En el form1 hay varias cosas:
  • 1 - TExcelApplication
  • 1 - Adoconecction
  • 4 - Adoquery
  • 3 - Dbgrid
  • 2 - Botones
  • 6 - Labels

Pasos para crear esta app explicado en detalle:

Primero creé mi conección en modo de diseño y activé el adoconecction.

Luego procedí a crear un procedimiento llamado "calcularlacantidadderegistros();" para que automaticamente al cambiar de tabla, este me busque todos los registros que tiene esa tabla, así como tambien los campos que contiene la misma.

Código Delphi [-]

type
  TForm1 = class(TForm)
    ADOConnection1: TADOConnection;
    TabControl2: TTabControl;
    Panel2: TPanel;
    btnExportaraexcel: TBitBtn;
    BitBtn2: TBitBtn;
    Excel: TExcelApplication;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    Label5: TLabel;
    Label_cant_registros: TLabel;
    query_tablas_bd: TADOQuery;
    query_campos_tabla_bd: TADOQuery;
    query_info_tablas_bd: TADOQuery;
    DBGrid2: TDBGrid;
    DBGrid3: TDBGrid;
    DataSource2: TDataSource;
    DataSource3: TDataSource;
    Label19: TLabel;
    query_cant_registros: TADOQuery;
    Label1: TLabel;
    Label_cant_registros_campos: TLabel;
    Label6: TLabel;
    Label_cant_registros_registros: TLabel;
    procedure btnExportaraexcelClick(Sender: TObject);
    procedure calcularlacantidadderegistros();
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}


//creamos este procedimiento para que busquemos automaticamente al cambiar la tabla, todos los campos que contiene dicha tabla, asi como tambien el query para buscar la info contenida en esa tabla.
procedure TForm1.calcularlacantidadderegistros();
begin

//abrimos el query que contiene todos los campos de la tabla seleccionada.
query_campos_tabla_bd.SQL.Clear;
query_campos_tabla_bd.SQL.Text:= 'SELECT TABLE_CATALOG, TABLE_NAME, COLUMN_NAME FROM AuditoriaDB.INFORMATION_SCHEMA.COLUMNS where TABLE_NAME= :tabla ORDER BY TABLE_NAME asc';
query_campos_tabla_bd.Parameters.ParamByName('tabla').Value := query_tablas_bd.Fieldbyname('TABLE_NAME').Asstring;
query_campos_tabla_bd.Open;

//abrimos el query que contiene todos los registros de la tabla actual.
query_info_tablas_bd.SQL.Clear;
query_info_tablas_bd.SQL.Text:= 'select * from ' + query_tablas_bd.Fieldbyname('TABLE_NAME').Asstring;
query_info_tablas_bd.open;


//verificamos primero cuantas tablas contiene la base de datos ..
      query_cant_registros.Close;
      query_cant_registros.SQL.Clear;
      query_cant_registros.SQL.Text := 'select count(*) as count from INFORMATION_SCHEMA.TABLES';
      query_cant_registros.open;

      //Le pasamos la cantidad de registros al label
     Label_cant_registros.Caption  := query_cant_registros.Fieldbyname('count').Asstring;


//verificamos cuantos campos tiene la tabla    de mi base de datos AuditoriaDB.
query_cant_registros.SQL.Clear;
query_cant_registros.SQL.Text:= 'SELECT count(COLUMN_NAME) as count FROM INFORMATION_SCHEMA.COLUMNS where TABLE_NAME= :tabla';
query_cant_registros.Parameters.ParamByName('tabla').Value := query_tablas_bd.Fieldbyname('TABLE_NAME').Asstring;
query_cant_registros.Open;

//Le pasamos la cantidad de registros al label
Label_cant_registros_campos.Caption  := query_cant_registros.Fieldbyname('count').Asstring;

//verificamos cuantos registros contiene dicha tabla hay
query_cant_registros.SQL.Clear;
query_cant_registros.SQL.Text:= 'select count(*) as count from ' + query_tablas_bd.Fieldbyname('TABLE_NAME').Asstring;
query_cant_registros.open;

//Le pasamos la cantidad de registros al label
Label_cant_registros_registros.Caption  := query_cant_registros.Fieldbyname('count').Asstring;

end;

El primer dbGrid están todas las tablas de la base de datos.

El segundo contiene todas las columnas.

El tercero contiene todos los registros de esa tabla en especifico.

En este sentido los query los llamé de la seguiente manera:

1) query_cant_registros: para que me cuente las tablas, los campos y todos los registros de esa tabla.
2) query_tablas_bd: que me obtiene todas las tablas de mi base de datos de SQL Server.
3) query_campos_tabla_bd: contiene todos los campos que compone una tabla en especifico.
4) query_info_tablas_bd: contiene todos los registros que tiene la tabla seleccionada.

Adjunto el código completo del form1.

Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, DBGrids, DB, OleServer, ExcelXP, StdCtrls, Buttons,
  ComCtrls, ExtCtrls, ADODB;

type
  TForm1 = class(TForm)
    ADOConnection1: TADOConnection;
    TabControl2: TTabControl;
    Panel2: TPanel;
    btnExportaraexcel: TBitBtn;
    BitBtn2: TBitBtn;
    Excel: TExcelApplication;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    Label5: TLabel;
    Label_cant_registros: TLabel;
    query_tablas_bd: TADOQuery;
    query_campos_tabla_bd: TADOQuery;
    query_info_tablas_bd: TADOQuery;
    DBGrid2: TDBGrid;
    DBGrid3: TDBGrid;
    DataSource2: TDataSource;
    DataSource3: TDataSource;
    Label19: TLabel;
    query_cant_registros: TADOQuery;
    Label1: TLabel;
    Label_cant_registros_campos: TLabel;
    Label6: TLabel;
    Label_cant_registros_registros: TLabel;
    procedure btnExportaraexcelClick(Sender: TObject);
    procedure calcularlacantidadderegistros();
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}


//creamos este procedimiento para que busquemos automaticamente al cambiar la tabla, todos los campos que contiene dicha tabla, asi como tambien el query para buscar la info contenida en esa tabla.
procedure TForm1.calcularlacantidadderegistros();
begin

//abrimos el query que contiene todos los campos de la tabla seleccionada.
query_campos_tabla_bd.SQL.Clear;
query_campos_tabla_bd.SQL.Text:= 'SELECT TABLE_CATALOG, TABLE_NAME, COLUMN_NAME FROM AuditoriaDB.INFORMATION_SCHEMA.COLUMNS where TABLE_NAME= :tabla ORDER BY TABLE_NAME asc';
query_campos_tabla_bd.Parameters.ParamByName('tabla').Value := query_tablas_bd.Fieldbyname('TABLE_NAME').Asstring;
query_campos_tabla_bd.Open;

//abrimos el query que contiene todos los registros de la tabla actual.
query_info_tablas_bd.SQL.Clear;
query_info_tablas_bd.SQL.Text:= 'select * from ' + query_tablas_bd.Fieldbyname('TABLE_NAME').Asstring;
query_info_tablas_bd.open;


//verificamos primero cuantas tablas contiene la base de datos ..
      query_cant_registros.Close;
      query_cant_registros.SQL.Clear;
      query_cant_registros.SQL.Text := 'select count(*) as count from INFORMATION_SCHEMA.TABLES';
      query_cant_registros.open;

      //Le pasamos la cantidad de registros al label
     Label_cant_registros.Caption  := query_cant_registros.Fieldbyname('count').Asstring;


//verificamos cuantos campos tiene la tabla    de mi base de datos AuditoriaDB.
query_cant_registros.SQL.Clear;
query_cant_registros.SQL.Text:= 'SELECT count(COLUMN_NAME) as count FROM INFORMATION_SCHEMA.COLUMNS where TABLE_NAME= :tabla';
query_cant_registros.Parameters.ParamByName('tabla').Value := query_tablas_bd.Fieldbyname('TABLE_NAME').Asstring;
query_cant_registros.Open;

//Le pasamos la cantidad de registros al label
Label_cant_registros_campos.Caption  := query_cant_registros.Fieldbyname('count').Asstring;

//verificamos cuantos registros contiene dicha tabla hay
query_cant_registros.SQL.Clear;
query_cant_registros.SQL.Text:= 'select count(*) as count from ' + query_tablas_bd.Fieldbyname('TABLE_NAME').Asstring;
query_cant_registros.open;

//Le pasamos la cantidad de registros al label
Label_cant_registros_registros.Caption  := query_cant_registros.Fieldbyname('count').Asstring;

end;

procedure TForm1.btnExportaraexcelClick(Sender: TObject);
var

    Libro: _WORKBOOK;
    cantidad_tablas, numerohoja, columna, fila:integer;

  // Definimos las hojas
  Hoja: Array[1..1000] of _WORKSHEET;


begin
 //abrimos el query donde estan las tablas.
query_tablas_bd.Open;
calcularlacantidadderegistros();     //buscamos todos los campos y registros tabla actual.

    numerohoja:=0;

    Excel.connect;


    Libro:= Excel.workbooks.add(EmptyParam,0); //agregamos un nuevo libro

    // le pasamos a la variable Hoja[numerohoja] en este caso 0, cuantos sheets tiene creado nuestro libro
    Hoja[numerohoja]:= Excel.sheets[Libro.Sheets.Count] as _WORKSHEET;

    //creamos los numeros de sheet que necesitamos.
    Libro.Sheets.Add(NULL, Hoja[numerohoja], strtoint(Label_cant_registros.Caption) - 3 ,NULL,0);



//buscamos primero las tablas
with query_tablas_bd do
    begin
    first;                  // elegimos la primera tabla
    calcularlacantidadderegistros();     //buscamos todos los campos y registros tabla actual.

      while not EOF Do
        begin
        numerohoja:=numerohoja+1;

        //le cambiamos el nombre a la hoja por el campo table_name que contiene el nombre de la tabla
        Hoja[numerohoja]:= Excel.sheets[numerohoja] as _WORKSHEET;
        Hoja[numerohoja].Name:=query_tablas_bd.Fieldbyname('TABLE_NAME').Asstring;
        columna:=0;
        fila:=1;


            //buscamos las columbas de la tabla correspondiente.
            query_campos_tabla_bd.First;
            while not query_campos_tabla_bd.Eof do
            begin
            columna:=columna+1;
            //agregamos a la hoja primero las columnas
            Hoja[numerohoja].Cells.Item[fila,columna]:=query_campos_tabla_bd.Fieldbyname('COLUMN_NAME').Asstring;
            query_campos_tabla_bd.Next;
            end;


            //ccargamos un progressbar para que valla llenandose miestras pasan los registros
            Form_esperar.show;
            Form_esperar.ProgressBar1.Max := strtoint(Label_cant_registros_registros.Caption);
            Form_esperar.ProgressBar1.Position:= 0;


            //buscamos todos los registros de la tabla info.
            query_info_tablas_bd.First;
            while not query_info_tablas_bd.Eof do
            begin
            fila:=fila+1;
            columna:=0;

                    //showmessage('Columna:' + inttostr(columna)+ ' fila:' + inttostr(fila)+ ' Label:' + Label_cant_registros_registros.Caption );
                    for columna:= 0 to strtoint(Label_cant_registros_campos.Caption)-1 do
                    begin
                    Hoja[numerohoja].Cells.Item[fila,columna+1]:=DBGrid3.Fields[columna].AsString;
                    end;


            query_info_tablas_bd.Next;
            Form_esperar.ProgressBar1.Position:= Form_esperar.ProgressBar1.Position+1;
            //cerramos el formulario que contiene el progressbar y aumentamos en 1 el progressbar.

            end;


        Next; //next a la bd de de las tablas
        calcularlacantidadderegistros();     //buscamos todos los campos y registros de la otra tabla.

        //Cerramos el form que contiene el progressbar
         Form_esperar.Close;

   end;//while
end;//with


    Excel.visible[0]:=true;
    ShowMessage('Exportado con exito!');
    Excel.disconnect;
end;



end.


Aquí está el programa en funcionamiento:


Adjunto agregué el proyecto.

Espero les sea util como a mi.

Y Cualquier comentario me escriben porque lo que mas deseo es seguir aprendiendo.

Saludos.
Archivos Adjuntos
Tipo de Archivo: zip Programa para realizar backups.zip (23,9 KB, 12 visitas)
__________________
Cristo te ama, ven a d él, ya k te espera con los brazos abiertos. Dios te bendiga mucho
Responder Con Cita
  #2  
Antiguo 15-06-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola jeremiselxi.

Muchas gracias por compartir tu código con nosotros

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 15-06-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Responder Con Cita
  #4  
Antiguo 15-06-2015
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.269
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Muchas gracias por el aporte.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 15-06-2015
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
jeremiselxi,

Cita:
Empezado por jeremiselxi
...Quiero compartir una pequeña aplicación que he realizado para hacer un Backups a una BD y exportarlo a Excel...


Nelson.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Como hacer busqueda en Unit y lo enviar para excel? Paulao Varios 6 29-02-2012 20:42:11
excel a delphi, como mostrar columnas de excel Vyckso Servers 2 13-08-2007 12:38:08
como se usa el TJ...backup para hacer backups en Delphi? molinero1 Varios 4 16-04-2007 18:42:21
como puedo hacer para cambiar un archivo de excel con versión 2.1 a versión 8.0 RONPABLO Servers 4 23-01-2006 06:02:38


La franja horaria es GMT +2. Ahora son las 13:46:54.


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
Copyright 1996-2007 Club Delphi