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 implementar un backup de access (https://www.clubdelphi.com/foros/showthread.php?t=45566)

Ariel03 07-07-2007 02:14:35

como implementar un backup de access
 
hola les comento que tengo una aplicacion en delphi 7 y utilizo una base de datos realizada en access xp y queria saber si me podian ayudar a implementar algun codigo o algo para realizar un backup y una restauracion de la base de datos desde la aplicacion... se que copiando y reemplazando el archivo mdb funciona lo mas bien pero quiero que el backup se pueda hacer desde la aplicacion y quede mucho mas atractivo..gracias desde ya.
Ariel

mierda 07-07-2007 11:41:47

Aki va el backup
 
Hola nen, aqui va el backup de las tablas de access, recuperarlo no llegue a hacerlo, espero que si lo haces me lo mandes!!!, un saludo


Código Delphi [-]
 
procedure TFcarga.hacercopiaseg(nombrealias:string;carpetadestino:string);
var
  // todo esto es para los datos
  db1: TDatabase;
  hCursor: hDBICur;        // Cursor for table and query names
  ListDesc: TBLBaseDesc;   // Record of the cursor
  cont_tablas: integer;  // para saber por cual vamos de las tablas
  max_tablas: integer; // sacamos el numero de tablas que tenemos
  // todo esto es para sacar a fichero de texto
  fichdest:textfile;
  sep: string;
  sep_fin: string;
  rutadest: string;
  num_campos: integer;
  cont_campos: integer;
  texto: string;
  frase_act: string;
  num_reg: integer;
  reg_act: integer;
  ruta: string;
  Present: TDateTime;
  Year, Month, Day, Hour, Min, Sec, MSec: Word;
  ruta_con_modo: string;
begin
      ListBox1.Clear;
      ListBox2.Clear;
      Database1 := nil;
      try
        Database1 := TDatabase.Create(nil);
        // Set the neccessary properties to open your database
        Database1.databasename := nombrealias;
        Database1.LoginPrompt := False;
      // database1.Params.Add('password=egacbo');
        Database1.Connected := True;
        // Generates a cursor with all table and query names
        Check(DbiOpenTableList(Database1.Handle, False, False, '*', hCursor));
        // Move thru the records of the cursor to get the names
        while (DbiGetNextRecord(hCursor, dbiNOLOCK, @ListDesc, nil)
              = dbiErr_None) do
        if ListDesc.bView then     // Is it a query?
          ListBox2.Items.Add(ListDesc.szName)
          else
            ListBox1.Items.Add(ListDesc.szName);
        // Close the cursor
        // cerramos la base de datos con la que sacamos las tablas
        dbiCloseCursor(hCursor);
        Database1.Connected := False;
        Database1.Free;
        Database2.Connected := false;
        // abrimos el otro database que va a ser con el que trabajemos
        Database2.AliasName := nombrealias;
        Database2.LoginPrompt := False;
     //   database2.Params.Add('password=egacbo');
        Database2.Connected := True;
        cont_tablas := 0;
        max_tablas := ListBox1.items.count;
        gauge1.MaxValue := max_tablas;
        gauge1.Progress := 0;

        //------- creamos la carpeta del dia que hacemos el backup
        crear_carp(carpetadestino);
        while (cont_tablas < max_tablas) do
          begin
            table1.Active := false; // cerramos la tabla para cambiarle el nombre
            Table1.TableName := ListBox1.Items[cont_tablas];
            table1.Active := true;
            num_reg := table1.RecordCount;
            gauge2.MaxValue := num_reg;
            gauge2.Progress := 0;
            // ----------------- Crea y rellena los txt
                sep := '|';
                Present:= Now;
                DecodeDate(Present, Year, Month, Day);
                ruta_con_modo := 'C:\albaranes\' + carpetadestino + '\';
                rutadest := (ruta_con_modo + inttostr(day) + '_' +  inttostr(month) + '_' + inttostr(year) + '\' + ListBox1.Items[cont_tablas] + '.txt' );
                assignfile(fichdest,rutadest);
                rewrite(fichdest);
                Table1.First;
                num_campos := table1.fields.Count - 1;
                frase_act := '';
                texto := '';
                while (table1.Eof <> true) do
                  begin
                    gauge2.Progress := gauge2.Progress + 1;
                    cont_campos := 0;
                    while (cont_campos <= num_campos) do
                      begin
                        if (cont_campos = 0) then
                          begin
                            texto := table1.Fields[cont_campos].asstring;
                          end
                        else
                          begin
                            texto := sep + table1.Fields[cont_campos].asstring;
                          end;
                        cont_campos := cont_campos + 1;
                        frase_act := frase_act + texto;
                      end;
                     frase_act := frase_act + ';';
                     Writeln(fichdest, frase_act);
                     flush(fichdest);
                     frase_act := '';
                     table1.next;
                  end;
                closefile(fichdest);
            // ---------------------------------------------------------------------
            cont_tablas := cont_tablas + 1;
            gauge1.Progress := gauge1.Progress + 1;
          //  showmessage ('aqui cambiamos de tabla');
          end;

//        dbiCloseCursor(hCursor);
//        Database1.Connected := False;  // no lo quiero cerrar todavia
      except
        Database1.Free;
        raise;
      end;
//      Database1.Free;
 
end;

PD: necesitas 2 databases, 1 table y 1 datasource

courtois 09-07-2007 03:36:11

Por que no haces una copia del archivo desde tu aplicación? o a que te refiers con que quede más "atractivo"?

Ariel03 09-07-2007 21:38:09

hola courtois tu idea me gusta mucho... ya la he implementado.. puedo realizar la copia del archivo en otro lugar de almacenamiento.. pero cuando quiero restaurarla con el mismo proceso... lo hace.. pero es como que no lo copiara.. estan todas las tablas en blanco.. en que le puedo estar errando.
gracias


La franja horaria es GMT +2. Ahora son las 14:10:56.

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