En el modulo ARCHIVO
Crearemos una funcion para comprobar que no Exista y evitemos sobreescribiremos otro archivo de datos:
PUBLIC
'no Existe el archivo, por lo tanto podemos continuar con el salvado con el mismo nombreRETURN 1
ENDIF
'esta parte se ejecuta cuando Existe el archivo.IF Message.Warning("Existe el archivo de " & tipo, "Cancelar", "Sobreescribir") = 1 THEN
' ha cancelado, pedir de nuevo el nombreRETURN 2
ENDIF
IF Message.Warning("Ha decidido sobreescribir ¿esta seguro?", "Cancelar", "Aceptar") = 1 THEN
' ha cancelado, pedir de nuevo el nombreRETURN 2
ELSE
'el usuario quiere sobreescribir y esta seguro con ello ya que lo ha dicho dos vecesRETURN 1
ENDIF
END
Y ahora haremos la rutina de salvado de datos. Tenemos que organizar como guardar los datos. ¿de que forma lo podemos hacer?
FUNCTION
comprueba
Exist
encia
(destino
AS
String, tipo
AS
String)
AS
Integer
DIM DEVUELVE
AS
Integer
'Exist DEVUELVE TRUE SI ESISTE EL ARCHIVOIF Exist(destino) = FALSE THEN'no Existe el archivo, por lo tanto podemos continuar con el salvado con el mismo nombreRETURN 1
ENDIF
'esta parte se ejecuta cuando Existe el archivo.IF Message.Warning("Existe el archivo de " & tipo, "Cancelar", "Sobreescribir") = 1 THEN
' ha cancelado, pedir de nuevo el nombreRETURN 2
ENDIF
IF Message.Warning("Ha decidido sobreescribir ¿esta seguro?", "Cancelar", "Aceptar") = 1 THEN
' ha cancelado, pedir de nuevo el nombreRETURN 2
ELSE
'el usuario quiere sobreescribir y esta seguro con ello ya que lo ha dicho dos vecesRETURN 1
ENDIF
END
- Con la orden Dialog.SaveFile(), leemos la ruta donde el usuario quiere guardar los datos.
- Vamos a utilizar una cadena de caracteres que llamaremos lineas , donde se vayan añadiendo los datos separados por codigofinline. El codigo seria
Lineas &=dato & codigofinline
- Separación de los datos: para separar los datos unos de otros utilizaremos un carácter poco usado: “|”, y la variable que lo contiene la llamaremos codigofinline
- El primer dato que guardamos sera la versión del archivo de datos “v0.0.1”, y el programa que lo ha realizado. ¿por que? Con el tiempo iremos haciendo mejoras en el programa y seguramente guardaremos datos distintos, con lo cual el programa deberá saber que versión es la que lee para tratarlos adecuadamente en la memoria.
- Guardamos el numero de datos que tenemos (propiedad .COUNT)
- Realizamos un bucle For...Next para ir añadiendo a lineas los datos
- Con el comando File.Save(ruta,lineas) salvamos los datos en un archivo.
PUBLIC
SUB salva(
OPTIONAL ruta
AS
String)
DIM
destino
AS
String DIM
a
AS
Integer DIM
lineas
AS
String DIM
codigofinline
AS
Stringinicio:
'etiqueta utilizada para en el caso de que no deseemos sobreescribir vuelva el programa al inicio del Dialog.SaveFile() IF
ruta
=
""
THENDialog.
Title
=
"Escriba un nombre de archivo para guardar los datos"Dialog.
Path
=
""Dialog.
Filter
= [
"*.lis",
"Datos de Listin"]
a
=
Dialog.
SaveFile()
IF
a
=
-1
THEN GOTO
fins
IF
Right$
(
Dialog.
Path,
Len(
".lis")) <>
".lis"
THENdestino
=
Dialog.
Path
&
".lis" ELSE
destino
=
Dialog.
Path ENDIF
ELSE
destino
= ruta
ENDIF
'Comprueba si Existe el archivo, en tal caso pide confirmación de sobre escritura
IF
comprueba
Exist
encia
(DESTINO,
"listin")
=
2
THENGOTO
inicio
ENDIF
'continua ejecutando el programa
codigofinline
=
"|"Lineas
=
"v0.0.1"
& codigofinline
'informo versiónLineas
&=
"listin.20100718"
& codigofinline
' programa que ha echo el archivolineas
&= var.
id.
COUNT
& codigofinline
'numero de registros Existentes
FOR a
=
0
TO var.
id.
COUNT
-
1 Lineas
&= var.
id[a]
& codigofinline
Lineas
&= var.
dni[a]
& codigofinline
lineas
&= var.
nombre[a]
& codigofinline
lineas
&= var.
apellidos[a]
& codigofinline
lineas
&= var.
empresa[a]
& codigofinline
lineas
&= var.
puesto[a]
& codigofinline
lineas
&= var.
telf_empresa[a]
& codigofinline
lineas
&= var.
telf_parti[a]
& codigofinline
lineas
&= var.
fax[a]
& codigofinline
lineas
&= var.
movil_empresa[a]
& codigofinline
lineas
&= var.
movil_parti[a]
& codigofinline
lineas
&= var.
pag[a]
& codigofinline
lineas
&= var.
foto[a]
& codigofinline
lineas
&= var.
direccion[a]
& codigofinline
lineas
&= var.
observaciones[a]
& codigofinline
lineas
&= var.
fecha_datos[a]
& codigofinline
lineas
&= var.
correo[a]
& codigofinline
NEXT
File
.
Save(
destino, lineas
)
fins:
' hemos pulsado el botón de cancelar en el cuadro de dialogo Dialog.SaveFile() 'fin de la subrutina
END
Y desde el formulario FMAIN en su menú Archivo/Salvar ejecutaremos el código:
PUBLIC
SUB
Salvar_Click
()
archivo.
salva()
END
Nota Importante: Como os dareos cuenta, los archivos de imagen no se guardan, solo las rutas donde estan ubicados. Cuando llevemos las datos de un ordenador a otro, estas imagenes no apareceran. Ver Anexo 4: empaquetado/desempaquetado de datos, donde se explica una posible solución |
No hay comentarios:
Publicar un comentario