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 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 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 = rutaENDIF 'Comprueba si Existe el archivo, en tal caso pide confirmación de sobre escritura
IF
compruebaExistencia(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
| 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