La Web del Programador: Comunidad de Programadores
 
    Pregunta:  45866 - CREAR BACKUPS DE LA BD
Autor:  Coco Cuenca
Quisiera saber como hacer que mi aplicaciĆ³n hecha en PB genere backups de la bd a la que se conecta. Y que puedan ser almacenados en un disquete o en una determinada carpeta.

Gracias de antemano.

  Respuesta:  Oxido social
Que tal Coco!!!

Primero tienes que establecer de que BD se trata, en la gran mayoria de BD respetables manejan tablas de sistema, dentro de este conjunto tienes una que se llama comunmente systables, donde esta el nombre de tus tablas y necesitaremos otra que se llama syscolumns, donde esta el nombre de cada columna.

Bueno, partamos de esta tabla para hacer un rastreo de todas las tablas.
Crea un DW con systables y otro con syscolumns, y este ultimo que reciba el ID de la tabla. Por ejemplo:
dw_tabla (SELECT tabid, tabname FROM systables)
dw_Col (SELECT ColName FROM SysColumns WHERE Tabid = :Param_TabId)
Crea un tercer DW sin datawindowobject
dw_sql

1) Conecta
2) haz un retrieve al de tablas
3) Aplicas un for al dw_de tablas y por cada registro aplicar un retrieve al de columnas.
4) Realizas un recorrido del dw_de columnas para obtener una cadena con todas las columnas de la tabla.
5) Por cada obtencion del listado de columnas vas a formar un sql que se va a crear un DW dinamico sobre del tercer DW (dw_sql)
6) Conectas el DW y realizas el retrieve
7) Luego aplicas la funcion SAVEAS y listo.

NOTAS:
1) Te va a servir si nadie esta actualizando la informacion.
2) Puedes usar datastore en vez de DW, pero no puedes ver la informacion mientrsa realizas tus pruebas.

Pero es una buena manera para realizar la tareas de resplado automaticas o programadas desde una aplicacion, claro que es un ejemplo con las validaciones minimas necesarias.

Este seria tu codigo en un boton, o donde creas conveniente para que sea disparado.

Recibe un saludo y espero que te sirva esta breve explicacion.

Saludos desde Guadalajara, Mexico.

// Variables
LONG ll_Ren
STRING new_syntax
STRING error_syntaxfromSQL
STRING error_create

dw_tabla.Retrieve ()
FOR ll_Ren = 1 TO dw_tabla.RowCount ()
ls_TabName = dw_tabla.GetItemString (ll_ren, 'tabname');
ll_Tabid = dw_Tabla.GetItemNumber (ll_Ren, 'Tabid');

dw_Col.Retrieve (ll_TabId)
ls_ListaCol = ''
FOR ll_RenCol = 1 to dw_Col.RowCount ()
ls_ColName = dw_Col.GetItemString (ll_RenCol, 'ColName')
IF (ls_ListaCol = '') THEN
ls_ListaCol = ls_ColName
ELSE
ls_ListaCol = ls_ListaCol + ', ' + ls_ColName
END IF
NEXT

ls_SQL = 'SELECT ' + ls_listaCol + ' FROM ' + ls_TabName;
new_syntax = SQLCA.SyntaxFromSQL (ls_sql, 'Style(Type=Grid)', error_syntaxfromSQL)
IF Len(error_syntaxfromSQL) > 0 THEN
MessageBox ('Error', 'Error al crear la sindaxis del dw');
RETURN
END IF

// Generate new DataWindow
dw_sql.Create (new_syntax, error_create)
IF Len (error_create) > 0 THEN
MessageBox ('Error', 'Error al crear el dw');
RETURN
END IF
dw_sql.SetTransObject(SQLCA)
dw_sq.Retrieve()