Escolar Documentos
Profissional Documentos
Cultura Documentos
Para manipular los datos se utiliza una estructura o UDT que tiene las siguientes variables:
Texto planoCopiar cdigo fuenteImprimir 1. 2. 3. 4. 5. 6. 7. 8. ' Estructura para los datos de los contactos de la agenda Private Type Contacto Nombre As String * 40 Apellido As String * 50 Telefono As String * 40 Mail As String * 70 Nota As String * 250 End Type
' Estructura para los datos de los contactos de la agenda Private Type Contacto Nombre As String * 40 Apellido As String * 50 Telefono As String * 40 Mail As String * 70 Nota As String * 250 End Type
Como se puede ver en la imagen, tiene una opcin para buscar un registro y especificar por que campo buscar, ya sea por el nombre del contacto, el Apellido, el telefono o el correo electrnico.
Luego agregar 7 CommandButton con los siguientes nombres: 1. CmdAnterior : Botn para ir al anterior registro 2. cmdSiguiente : Botn para ir al siguiente registro 3. cmdGuardar : Botn para guardar los cambios cuando se seleccion previamente la opcin Nuevo Registro 4. cmdEliminar: Elimina el registro actual 5. cmdNuevo : Aade 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 aadir 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 nmero 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.
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 posicin 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. 'Botn 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
114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174.
Get #FileFree, RegActual, Datos 'Este es el registro que se elimina If RegActualTemp = Pos Then RegActual = RegActual + 1 End If Get #FileFree, RegActual, Datos With DatosTemp .Apellido = Trim(Datos.Apellido) .Nombre = Trim(Datos.Nombre) .Telefono = Trim(Datos.Telefono) .Mail = Trim(Datos.Mail) .Nota = Trim(Datos.Nota) End With 'Escribe en el archivo temporal los datos Put #FileTemp, RegActualTemp, DatosTemp RegActual = RegActual + 1 RegActualTemp = RegActualTemp + 1 Next Close FileFree 'Elimina el archjivo con los datos Kill "Datos.dat" Close FileTemp 'Renombra el archivo temporal a datos.dat Name "Temporal.tmp" As "Datos.dat" ' Mostramo los datos en los textbox Cargar RegActual = Pos VisualizarDatos End Sub Private Sub cmdGuardar_Click() GuardarDatos End Sub Private Sub Cmdsalir_Click() 'Guarda los cambios en el archivo antes de salir GuardarDatos 'cierra el archivo abierto Close #FileFree End End Sub Private Sub form_load() 'Carga el primer registro del archivo
175. Cargar 176. 'Selecciona en el combo para la bsqueda 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 posicin 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. 'Botn 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 botn _ 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. 'Botn para posicionar en el siguiente registro 230. '############################################## 231. 232. 233. Private Sub cmdSiguiente_click()
234. 235. If RegActual = RegUltimo Then 236. MsgBox " Ultimo registro ", vbInformation 237. Else 238. 'Incrementa la posicin 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. 'Botn 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 posicin 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. 'Botn 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
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. 'Funcin que retorna el valor de la bsqueda 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
Cargar 'Selecciona en el combo para la bsqueda de datos Combo1 = Combo1.List(0) Cargarcaptions End Sub Private Sub Cargar() FileFree = FreeFile
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.