Ver Mensaje Individual
  #4 (permalink)  
Antiguo 25/03/2010, 07:38
Avatar de XYON126
XYON126
 
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 18 años
Puntos: 0
Respuesta: Error en codigo RANDOM

Hola pkj!

He realizado una adaptación de la agenda eliminando la opción de registro siguiente y anterior y le añadido varios campos mas, el problema es que me da error en el "Private Sub VisualizarDatos()" con los datos a partir de "'Variables empresa" y el error que me da es error de "Uso no valido de la propiedad" ¿Porque me da ese error si solo he añadido mas campos y eliminado dos comandos sin modificar propiedad alguna?.

Adjunto el codigo un saludo.

Código vb:
Ver original
  1. Option Explicit
  2.  
  3. 'Variables
  4. '##################################################
  5.  
  6. ' Estructura para dar de alta los datos de los clientes.
  7.  
  8. Private Type D_clientes
  9.  
  10. 'Variables persona de contacto
  11. nombre As String * 20
  12. apellido1 As String * 20
  13. apellido2 As String * 20
  14. telefono As String * 20
  15. movil As String * 20
  16. fax As String * 20
  17. email As String * 30
  18. cargo As String * 15
  19.  
  20. 'Variables empresa
  21. empresa As String * 25
  22. cif As String * 15
  23. direccion As String * 25
  24. NR As String * 5
  25. puerta As String * 5
  26. poligono As String * 25
  27. localidad As String * 25
  28. ciudad As String * 20
  29. codpostal As String * 10
  30. pais As String * 15
  31. nrcliente As Integer
  32.  
  33. End Type
  34.  
  35. 'Variables para utilizar la estructura anterior
  36.  
  37. Dim cliente As D_clientes
  38. Dim clienteTemp As D_clientes
  39.  
  40. 'Variables para el archivo de los datos de D_clientes y temporal
  41. Dim FileFree As Integer
  42. Dim FileTemp As Integer
  43.  
  44. 'Variables para la posición del primer y último registro
  45. Dim RegActual As Long
  46. Dim RegUltimo As Long
  47. ' Variable para la posición Temporal del registro
  48. Dim RegActualTemp As Long
  49.  
  50. Dim Pos As Integer, p As Integer
  51.  
  52. '######################################################
  53. 'Funciones y procedimientos
  54. '######################################################
  55.  
  56.  
  57.  
  58. ' Subrutina que guarda los datos en el archivo
  59. '#############################################
  60.  
  61. Private Sub GuardarDatos()
  62.  
  63. 'Asignamos los datos de la estructura con el contenido de los textBox
  64. With cliente
  65.  
  66.      'Variables persona de contacto
  67. .nombre = txt_nombre.Text
  68. .apellido1 = txt_apellido1.Text
  69. .apellido2 = txt_apellido2.Text
  70. .telefono = txt_telefono.Text
  71. .movil = txt_movil.Text
  72. .fax = txt_fax.Text
  73. .email = Trim(txt_email)
  74. .cargo = txt_cargo.Text
  75.  
  76. 'Variables empresa
  77. .empresa = txt_empresa.Text
  78. .cif = txt_cif.Text
  79. .direccion = txt_direccion.Text
  80. .NR = txt_NR.Text
  81. .puerta = txt_puerta.Text
  82. .poligono = txt_poligono.Text
  83. .localidad = txt_localidad.Text
  84. .ciudad = txt_ciudad.Text
  85. .codpostal = txt_codpostal.Text
  86. .pais = txt_pais.Text
  87. .nrcliente = txt_nrcliente.Text
  88.  
  89. End With
  90.  
  91. 'Escribimos los datos en el archivo y en la posición
  92. Put #FileFree, RegActual, cliente
  93. End Sub
  94.  
  95. ' Subrutina que Visualiza los datos en los textBox
  96. '##################################################
  97.  
  98. Private Sub VisualizarDatos()
  99.  
  100. 'Lee del fichero en el registro posicionado y almacena los datos _
  101. en la la variable UDT
  102. Get #FileFree, RegActual, cliente
  103.  
  104. ' Mostramos los datos en las cajas de texto
  105. With cliente
  106.  
  107. 'Variables persona de contacto
  108.     txt_nombre = Trim(.nombre)
  109.      txt_apellido1 = Trim(.apellido1)
  110.      txt_apellido2 = Trim(.apellido2)
  111.      txt_telefono = Trim(.telefono)
  112.      txt_movil = Trim(.movil)
  113.      txt_fax = Trim(.fax)
  114.      txt_email = Trim(.email)
  115.      txt_cargo = Trim(.cargo)
  116.  
  117. 'Variables empresa
  118.     txt_empresa = Trim(.empresa)
  119.      txt_cif = Trim(.cif)
  120.      txt_direccion = Trim(.direccion)
  121.      txt_NR = Trim(.NR)
  122.      txt_puerta = Trim(.puerta)
  123.      txt_poligono = Trim(.poligono)
  124.      txt_localidad = Trim(.localidad)
  125.      txt_ciudad = Trim(.ciudad)
  126.      txt_codcodpostal = Trim(.codpostal)
  127.      txt_pais = Trim(.pais)
  128.      txt_nrcliente = .nrcliente
  129.  
  130.  
  131. End With
  132.  
  133. 'Mostramos en el control Label la posición del registro actual _
  134. y la cantidad  o Total de registros que hay en el archivo
  135. lbl_status.Caption = "    Reg. Actual.:" & CStr(RegActual) & vbNewLine _
  136.                     & "Total registros.:" & CStr(RegUltimo)
  137.  
  138. End Sub
  139.  
  140. 'Botón que elimina un registro del archivo
  141. '############################################
  142.  
  143. Private Sub cmd_eliminar_Click()
  144.  
  145.  
  146. Pos = RegActual
  147.  
  148. If MsgBox(" Está seguro de eliminar el cliente ? ", vbYesNo) = vbNo Then
  149.  
  150. txt_empresa.SetFocus
  151.  
  152. Exit Sub
  153. End If
  154.  
  155. ' Verificamos que el archivo temporal no exista, si existe se elimina
  156. If Dir("Temporal.tmp") = "Temporal.tmp" Then
  157. Kill "Temporal.tmp"
  158. End If
  159.  
  160. FileTemp = FreeFile
  161. 'Abrimos y creamos un nuevo fichero temporal
  162. Open "Temporal.tmp" For Random As FileTemp Len = Len(clienteTemp)
  163.  
  164. RegActual = 1
  165. RegActualTemp = 1
  166.  
  167. 'Se recorren los registros del archivo
  168.  
  169. For p = 1 To RegUltimo - 1
  170.  
  171.     Get #FileFree, RegActual, cliente
  172.    
  173.     'Este es el registro que se elimina
  174.    If RegActualTemp = Pos Then
  175.         RegActual = RegActual + 1
  176.     End If
  177.    
  178.     Get #FileFree, RegActual, cliente
  179.  
  180.  
  181.     With clienteTemp
  182.    
  183.         'Variables persona de contacto
  184.        .nombre = Trim(cliente.nombre)
  185.         .apellido1 = Trim(cliente.apellido1)
  186.         .apellido2 = Trim(cliente.apellido2)
  187.         .telefono = Trim(cliente.telefono)
  188.         .movil = Trim(cliente.movil)
  189.         .fax = Trim(cliente.fax)
  190.         .email = Trim(cliente.email)
  191.         .cargo = Trim(cliente.cargo)
  192.  
  193.         'Variables empresa
  194.       .empresa = Trim(cliente.empresa)
  195.         .cif = Trim(cliente.cif)
  196.         .direccion = Trim(cliente.direccion)
  197.         .NR = Trim(cliente.NR)
  198.         .puerta = Trim(cliente.puerta)
  199.         .poligono = Trim(cliente.poligono)
  200.         .localidad = Trim(cliente.localidad)
  201.         .ciudad = Trim(cliente.ciudad)
  202.         .codcodpostal = Trim(cliente.codpostal)
  203.         .pais = Trim(cliente.pais)
  204.         .nrcliente = cliente.nrcliente
  205.  
  206.        
  207.     End With
  208.    
  209.     'Escribe en el archivo temporal los datos
  210.    
  211.     Put #FileTemp, RegActualTemp, clienteTemp
  212.  
  213.     RegActual = RegActual + 1
  214.     RegActualTemp = RegActualTemp + 1
  215.  
  216. Next
  217.  
  218.  
  219. Close FileFree
  220. 'Elimina el archjivo con los datos
  221. Kill "Datos.dat"
  222. Close FileTemp
  223.  
  224. 'Renombra el archivo temporal a Datos.dat
  225. Name "Temporal.tmp" As "Datos.dat"
  226.  
  227.  
  228. ' Mostramo los datos en los textbox
  229. Cargar
  230. RegActual = Pos
  231. VisualizarDatos
  232.  
  233. End Sub
  234.  
  235. 'Botón que guarda un registro en el archivo
  236. '############################################
  237.  
  238. Private Sub cmd_guardar_Click()
  239. GuardarDatos
  240. End Sub
  241.  
  242. 'Botón para salir de la aplicación.
  243. '############################################
  244.  
  245. Private Sub cmd_salir_Click()
  246. 'Guarda los cambios en el archivo antes de salir
  247. GuardarDatos
  248.  
  249. 'cierra el archivo abierto
  250. Close #FileFree
  251. End
  252. End Sub
  253.  
  254. Private Sub Form_Load()
  255. 'Carga el primer registro del archivo
  256. Cargar
  257. 'Selecciona en el combo para la búsqueda de datos
  258. cmb_buscar = cmb_buscar.List(0)
  259.  
  260. 'Cargarcaptions
  261.  
  262. End Sub
  263.  
  264. Private Sub Cargar()
  265.  
  266. FileFree = FreeFile
  267. Open "Datos.dat" For Random As FileFree Len = Len(cliente)
  268.  
  269. RegActual = 1
  270. ' Almacenamos la posición del último registro
  271. RegUltimo = LOF(FileFree) / Len(cliente)
  272.  
  273. If RegUltimo = 0 Then
  274. RegUltimo = 1
  275. End If
  276.  
  277. 'Cargamos los datos en los Textbox
  278. VisualizarDatos
  279. End Sub
  280.  
  281. 'Botón que agrega un nuevo registro
  282. '#####################################
  283.  
  284. Private Sub cmd_nuevo_click()
  285.  
  286. RegUltimo = RegUltimo + 1
  287.  
  288.  
  289. 'Limpia los datos de la estructura para poder agregar un nuevo registro
  290. With cliente
  291.     'Variables persona de contacto
  292.        .nombre = ""
  293.         .apellido1 = ""
  294.         .apellido2 = ""
  295.         .telefono = ""
  296.         .movil = ""
  297.         .fax = ""
  298.         .email = ""
  299.         .cargo = ""
  300.  
  301.         'Variables empresa
  302.        .empresa = ""
  303.         .cif = ""
  304.         .direccion = ""
  305.         .NR = ""
  306.         .puerta = ""
  307.         .poligono = ""
  308.         .localidad = ""
  309.         .ciudad = ""
  310.         .codcodpostal = ""
  311.         .pais = ""
  312.         .nrcliente = ""
  313.  
  314. End With
  315.  
  316. ' Graba datos vacios en el nuevo registro hasta que se presione el botón _
  317. Guardar que graba los verdaderos datos
  318. Put #FileFree, RegUltimo, cliente
  319.  
  320. RegActual = RegUltimo
  321.  
  322.  
  323. VisualizarDatos
  324. txt_empresa.SetFocus
  325. End Sub
  326.  
  327. 'Botón para Buscar datos
  328. '##############################################
  329.  
  330. Private Sub cmd_buscar_click()
  331.  
  332. Dim Encontrado As Boolean, PosReg As Long, tmp As D_clientes
  333.  
  334. If txt_buscar = "" Then txt_empresa.SetFocus: Exit Sub
  335.  
  336. Encontrado = False
  337.  
  338. 'Recorremos desde el primer hasta el último en busca del registro a buscar
  339.  
  340. For PosReg = 1 To RegUltimo
  341.  
  342. 'Leemos el registro
  343. Get #FileFree, PosReg, tmp
  344.  
  345. 'Si es el dato es igual salimos del bucle
  346. If UCase(txt_buscar) = UCase(Trim(BuscarPor(tmp))) Then
  347.     Encontrado = True
  348.     Exit For
  349. End If
  350.  
  351. Next
  352.  
  353. If Encontrado Then
  354.    
  355.     RegActual = PosReg
  356.     'Cargamos los datos en los text
  357.    VisualizarDatos
  358.  
  359. Else
  360.     MsgBox "nombre: " & txt_buscar & " No se ha encontrado el registro"
  361. End If
  362. txt_empresa.SetFocus
  363.  
  364. End Sub
  365.  
  366. 'Función que retorna el valor de la búsqueda
  367. '#############################################
  368.  
  369.  
  370. Private Function BuscarPor(t As D_clientes)
  371.  
  372. Select Case cmb_buscar.ListIndex
  373.  
  374. Case 0: BuscarPor = t.empresa
  375. Case 1: BuscarPor = t.cif
  376. Case 2: BuscarPor = t.nrcliente
  377.  
  378. End Select
  379.  
  380. End Function

Última edición por XYON126; 25/03/2010 a las 09:04