|
|
|
|
|
Curso básico de programación en Visual Basic Solución, guardar y leer Cconfig
Las soluciones de la entrega 44 Empezaremos viendo las soluciones al ejercicio propuesto en la entrega (44) anterior, además de algo que no estaba explícitamente propuesto, pero que si no lo has hecho, no te funcionaría bien. Este sería el código a
usar en los métodos Guardar y Leer de la clase cConfig. Public Sub Guardar(ByVal fichero As String)
' guardar en el fichero indicado los valores de las propiedades de la clase
'
' el código está omitido para que lo hagas como ejercicio
' SOLUCIÓN:
Dim nFic As Long
'
On Error Resume Next
' asignar un "canal" libre
nFic = FreeFile
' abrir el fichero para escritura en el canal indicado
Open fichero For Output As nFic
' guardar las cuatro propiedades de esta clase
Print #nFic, Me.Valor1
Print #nFic, Me.Valor2
Print #nFic, Me.Valor3
Print #nFic, Me.Opcion1
' cerrar el canal abierto
Close nFic
'
End Sub
Como puedes comprobar, el código es de lo más simple. Una vez abierto el fichero indicado, se guardan los valores de las cuatro propiedades de la clase. Usamos On Error Resume Next, por si el disco estuviera lleno o no disponible... Veamos ahora el código de Leer. Public Sub Leer(ByVal fichero As String)
' leer del fichero indicado los valores de las propiedades de la clase
'
' el código está omitido para que lo hagas como ejercicio
' SOLUCIÓN:
Dim nFic As Long
Dim s As String
'
' comprobar si existe el fichero
' si no existe, se sale del procedimiento y no se hace nada
' If Dir$(fichero) = "" Then
' Exit Sub
' End If
'
' NOTA:
' Es posible, que si el nombre del fichero está mal formado
' (no es un nombre válido), se produzca un error.
' En ese caso se podría usar el siguiente código,
' o usar una función ExistFile como se ha mostrado en entregas anteriores.
Dim i As Long
'
On Error Resume Next
i = Len(Dir$(fichero))
' Si se produce un error en la línea anterior, es que no existe.
' Además de que si i vale cero, es que no existe.
If Err.Number <> 0 Or i = 0 Then
Exit Sub
End If
'
'
' asignar un "canal" libre
nFic = FreeFile
' abrir el fichero para lectura en el canal indicado
Open fichero For Input As nFic
' leer los cuatro valores en el mismo orden en el que se guardaron
Line Input #nFic, s
Me.Valor1 = s
Line Input #nFic, s
Me.Valor2 = s
Line Input #nFic, s
Me.Valor3 = s
Line Input #nFic, s
' Nota:
' Esta asignación también puede dar error si se ha manipulado el fichero,
' para evitar ese error, podemos usar On Error Resume Next para evitar
' que el programa se detenga.
'
' Como resulta que ya tenemos un On Error activo, no será necesario
' indicarlo nuevamente, pero si la comprobación de que el fichero existe
' se hace desde una función, habría que quitar el comentario.
'On Error Resume Next
Me.Opcion1 = CBool(s)
' cerrar el canal abierto
Close nFic
'
End Sub
Este tampoco es complicado, aunque algo más "largo" que el anterior, entre otras cosas porque se hace una comprobación de que el fichero indicado existe y otra de que el valor asignado a la propiedad Opcion1 es el correcto. En teoría no habría que hacer estas comparaciones, o al menos no habría porqué usar On Error, ya que se supone que el nombre del fichero es correcto, independientemente de que dicho fichero exista o no y por otro lado, cuando se lea ese fichero los datos estarán guardados de forma correcta. Pero siempre es preferible prevenir. Ahora veamos el código del formulario principal, tanto del evento producido al guardar como al leer: Private Sub cmdGuardar_Click()
' guardar los datos en un fichero
'
' SOLUCIÓN:
' (aunque no estaba como ejercicio, si no se hace, no se guarda correctamente)
'
' Asignamos los valores a la clase y guardarlos
mConfig.Valor1 = Text1
mConfig.Valor2 = Text2
mConfig.Valor3 = Text3
If Check1.Value = vbChecked Then
mConfig.Opcion1 = True
Else
mConfig.Opcion1 = False
End If
'
mConfig.Guardar sFic
End Sub
Private Sub cmdLeer_Click()
' leer los datos del fichero indicado
mConfig.Leer sFic
'
'
'$POR HACER: actualizar los controles con los valores de mConfig
' SOLUCIÓN:
asignarConfig mConfig
'
'
End Sub
En el caso del evento
producido al pulsar en el botón Guardar, antes de llamar al método
correspondiente de la clase, hay que asignar los valores a las propiedades
de dicha clase. Espero y confío en que lo hayas hecho bien... y si no es así... pues tampoco pasa nada, ya que por eso te doy la solución... je, je. |