Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Error en codigo RANDOM

Estas en el tema de Error en codigo RANDOM en el foro de Visual Basic clásico en Foros del Web. Hola! Estoy peleandome con el RANDOM y bajandome un ejemplo de esta web Código HTML: http://www.recursosvisualbasic.com.ar/htm/utilidades-codigo-fuente/agenda.htm# para comprender su funcionamiento al hacerlo correr me da ...

  #1 (permalink)  
Antiguo 24/03/2010, 09:50
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 18 años
Puntos: 0
Error en codigo RANDOM

Hola!

Estoy peleandome con el RANDOM y bajandome un ejemplo de esta web
Código HTML:
http://www.recursosvisualbasic.com.ar/htm/utilidades-codigo-fuente/agenda.htm#
para comprender su funcionamiento al hacerlo correr me da el error "Procedimiento Sub o Funcion no definido" marcandome en amarillo "Private Sub form_load()" y marcandome en azul "Cargarcaptions" la he cambiado por cargar y aunque corre el programa entonces no guarda.
Por otro lado veo que el programador en el apartado Private Sub GuardarDatos() las variables las renombra con un punto por delante. ¿Podria alguien decirme el porque del error y renombrado de variables con el punto y cuando le he cambiado el cargar no guarda nada en Datos.dat?
Son los manuales mejores sobre RANDOM que he encontrado pero con estos problemillas me pierdo, el codigo sale en la web, es una agenda.

Un saludo

Última edición por XYON126; 24/03/2010 a las 10:06
  #2 (permalink)  
Antiguo 24/03/2010, 14:55
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 8 meses
Puntos: 29
Respuesta: Error en codigo RANDOM

Yo lo he probado y funciona bastante bien.

El error que te muestra debe ser porque no has copiado todo el código y no encuentra la sub cargarcaptions que es la ultima del texto.

Las variables que usa con . delante es porque declara primero con with que se está refiriendo a una variable llamada Datos que tiene esas propiedades.

Todo funciona y los datos se guardan.

Saludos
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!
  #3 (permalink)  
Antiguo 25/03/2010, 03:36
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 18 años
Puntos: 0
Respuesta: Error en codigo RANDOM

Hola pkj!

Si es cierto, no habia cargado la ultima parte porque habia creado las propiedades directamente y la parte del codigo que lo hacia la habia omitido sin darme cuenta de la variable "cargarcaption", referente a esta agenda, si yo elimino un registro de por ejemplo 50, siendo este registro el 20 o 21, supongo que todos los registros precedentes bajarian un nivel, ¿hay alguna manera de que cada registro se quede siempre con el mismo nº de registro o hay que generar un campo aparte y generar un comando que busque solo por este campo?
Referente a esta agenda en el codigo ¿Que diferencia hay entre "nuevo" y "Guardar" no hacen lo mismo?

Un saludo
  #4 (permalink)  
Antiguo 25/03/2010, 07:38
Avatar de 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
  #5 (permalink)  
Antiguo 25/03/2010, 07:54
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 8 meses
Puntos: 29
Respuesta: Error en codigo RANDOM

Te va a dar ese error en todas las líneas donde tengas algo como:

txt_cargo.txt

ya que txt_cargo imagino que es un textbox, y no tiene propiedad .txt, sino .text

Saludos
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!
  #6 (permalink)  
Antiguo 25/03/2010, 07:58
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 18 años
Puntos: 0
Respuesta: Error en codigo RANDOM

Cita:
Iniciado por pkj Ver Mensaje
Te va a dar ese error en todas las líneas donde tengas algo como:

txt_cargo.txt

ya que txt_cargo imagino que es un textbox, y no tiene propiedad .txt, sino .text

Saludos
Hola!

Jo que chorrada voy a cambiarlo ahora mismo, Un textbox con una variable Integer ¿Como debe tener la propiedad .text u otra?

Muchas gracias
  #7 (permalink)  
Antiguo 25/03/2010, 08:02
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 8 meses
Puntos: 29
Respuesta: Error en codigo RANDOM

Un textbox siempre guarda los datos en formato texto. Es al extraerlos cuando puedes convertirlos al formato que necesites:

VariableInt=CInt(Text1.Text)

Que se dé bien.
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!
  #8 (permalink)  
Antiguo 25/03/2010, 08:04
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 18 años
Puntos: 0
Respuesta: Error en codigo RANDOM

Cita:
Iniciado por pkj Ver Mensaje
Un textbox siempre guarda los datos en formato texto. Es al extraerlos cuando puedes convertirlos al formato que necesites:

VariableInt=CInt(Text1.Text)

Que se dé bien.
Hola!

He modificado/cambiado todos los textbox con .txt por .Text y me sigue dando el mismo error ¿Porque?


Un saludo
  #9 (permalink)  
Antiguo 25/03/2010, 08:13
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 8 meses
Puntos: 29
Respuesta: Error en codigo RANDOM

De momento solo veo este fallo:

txt_nrcliente = Trim(.nrcliente)

.nrcliente es un integer y posiblemente no puedes quitarle los espacios con trim

En la línea que dices no veo nada.

Prueba a ver.
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!
  #10 (permalink)  
Antiguo 25/03/2010, 08:21
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 18 años
Puntos: 0
Respuesta: Error en codigo RANDOM

Hola pkj!

He modificado el codigo con esos cambios que comentas (ahora el cod. del post anterior esta corregido) y me sigue dando el mismo error de propiedades, ¿Tienen que tener los TEXTbox alguna propiedad especifica?

Muchas gracias

Un saludo
  #11 (permalink)  
Antiguo 25/03/2010, 08:29
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 8 meses
Puntos: 29
Respuesta: Error en codigo RANDOM

Es que si te da ese error en la linea

txt_empresa = Trim(.empresa)

de la sub visualizardatos, no sabría decirte porque.

Según me parece la variable cliente está creada e imagino que un textbox se llama txt_empresa, de modo que no veo el fallo.

PD: cambia el higlight "html" por higlight "vb" para que salga el código coloreado que es más facil de entender.
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!

Última edición por pkj; 25/03/2010 a las 08:42
  #12 (permalink)  
Antiguo 25/03/2010, 08:48
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 18 años
Puntos: 0
Respuesta: Error en codigo RANDOM

La variable cliente la he declarado al inicio del codigo .:
Código vb:
Ver original
  1. 'Variables para utilizar la estructura anterior
  2.  
  3. Dim cliente As D_clientes
  4. Dim clienteTemp As D_clientes

y si hay un textbox llamado txt_empresa con su label correspondiente lbl_empresa y asi todas las variables creadas, he verificado una por una y si por ejemplo a la linea que me da error la convierto en texto informativo con ' automaticamente el error me lo da en la linea siguiente, lo mas extraño es que como habras visto en el codigo las tengo divididas en dos grupos o bloques el 1º como "persona de contacto" y el segundo como "empresa" y son todas estas lineas las de la "empresa" que me dan error siendo iguales a las anteriores. ¿Tiene alguna limitacion a nivel de bytes el RANDOM o no tiene que ver nada una cosa con la otra?

AH! por cierto, cuando me da error y le doy a la ayuda de VB me remite a las propiedades del GET y PUT y tampoco entiendo porque y el VB es original.

Muchas gracias

Última edición por XYON126; 25/03/2010 a las 09:05
  #13 (permalink)  
Antiguo 25/03/2010, 09:26
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 8 meses
Puntos: 29
Respuesta: Error en codigo RANDOM

Nunca lo he usado, pero no creo que sea tan limitado.

Aqui tienes otro fallo:

.codcodpostal está varias veces y debe ser .codpostal

A mi ya me funciona sin errores.

Posiblemente tu fallo esté en:

txt_codcodpostal = Trim(.codpostal)
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!
  #14 (permalink)  
Antiguo 25/03/2010, 09:33
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 18 años
Puntos: 0
Respuesta: Error en codigo RANDOM

Hola!

¿Como has insertado el codigo? no sea que por ahi valla el fallo. Has creado el codigo asi:

1. apertura nuevo proyecto VB standar
2. Insertar el codigo "texto plano"
3. Insertar los label y txtbox en el Formulario
4. Salvar el proyecto
5. F5 ejecutar

Y te ha funcionado

Si es asi ya no entiendo nada o por aqui me viene el fallo.
  #15 (permalink)  
Antiguo 25/03/2010, 09:44
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 8 meses
Puntos: 29
Respuesta: Error en codigo RANDOM

Ya hice el proyecto de la agenda cuando lo pusiste. Solo he añadido unos textbox y he cambiado los nombres de estos, del label, del combo y de los buttons segun tu lo tienes.

De todas formas solo he creado textbox hasta el cif a ver si fallaban esos 2 ultimos y no fallan.
En los registros guardados sin embargo si he guardado todos los valores para ver si eran demasiados.

PD: Así se ve mucho mejor
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!
  #16 (permalink)  
Antiguo 25/03/2010, 09:52
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 18 años
Puntos: 0
Respuesta: Error en codigo RANDOM

Cita:
Iniciado por pkj Ver Mensaje
Ya hice el proyecto de la agenda cuando lo pusiste. Solo he añadido unos textbox y he cambiado los nombres de estos, del label, del combo y de los buttons segun tu lo tienes.
Hola!

Pero has insertado el codigo del post(no el de la agenda el mio) o has añadido lineas a manini pues a mi siempre me sale ese dichoso error y me tiene amargado.

Un saludo
  #17 (permalink)  
Antiguo 25/03/2010, 09:57
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 8 meses
Puntos: 29
Respuesta: Error en codigo RANDOM

He pegado tu código. Solo he anulado lo que trabajaba con los textbox que no he creado.
Te lo pongo:

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

PD: Bueno... también he añadido siguiente y anterior para poder hacer pruebas...
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!
  #18 (permalink)  
Antiguo 25/03/2010, 10:20
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 18 años
Puntos: 0
Respuesta: Error en codigo RANDOM

Hola Pkj!

He cogido la carpeta del proyecto, la he duplicado, he abierto el codigo, he sustituido el viejo por el tuyo sin eliminar textbox ni combobox para probar y me ha vuelto ha dar el mismo error, en la misma linea y la misma sentencia.
¿Tu has probado mi codigo?


Un saludo
  #19 (permalink)  
Antiguo 25/03/2010, 10:38
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 8 meses
Puntos: 29
Respuesta: Error en codigo RANDOM

Yo he probado el cófigo que te he puesto y no me da ningún tipo de error.

Revisa los nombres de los textbox porque debes tenerlos mal.

Suerte
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!
  #20 (permalink)  
Antiguo 26/03/2010, 02:09
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 18 años
Puntos: 0
Respuesta: Error en codigo RANDOM

Buenos dias pkj!

He revisado los nombres como comentas y a menos que ya este saturado y vea menos que PEPELECHES, no he encontrado error alguno en ellos. Si quieres te envio por privado el proyecto por email y te lo revisas me harias un gran favor.


Un saludo
  #21 (permalink)  
Antiguo 26/03/2010, 02:29
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 8 meses
Puntos: 29
Respuesta: Error en codigo RANDOM

Este es el experimento que hice yo. Echale un vistazo (está todo amontonado y tal pero bueno) a ver si encuentras la diferencia. Solo he arreglado otra línea en "nuevo" donde se intentaba cargar nrcliente con "" cuando tenía que ser un número. Lo demás creo que está bien. Quizá otra línea que tengo anulada se debiera retocar:
'.nrcliente = txt_nrcliente.Text
cambiar por
.nrcliente = val(txt_nrcliente.Text)
que no he cambiado porque ya he subido el proyecto a megaupload.
Tambien tengo anulada la linea:
'Case 2: BuscarPor = t.nrcliente
Lo digo por si te quedas con mi proyecto que recuerdes des-anularla.

Lo demás no parece tener fallos.

http://www.megaupload.com/?d=3I8B0F9J

Si sigues sin encontrar el fallo sube el proyecto a megaupload y le echo un vistazo.

Saludos
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!
  #22 (permalink)  
Antiguo 26/03/2010, 02:37
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 18 años
Puntos: 0
Respuesta: Error en codigo RANDOM

Hola!

Voy a probarlo, ¿Como se sube a megaupload un archivo?

Un saldo
  #23 (permalink)  
Antiguo 26/03/2010, 02:45
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 8 meses
Puntos: 29
Respuesta: Error en codigo RANDOM

Solo entra en www.megaupload.com y lo tienes bien fácil.

Que se dé bien.
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!
  #24 (permalink)  
Antiguo 26/03/2010, 02:53
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 18 años
Puntos: 0
Respuesta: Error en codigo RANDOM

Ya me he dado de alta pero no veo la manera, me habla de muchos descargadoresincluso en el FAQ no hay apartado alguno de como cargar un archivo desde el PC (No tengo cuenta web alguna).

Un saludo
  #25 (permalink)  
Antiguo 26/03/2010, 02:59
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 8 meses
Puntos: 29
Respuesta: Error en codigo RANDOM

De alta?
Solo pinchas en explorar, seleccionas un fichero, le pones una descripción y "enviar". No necesitas darte de alta.
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!
  #26 (permalink)  
Antiguo 26/03/2010, 03:00
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 18 años
Puntos: 0
Respuesta: Error en codigo RANDOM

Bueno!

Ya lo he conseguido, el link es este .: http://www.megaupload.com/?d=ER2PXQRJ por cierto tu programa si se ha abierto, no lo he probado a fondo aún. Prueba el mio porfa y dime algo.

Un saludote
  #27 (permalink)  
Antiguo 26/03/2010, 03:06
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 8 meses
Puntos: 29
Respuesta: Error en codigo RANDOM

Ya he encontrado tu fallo.

Borra el valor de la propiedad index de los textbox empresa y cif. tambien te sobra un End Sub al final del todo.
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!
  #28 (permalink)  
Antiguo 26/03/2010, 03:15
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 18 años
Puntos: 0
Respuesta: Error en codigo RANDOM

Hola pkj!

Muchas gracias eres el mejor, una pregunta ¿Para que c.....ñ sirve o hace ese index que tanto me ha puteado?

Un saludo
  #29 (permalink)  
Antiguo 26/03/2010, 03:29
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 8 meses
Puntos: 29
Respuesta: Error en codigo RANDOM

Es para crear matrices de controles.
Igual que una matriz de strings se usaría así:
Variable(0)="cadena de texto"
Variable(1)="cadena de texto"
Con textbox sería:
Text1(0).Text="cadena de texto"
Text1(1).Text="cadena de texto"

La ventaja de usar matrices es que solo insertando un textbox con index=0 en el form, puedes crear y eliminar tantos textbox como quieras:
Load Text1(1)
Text1(1).Visible=True
Text1(1).Top=150
Text1(1).Left=250
Y cuando te canses de el:
Unload Text1(1)
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!
  #30 (permalink)  
Antiguo 26/03/2010, 03:42
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 18 años
Puntos: 0
Respuesta: Error en codigo RANDOM

Perdona pero no lo comprendo o entiendo el concepto del uso o funcion de matrices, Quieres decir que un mismo textbox generado como matriz por ejemplo .: una matriz de 1x3 con lo que tres textbox llamados txtbox(0), (1) y (2) los tendria en una columna ¿Para que me pueden servir si los tres me darian los mismos datos al mismo tiempo o entraria los datos en uno y se repetirian en los otros dos al instante o estoy equivocado?.

Un saludo

Etiquetas: random
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:00.