Agenda muy simple en Visual basic utilizando Ficheros de acceso aleatorio o también denominados...

10
Agenda muy simple en Visual basic utilizando Ficheros de acceso aleatorio o también denominados Random , para almacenar los datos de los contactos de la Agenda. Una vista del ejemplo: Para manipular los datos se utiliza una estructura o UDT que tiene las siguientes variables: Texto plano Copiar código fuente Imprimir 1. ' Estructura para los datos de los contactos de la agenda 2. Private Type Contacto 3. Nombre As String * 40 4. Apellido As String * 50 5. Telefono As String * 40 6. Mail As String * 70 7. Nota As String * 250 8. End Type

Transcript of Agenda muy simple en Visual basic utilizando Ficheros de acceso aleatorio o también denominados...

Page 1: Agenda muy simple en Visual basic utilizando Ficheros de acceso aleatorio o también denominados Random

Agenda muy simple en Visual basic utilizando Ficheros de acceso aleatorio o también denominados Random , para almacenar los datos de los contactos de la Agenda.

Una vista del ejemplo:

Para manipular los datos se utiliza una estructura o UDT que tiene las siguientes variables:

Texto plano Copiar código fuente Imprimir

1. ' Estructura para los datos de los contactos de la agenda 2. Private Type Contacto 3. Nombre As String * 40 4. Apellido As String * 50 5. Telefono As String * 40 6. Mail As String * 70 7. Nota As String * 250 8. End Type

Page 2: Agenda muy simple en Visual basic utilizando Ficheros de acceso aleatorio o también denominados Random

Como se puede ver en la imagen, tiene una opción para buscar un registro y especificar por que campo buscar, ya sea por el nombre del contacto, el Apellido, el telefono o el correo electrónico.

Pasos a seguir para armar el formulario con los controles:

Agregar en un Formulario 6 controles TextBox con los siguiente nombres:

1. txtNombre 2. txtApellido 3. txtTelefono 4. txtMail 5. txtNota 6. txtBuscar

Luego agregar 7 CommandButton con los siguientes nombres:

1. CmdAnterior : Botón para ir al anterior registro 2. cmdSiguiente : Botón para ir al siguiente registro 3. cmdGuardar : Botón para guardar los cambios cuando se seleccionó

previamente la opción Nuevo Registro 4. cmdEliminar: Elimina el registro actual 5. cmdNuevo : Añade un nuevo reg 6. cmdBuscar : Para buscar 7. Cmdsalir : Descarga el Form

Ahora, agregar un control ComboBox llamado Combo1. A este combo, establecerle en la propiedad Style el valor 2 ( DropDownList ) y agregarle los siguientes valores en la propiedad List: Nombre, Apellido, Telefono e Mail en ese orden

Nota: Para agregar datos en la propiedad List desde la ventana de propiedades, debes mantener la tecla Ctrl presionada y presionar la tecla Enter para añadir un nuevo dato o Item.

Por último, agregar un control Label llamado lblStatus que servirá para poder mostrar cuando nos desplazamos por los registros, con los botones anterior y siguiente, el número del registro actual y la cantidad de registros que hay en el archivo. Este Label lo puedes situar en la parte inferior del formulario o donde quieras.

' Estructura para los datos de los contactos de la agendaPrivate Type Contacto Nombre As String * 40 Apellido As String * 50 Telefono As String * 40 Mail As String * 70 Nota As String * 250End Type

Page 3: Agenda muy simple en Visual basic utilizando Ficheros de acceso aleatorio o también denominados Random

Colocar el código fuente en el formulario:

Texto plano Copiar código fuente Imprimir

1. Option Explicit 2.3. 'Variables 4. '################################################## 5.6. ' Estructura para los datos de los contactos de la agenda 7. Private Type Contacto 8. Nombre As String * 40 9. Apellido As String * 50 10. Telefono As String * 40 11. Mail As String * 70 12. Nota As String * 250 13. End Type 14.15. 'Variables para utilizar la estructura anterior 16. Dim Datos As Contacto 17. Dim DatosTemp As Contacto 18.19. 'Variables para el archivo de los datos de contacto y temporal 20. Dim FileFree As Integer 21. Dim FileTemp As Integer 22.23. 'Variables para la posición del primer y último registro 24. Dim RegActual As Long 25. Dim RegUltimo As Long 26. ' Variable para la posición Temporal del registro 27. Dim RegActualTemp As Long 28.29. Dim Pos As Integer, p As Integer 30.31.32.33.34. '###################################################### 35. 'Funciones y procedimientos 36. '###################################################### 37.38.39.40. ' Subrutina que guarda los datos en el archivo 41. '############################################# 42.43. Private Sub GuardarDatos() 44.45. 'Asignamos los datos de la estructura con el contenido de los

textBox 46. With Datos 47.48. .Nombre = txtNombre.Text 49. .Apellido = txtApellido 50. .Telefono = txtTelefono.Text 51. .Nota = txtNota.Text 52. .Mail = Trim(txtMail) 53.54. End With 55.56. 'Escribimos los datos en el archivo y en la posición

Page 4: Agenda muy simple en Visual basic utilizando Ficheros de acceso aleatorio o también denominados Random

57. Put #FileFree, RegActual, Datos 58. End Sub 59.60. ' Subrutina que Visualiza los datos en los textBox 61. '################################################## 62.63. Private Sub VisualizarDatos() 64.65. 'Lee del fichero en el registro posicionado y almacena los datos_ _ 66. en la la variable UDT 67. Get #FileFree, RegActual, Datos 68.69. ' Mostramos los datos en las cajas de texto 70. With Datos 71. txtApellido = Trim(.Apellido) 72. txtNombre = Trim(.Nombre) 73. txtTelefono = Trim(.Telefono) 74. txtMail = Trim(.Mail) 75. txtNota.Text = Trim(.Nota) 76. End With 77.78. 'Mostramos en el control Label la posición del registro actual _ 79. y la cantidad o Total de registros que hay en el archivo 80. lblStatus.Caption = "Registro Actual: " & CStr(RegActual) &

vbNewLine _ 81. & " Total de registros: " & CStr(RegUltimo) 82.83. End Sub 84.85. 'Botón que elimina un registro del archivo 86. '############################################ 87.88. Private Sub cmdEliminar_Click() 89.90. Pos = RegActual 91.92. If MsgBox(" Está seguro de eliminar el contacto ? ", vbYesNo) =

vbNo Then 93.94. txtNombre.SetFocus 95.96. Exit Sub 97. End If 98.99. ' Verificamos que el archivo temporal no exista, si existe se

elimina 100. If Dir("Temporal.tmp") = "Temporal.tmp" Then 101. Kill "Temporal.tmp" 102. End If 103.104. FileTemp = FreeFile 105. 'Abrimos y creamos un nuevo fichero temporal 106. Open "Temporal.tmp" For Random As FileTemp Len =

Len(DatosTemp) 107.108. RegActual = 1 109. RegActualTemp = 1 110.111. 'Se recorren los registros del archivo 112.113. For p = 1 To RegUltimo - 1

Page 5: Agenda muy simple en Visual basic utilizando Ficheros de acceso aleatorio o también denominados Random

114.115. Get #FileFree, RegActual, Datos 116.117. 'Este es el registro que se elimina 118. If RegActualTemp = Pos Then 119. RegActual = RegActual + 1 120. End If 121.122. Get #FileFree, RegActual, Datos 123.124.125. With DatosTemp 126. .Apellido = Trim(Datos.Apellido) 127. .Nombre = Trim(Datos.Nombre) 128. .Telefono = Trim(Datos.Telefono) 129. .Mail = Trim(Datos.Mail) 130. .Nota = Trim(Datos.Nota) 131. End With 132.133. 'Escribe en el archivo temporal los datos 134.135. Put #FileTemp, RegActualTemp, DatosTemp 136.137. RegActual = RegActual + 1 138. RegActualTemp = RegActualTemp + 1 139.140. Next 141.142.143. Close FileFree 144. 'Elimina el archjivo con los datos 145. Kill "Datos.dat" 146. Close FileTemp 147.148. 'Renombra el archivo temporal a datos.dat 149. Name "Temporal.tmp" As "Datos.dat" 150.151.152. ' Mostramo los datos en los textbox 153. Cargar 154. RegActual = Pos 155. VisualizarDatos 156.157. End Sub 158.159. Private Sub cmdGuardar_Click() 160. GuardarDatos 161. End Sub 162.163. Private Sub Cmdsalir_Click() 164. 'Guarda los cambios en el archivo antes de salir 165. GuardarDatos 166.167. 'cierra el archivo abierto 168. Close #FileFree 169. End 170. End Sub 171.172. Private Sub form_load() 173.174. 'Carga el primer registro del archivo

Page 6: Agenda muy simple en Visual basic utilizando Ficheros de acceso aleatorio o también denominados Random

175. Cargar 176. 'Selecciona en el combo para la búsqueda de datos 177. Combo1 = Combo1.List(0) 178.179. Cargarcaptions 180.181. End Sub 182. Private Sub Cargar() 183.184. FileFree = FreeFile 185. Open "Datos.dat" For Random As FileFree Len = Len(Datos) 186.187. RegActual = 1 188. ' Almacenamos la posición del último registro 189. RegUltimo = LOF(FileFree) / Len(Datos) 190.191. If RegUltimo = 0 Then 192. RegUltimo = 1 193. End If 194.195. 'Cargamos los datos en los Textbox 196. VisualizarDatos 197. End Sub 198.199. 'Botón que agrega un nuevo registro 200. '##################################### 201.202. Private Sub cmdNuevo_click() 203.204. RegUltimo = RegUltimo + 1 205.206.207. 'Limpia los datos de la estructura para poder agregar un nuevo

registro 208. With Datos 209. .Apellido = "" 210. .Nombre = "" 211. .Telefono = "" 212. .Mail = "" 213. .Nota = "" 214.215. End With 216.217. ' Graba datos vacios en el nuevo registro hasta que se

presione el botón _ 218. Guardar que graba los verdaderos datos 219. Put #FileFree, RegUltimo, Datos 220.221. RegActual = RegUltimo 222.223.224. VisualizarDatos 225. txtNombre.SetFocus 226. End Sub 227.228.229. 'Botón para posicionar en el siguiente registro 230. '############################################## 231.232.233. Private Sub cmdSiguiente_click()

Page 7: Agenda muy simple en Visual basic utilizando Ficheros de acceso aleatorio o también denominados Random

234.235. If RegActual = RegUltimo Then 236. MsgBox " Ultimo registro ", vbInformation 237. Else 238. 'Incrementa la posición 239. RegActual = RegActual + 1 240. 'Cargamos los datos en el textbox del siguiente registro 241. VisualizarDatos 242. End If 243. txtNombre.SetFocus 244. End Sub 245.246. 'Botón para posicionar en el Anterior registro 247. '############################################## 248.249. Private Sub CmdAnterior_click() 250.251. If RegActual = 1 Then 252. MsgBox " Primer registro ", vbInformation 253. Else 254. 'Decrementamos la variable que mantiene la posición del

registro actual 255. RegActual = RegActual - 1 256. 'Mostramos los datos en las cajas de texto 257. VisualizarDatos 258. End If 259.260. txtNombre.SetFocus 261.262. End Sub 263.264. 'Botón para Buscar datos 265. '############################################## 266.267. Private Sub cmdBuscar_click() 268.269. Dim Encontrado As Boolean, PosReg As Long, tmp As Contacto 270.271. If txtBuscar = "" Then txtNombre.SetFocus: Exit Sub 272.273. Encontrado = False 274.275. 'Recorremos desde el primer hasta el último en busca del

registro a buscar 276.277. For PosReg = 1 To RegUltimo 278.279. 'Leemos el registro 280. Get #FileFree, PosReg, tmp 281.282. 'Si es el dato es igual salimos del bucle 283. If UCase(txtBuscar) = UCase(Trim(BuscarPor(tmp))) Then 284. Encontrado = True 285. Exit For 286. End If 287.288. Next 289.290. If Encontrado Then 291.292. RegActual = PosReg

Page 8: Agenda muy simple en Visual basic utilizando Ficheros de acceso aleatorio o también denominados Random

293. 'Cargamos los datos en los text 294. VisualizarDatos 295.296. Else 297. MsgBox "Nombre: " & txtBuscar & " No se ha encontrado el

registro" 298. End If 299. txtNombre.SetFocus 300.301. End Sub 302.303. 'Función que retorna el valor de la búsqueda 304. '############################################# 305.306. Private Function BuscarPor(t As Contacto) 307.308. Select Case Combo1.ListIndex 309.310. Case 0: BuscarPor = t.Nombre 311. Case 1: BuscarPor = t.Apellido 312. Case 2: BuscarPor = t.Telefono 313. Case 3: BuscarPor = t.Mail 314.315. End Select 316.317. End Function 318.319. ' Establece los captions de los controles Command del

formulario 320.321. Private Sub Cargarcaptions() 322. Me.Caption = " Agenda simple utilizando archivos aleatorios " 323. CmdAnterior.Caption = " Anterior " 324. cmdSiguiente.Caption = " Siguiente " 325. cmdGuardar.Caption = " Guardar " 326. cmdEliminar.Caption = " Eliminar " 327. cmdNuevo.Caption = " Nuevo " 328. cmdBuscar.Caption = " Buscar " 329. Cmdsalir.Caption = " Salir " 330. End Sub

Nota: Si se desea agregar mas opciones, como por ejemplo el Domicilio, Pais, o cualquier otro dato, solo hay que modificar el estructura Datos y obviamente cambiar en todos los procedimientos donde se asignan y leen valores los nuevos que se han agregado.

Cargar'Selecciona en el combo para la búsqueda de datosCombo1 = Combo1.List(0)

Cargarcaptions

End SubPrivate Sub Cargar()

FileFree = FreeFile