domingo, 26 de junio de 2011

Módulo Archivo: Salvar

¿y ahora que?, pues habrá que guardar los datos que hemos introducidos claro esta...
En el modulo ARCHIVO
Crearemos una funcion para comprobar que no Exista y evitemos sobreescribiremos otro archivo de datos:
PUBLIC FUNCTION compruebaExistencia(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 nombre
RETURN 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 nombre
RETURN 2
ENDIF
IF Message.Warning("Ha decidido sobreescribir ¿esta seguro?", "Cancelar", "Aceptar") = 1 THEN
' ha cancelado, pedir de nuevo el nombre
RETURN 2
ELSE
'el usuario quiere sobreescribir y esta seguro con ello ya que lo ha dicho dos veces
RETURN 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?
      1. Con la orden Dialog.SaveFile(), leemos la ruta donde el usuario quiere guardar los datos.
      2. 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
      1. 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
      2. 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.
      3. Guardamos el numero de datos que tenemos (propiedad .COUNT)
      4. Realizamos un bucle For...Next para ir añadiendo a lineas los datos
      5. 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 String
inicio: 'etiqueta utilizada para en el caso de que no deseemos sobreescribir vuelva el programa al inicio del Dialog.SaveFile()
IF ruta = "" THEN
Dialog.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" THEN
destino = 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 compruebaExistencia(DESTINO, "listin") = 2 THEN
GOTO inicio
ENDIF


'continua ejecutando el programa
codigofinline = "|"
Lineas = "v0.0.1" & codigofinline 'informo versión
Lineas &= "listin.20100718" & codigofinline ' programa que ha echo el archivo
lineas &= 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