• Viernes 8 de Noviembre de 2024, 14:47

Autor Tema:  Busqueda en otro Formulario  (Leído 3871 veces)

Dragos

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Busqueda en otro Formulario
« en: Martes 6 de Octubre de 2009, 22:16 »
0
Hola, saludos a todos...mi problema es el siguiente, estoy realizando un programa con base de datos access, y utilizo el control DATA para la conexion con la base de datos, lo que quiero hacer es lo siguiente, tengo un formulario en donde voy a registrar a los clientes, en dicho formulario tengo un boton BUSCAR que me lleva a otro pequeño formulario (B) en donde solicito el numero de cedula para buscar a "X" cliente, lo que quiero es que al ingresar la Cedula de identidad y presionar el boton BUSCAR (en el formulario B ) el resultado me lo arroje en otro formulario...

He intentado algo pero no me ha salido nada aun, si pueden ayudarme por favor lo agradeceria!

GRACIAS :hola:

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: Busqueda en otro Formulario
« Respuesta #1 en: Jueves 8 de Octubre de 2009, 07:18 »
0
Es relativamente fácil.
Primero intentaré explicártelo a las claras y luego pasamos a código.

imagina que vas a la tienda de un artesano, quieres una estatua, para colocarla en tu casa, el artesano tiene varios modelos de estatuas, las hay grandes y pequeñas las hay apoyadas sobreel suelo, colgadas de la pared y colgadas del techo...

Entonces a la hora de elegir que estatua te vas a llevar es obvio que en tu casa deberás disponer de un alojamiento para ella, tal alojamiento debe ser exactamente del tipo que la estatua que elijas. supongamos que eliges una estatua que cuelga del techo, pongamos que estas estatuas miden 4 metros y por debajo de ellas hay un espacio libre de 3 metros, es decir necesita 7 metros de altura aproximadamente si tu casa no tiene esa altura hay que descartar esa estatua yelegir otra, no obstante este caso se sale del propósito del ejemplo, mejor diremos que si tu casa no cumple la altura, el garaje (separado de la casa) lo acondicionarás para que pueda cumplir dicho propósito. Supongamos ahora que eliges la estatua de suelo, esta estatua tiene laparticularidad de que ocupa un espacio de 4x4 metros, lo que quiere decir que la estancia debe disponer de esas medidas y una cantidad adicional para poder rodearla, no hay problema, podemos ensanchar nuestro garaje como prefiramos...

Bien, esto mismo es lo que se debe hacer en programación. La tienda de estatuas es en tu caso la base de datos, y el formulario donde quieres mostrarlo hace las veces del garage. Los datos que tomas de la base de datos tienen unas especificaciones, esas mismas especificaciones tiene que tenerlas el formulario que lo va a recibir...

En el formulario que busca:

Recibir el nº de cédula a buscar
buscar en la BD el elemento deseado y recibir los datos asociados
Si no se encuentra nada mostrar mensaje no hay coincidencias
Si se encuentra, enviar resultado al formulario de exhibiiiiición de resultados
En la práctica esos 2 condicionales pueden ser una misma línea de código.

En un módulo:
Código: Visual Basic
  1.  
  2. ' declaramos las especificaciones del tipo de datos que vamos a usar en diferentes lugares
  3.  
  4. 'para el caso se ha supuesto una estructura de tipo persona
  5. public type Personas
  6.     Nombre as string
  7.     Apellido1 as string
  8.    Apellido2 as string
  9.    NumeroCedula as string
  10. end type
  11. ' variable de compartición dentro del proyecto
  12. public Persona as Personas
  13.  
  14.  

Cuando busquemos en la base de datos, el resultado lo pasamos a Persona, acto seguido llamamos al formulario de exhibición
Código: Visual Basic
  1.  
  2.  
  3. Persona=....
  4. call formExibirResultados.show(1)  ' lo llamamos como modal...
  5.  
  6. ' En el formulario de exhibición:
  7.  
  8. ' Si no quieres mantener una variable compartida entre proyectos, entonces debes tener una variable pública en este formulario
  9. Public per as personas
  10.  
  11. private sub Form_Load
  12.      Me.Show
  13.      
  14.      Text1.text=  persona.Nombre
  15.      Text2.text= persona.Apellido1
  16.      Text3.Text= persona.apellido2
  17.      Text4.text= Persona.NumerCedula
  18. end sub
  19. ' este formulario tendría un botón de aceptar que al pulsarlo cierra el formulario
  20.  
  21.  

Como puedes ver nuestro formulario de exiihibición, está 'acondicionado', como haríamos con el garaje, para recibir el tipo de datos que va a utilizar, puesto que nuestra 'estatua' es un tipo personas, nuestro garaje debe estar capacitado para las especificaciones de loque va a alojar. Nada impide que el formulario acoja varios y diferentes tipos del mismo modo que nada impide que en el garaje pongas más de 1 estatua. en este caso cuando se abra la puerta del garaje, quizás lo que queramos es mostrar exactamente una estatua y no otra, en concreto, end dicho caso debemos proveer otra variable que especifique que estatua queremos mostrar (las demás quedarían oculatas, sin usar)

En el código esto implica añadir una variable en el módulo (o en el formulario de exhibición)...
Código: Visual Basic
  1.  
  2. public enum TiposdeDatos
  3.      TIPO_PERSONAS=0
  4.      TIPO_DIRECCIONES=1
  5.      TIPO_DATOS_EMPRESA=2
  6. end enum
  7.  
  8. public Tipo as TiposDeDatos
  9.  
  10.  
Ahora entonces cuando vaya a leer un dato sobre personas pondré en el formulario que hace la búsqueda

Código: Visual Basic
  1.  
  2. ' ...
  3. Persona= buscar....
  4. Tipo= TIPO_PERSONAS
  5. call FormExibirResultados.show(1)
  6. ' ...
  7.  
  8.  
Y en el formulario de exhibición habrá que distinguir que 'estatua' recibimos...
Código: Visual Basic
  1.  
  2. private sub Form_Load
  3.      Me.Show
  4.      select case Tipo
  5.           case 0  ' personas
  6.               Text1.text=  persona.Nombre
  7.               Text2.text= persona.Apellido1
  8.               Text3.Text= persona.apellido2
  9.              Text4.text= Persona.NumerCedula
  10.          case 1 ' direcciones
  11.               Text1.text=  Direccion.Ciudad
  12.               Text2.text= Direccion.Poblacion
  13.               Text3.Text= Direccion.Calle
  14.              Text4.text= Direccion.Numero
  15.          case 2
  16.            '................ otros casos
  17.      end select
  18. end sub
  19.  
  20.  

Para terminar también te indico que si tienes que hacer bastante trabajo al respecto sería mejor que crearas unas clases, con los tipos de datos y que en ella incluyeras los métodos que fueras a necesitar, incluso si los tipos de datos fueran comunes entre ellos utilizar una interfaz que implemente cada clase.

En fin como puedes ver, no puedes presentarte en casa con una estatua de 7 metros. Primero tienes que tener acondicionado el garaje para acoger lo que vas a colocar allí, en el presente caso son unos textbox, y el código para operar sobre ellos... los textbox reciben la 'estatua' (tipo de datos persona) que ya sabe como encajarla en el garaje.

p.d.: queda claro que si los textbox están vacíos es porque no ha encontrado nada relevante al número de cédula, queda a tu elección en dicho caso si mostrar el formulario o enviar un msgbox al caso. También podrías modificar el caption del formulario, para que indicara un texto parecido a : " Resultados para la búsqueda: 'número de cédula' (si los textos están vacíos no se encontraron coincidencias)".
«Ma non troppo»
----> ModoVacaciones = False<----

Dragos

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: Busqueda en otro Formulario
« Respuesta #2 en: Jueves 8 de Octubre de 2009, 21:50 »
0
Ok para esta parte del codigo, yo tengo varios campos en la base de datos, este es el codigo modificado a mi preferencia:

Código: Visual Basic
  1. ' declaramos las especificaciones del tipo de datos que vamos a usar en diferentes lugares
  2.  
  3. 'para el caso se ha supuesto una estructura de tipo persona
  4. public type Personas
  5.     Cedula as string
  6.     Nombres as string
  7.     Apellidos as string
  8.     Direccion as string
  9.     Edad as string
  10.     Fecha de Nacimiento as string
  11.     Sexo as string
  12. end type
  13. ' variable de compartición dentro del proyecto
  14. public Persona as Personas
  15.  
  16.  

Dragos

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: Busqueda en otro Formulario
« Respuesta #3 en: Jueves 8 de Octubre de 2009, 21:59 »
0
Código: Visual Basic
  1. Persona=....
  2. call formExibirResultados.show(1)  ' lo llamamos como modal...
  3.  
  4. ' En el formulario de exhibición:
  5.  
  6. ' Si no quieres mantener una variable compartida entre proyectos, entonces debes tener una variable pública en este formulario
  7. Public per as personas
  8.  
  9. private sub Form_Load
  10.      Me.Show
  11.      
  12.      Text1.text=  persona.Nombre
  13.      Text2.text= persona.Apellido1
  14.      Text3.Text= persona.apellido2
  15.      Text4.text= Persona.NumerCedula
  16. end sub
  17. ' este formulario tendría un botón de aceptar que al pulsarlo cierra el formulario
  18.  
  19.  

y en esta parte lo mismo dependiendo de la cantidad de textbox que tenga, muchisimas gracias por tu ayuda aun me quedan unas pequeñas dudas...

* Te dije que en un formulario tengo un boton BUSCAR ese boton me lleva a otro pequeño formulario ( B ) que he diseñado tipo INPUTBOX, donde tambien tengo un boton BUSCAR, dicha busqueda es por el numero de cedula de identidad...que parte del codigo coloco en el boton BUSCAR del formulario ( B )

* Como inserto un modulo (puede parecer tonta la pregunta, pero estamos para  aprender)

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: Busqueda en otro Formulario
« Respuesta #4 en: Viernes 9 de Octubre de 2009, 00:40 »
0
Si no he entendido mal...

En un formulario tienes un botón que invoca a un 2º formulario (pongamos que se llama formBusqueda). Y es desde este desde elcual realizas la búsqueda...

Si esto es correcto, en este formulario va el código que ya te he indicado...

realizas la query, el resultado lo transformas a la estructura persona, y acto seguido invocamos el formulario de exhibición se forma síncrona.
Código: Visual Basic
  1.  
  2. ' ...
  3. Persona= buscar.... ' el resultado de la query la volcamos en esta estructura, habrá que hacerlo elemento a elemento.
  4. Tipo= TIPO_PERSONAS
  5. call FormExibirResultados.show(1)
  6. ' ...
  7.  
  8.  
Nota que volcar la devolución de la base de datos a una estructura, no es estrictamente necesario, es el modo que yo he elegido para mostrarte la EVOLUCIÓN del código (básicamente por que es más sencillo de entender y de escribir y porque no necesito entrar en el entresijo de detalles de tu programa, si ya tienes definida una estructura de datos y es accesible  desde el formulario de exhibición podría ser suficiente pasar por ejemplo el índice de un recordset. De todos modos no sale caro volcar el resultado devuelto a una estructura.

La última cuestión, no estoy seguro de haberte entendido ... me preguntas como insertas un módulo en el proyecto ???, de giaul modo que un formulario, una clase, una página de propiedades,etc... .... desde el menú proyecto 'Agregar módulo'. Si no te he entendido acláramelo...
«Ma non troppo»
----> ModoVacaciones = False<----

Dragos

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: Busqueda en otro Formulario
« Respuesta #5 en: Viernes 9 de Octubre de 2009, 02:15 »
0
Ok, realice unas capturas de pantallas para que nos entendamos mejor pero la web no me permite colocar enlaces =S , disculpa si molesto mucho pero de verdad me interesa aprender MUCHO! cada detalle... =)

Tengo el Formulario Principal, llamemoslo FORMPRINCIPAL, este formulario sirve para agregar registros de personas, con sus datos...en este formulario tenemos en boton BUSCAR

ese boton BUSCAR lleva a otro pequeño formulario desde donde realizaremos la busqueda por el NUMERO DE CEDULA, este formulario posee tambien un boton BUSCAR


al presionar el boton BUSCAR de este formulario me va a llevar a otro formulario en donde me mostrara la ficha completa de la persona, nombre, apellido, cedula...los codigos que me das en donde los tendria que colocar?! el que va en el MODULO que es el primer codigo que me colocas ya lo coloque, agradezco tu paciencia amigo, es muy valioso para mi !

Saludos y Gracias!

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: Busqueda en otro Formulario
« Respuesta #6 en: Viernes 9 de Octubre de 2009, 10:51 »
0
Es irrelevante cuantos formularios tengas... y cuantos botones buscar tengas.
En todo momento nos estamos refiriendo sólo a 2 formularios, el que llama y al que quieres llamar y sólo nos importa un botón buscar, auqél que localiza en la tabla correspondiente los datos de persona.

Al pulsar ese botón tu realizas una consulta a la BD ( con la cédula como criterio de búsqueda). Por tanto es este mismo procedmineto donde debes hacer la asignación de los datos recibidos a la estructura persona, (o llamar al procedimiento que lo haga).

El asunto ya te lo he aclarado, creo yo, que lo suficiente, si le das muchas vueltas es posible que te acabes liando, como el gato que juega con el ovillo de lana. Así te lo resumo para que no veas cosas raras

Solo hay 3 pasos:
1 Un procedimiento llama a la base de datos y obtiene unos datos
2 Ese mismo u otro procedmiento coloca los datos obtenidos en una variable que es accesible como mínimo desde este formulario y desde el formulario que mostrará el resultado. Esto signiiifica que pueden ser 3 ubicaciones (lógicas), una variable pública de tipo persona que esté o en  uno de los 2 formularios o en un móodulo.
3 El formulario que lo va a mostrar toma la estructura persona y la vuelca en unos textbox, labels, msgbox, dictado por voz, o lo que quieras.

Ya está, no hay nada más. No le añadas complicaciones, es así de sencillo.
Después, sólo he indicado, que mis explicaciones son simplemente una guía que tu debes adaptar a la situación específica de tu proyecto hay diferentes formas de manejar datos, en explicaciones es más sencillo indicar estructuras, luego uno quizás use un objeto TableDef o cualquier otro tipo de objeto. Tú tienes que tomar la idea, no necesariamente tomarlo al pie de la letra.

Dos objetos sólo pueden comunicarse entre sí, si ambos conocen ó reconocen un objeto (o ruta de objetos) accesible por ambos. Hoomer Simpson sólo podrá enviar una carta a King-Kong, si conoce el domicilio de King-Kong o si conoce a alguien que conoce el domicilio de King-Kong y actúa de intermediario. La variable Persona en el módulo es ese intermediario, FormConsulta tiene acceso al módulo (que actúa como una oficina postal, almacena el paquete en la caja adecuada a su contenido) y mete los datos en un el paquete adaptado a 'Persona', luego le manda un mensaje a formExhibir y le dice, oye te he mandado un paquete lo tienes donde hemos acordado (la oficina postal x)... y formExhibir va a la oficina postal y recoge el paquete 'Persona' abre el contenido y hace con ello lo que quiera hacer... incluso podría modificarlo y enviarlo de vuelta...

Más no te puedo decir, es cuestión tuya que lo entiendas o no. Yo espero haberme expresado con la suficiente claridad, para que sea que si, que lo has entendido.

p.d.: colocar enlaces es un derecho reservado a los usuarios cuando tienen un mínimo de mensajes publicados... no recuerdo el nº,  es una pequeña medida para evitar spam... No obstante no es necesario que envíes imágenes, en mi anterior mensaje mis dudas eran porque me parecía extraño que no sepas añadir un módulo de código al proyecto. Un principnate lo primero que debería de hacer con el entorno de vb es familiarizarse con el menú del programa...

Saludos.
«Ma non troppo»
----> ModoVacaciones = False<----

Dragos

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: Busqueda en otro Formulario
« Respuesta #7 en: Miércoles 14 de Octubre de 2009, 02:49 »
0
Gracias por responder a mis dudas, amigo, he intentado andar con el codigo que me has dado, adaptandolo a mi situacion...

me produce un bloqueo en esta linea

Código: Visual Basic
  1. Persona=....
  2. call formExibirResultados.show(1)
  3.  

Código: Visual Basic
  1. ' ...
  2. Persona= buscar.... ' el resultado de la query la volcamos en esta estructura, habrá que hacerlo elemento a elemento.
  3. Tipo= TIPO_PERSONAS
  4. call FormExibirResultados.show(1)
  5. ' ...
  6.  

Igual en este, la linea PERSONA me la coloca en rojo como un "error de compilacion, se esperaba identificador o expresion entre parentesis"

Gracias de ante mano!

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: Busqueda en otro Formulario
« Respuesta #8 en: Miércoles 14 de Octubre de 2009, 10:52 »
0
Guau... así andamos ????

Esa línea no es textual. Conoces alguna instrucción parecida a eso? :  Persona=....
Ahí lo que te indico es que debes asignar a la estructura Persona los datos que has obtenido de la BD después de realizar la query.

Esto puede ser una asignación manual o una función, eso ya  a tu gusto.. Pero eres tú quien debe rellenar ese código, porque eres tú quien sabe que datos manejas y cómo los manejas, yo no tengo detalles ni de tu base de datos ni de la llamada a la base de datos (ni tampoco los necesito, para explicarte tus dudas).

Yo no puedo saber si Persona.Edad (por poner un caso) lo tienes declarado como byte, como integer o como string, para darte explicaciones no importa, yo puedo ponerlo como byte, como integer o como string, que más dá... tu tienes que adaptar mis explicaciones y el código a tus necesidades, no copiar y pegar. Para adaptarlo correctamente es necesario que entiendas como funciona. Hay veces que para adaptarlas basta con copiar y pegar, y hay veces que  adaptar implica modificar todo o parte... esa línea tienes que adaptarla según tengas implementado la bd con los objetos que uses para manejarla.

Por ejemplo si trabajaras la bd desde un datagrid, bastaría asignar a la estructura los campos (columnas) que tiene la estructura en común con la tabla, tomando para ello la fila deseada. ..... por eso, esto depende de cómo tengas implementado tú  el trabajo con los datos.

Si andas realmente perdido, expón el código de llamada a la DB y en qué tipo de objeto vas a recibir/almacenar el resultado y entonces,  podría, ayudarte a completar esa línea de código. Aunque son detalles, que en principio no son el problema planteado en el hilo.

Tema aparte, si me das algunos detalles de qué objetos estás usando, tal vez pueda sugerirte alguna opción más asequible...
«Ma non troppo»
----> ModoVacaciones = False<----

Dragos

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: Busqueda en otro Formulario
« Respuesta #9 en: Domingo 18 de Octubre de 2009, 04:21 »
0
Aqui el codigo del Formulario donde almaceno la informacion de la persona que voy a agregar:

Código: Visual Basic
  1.  
  2.  
  3. Private Sub cmdbuscar_Click()
  4. formbusqueda.Show
  5. End Sub
  6.  
  7. Private Sub cmdexaminar_Click()
  8. With CommonDialog1
  9.         .DialogTitle = "Seleccionar imagen "
  10.         .Filter = "JPG|*.JPG|BMP|*.bmp|GIF|*.GIF|Todos los archivos|*.*"
  11.         .ShowOpen
  12.         If .FileName = "" Then
  13.             Exit Sub
  14.         Else
  15.             Picture1 = LoadPicture(.FileName)
  16.         End If
  17.     End With
  18. End Sub
  19.  
  20. Private Sub cmdguardar_Click()
  21. Formregistros.lblfecha = Format(Date, "dd/mm/yyyy")
  22. Formregistros.lblid = Format(" & IdRegistro & ")
  23.     If txtcedula.Text = "" Then
  24.         MsgBox ("No Se puede Guardar la informacion porque las casillas estan Vacias, por Favor introduzca la Informacion")
  25.     Else
  26.         Data1.UpdateRecord
  27.         Data1.Refresh
  28.     MsgBox "El Cliente ha sido Guardado en la Base de Datos", vbExclamation, "Aviso Importante"
  29.     End If
  30.         cmdguardar.Enabled = False
  31.     End Sub
  32.  
  33. Private Sub cmdnuevo_Click()
  34.         txtcedula.SetFocus
  35.         cmdguardar.Enabled = True
  36.         cmdborrar.Enabled = True
  37.         cmdexaminar.Enabled = True
  38.         cmdlimpiar.Enabled = True
  39.         Data1.Recordset.AddNew
  40. End Sub
  41.  
  42. Private Sub cmdeditar_Click()
  43. If (Data1.Recordset.EOF Or Data1.Recordset.BOF) Then
  44. Dim r
  45. r = MsgBox("No hay Clientes Registrados que Editar", vbInformation, "Editar Clientes")
  46. Else
  47. Dim m As Long
  48. m = Val(InputBox("Introduce la cedula de la persona que deseas Editar"))
  49. Data1.Recordset.FindFirst "Cedula=" & m
  50. If Data1.Recordset.NoMatch Then
  51. MsgBox "La Cedula de Identidad: " & m & " No está en la Base de Datos", vbExclamation, "Búsqueda de Personas..."
  52. End If
  53. End If
  54. cmdguardar.Enabled = True
  55. End Sub
  56.  
  57. Private Sub Text1_GotFocus()
  58. Text1.Text = ""
  59. End Sub
  60.  
  61.  

Ese es el codigo, EDITAR a su vez cumple tambien en este caso la funcion de BUSCAR, ya que muestra los resultado buscados en la base de datos a traves de la CEDULA DE IDENTIDAD...

Es por eso que necesito que la informacion cuando BUSQUE me la muestre en otro formulario, como una "Ficha" por llamarlo de algun modo, con toda la informacion de la persona!

F_Tanori

  • Moderador
  • ******
  • Mensajes: 1919
  • Nacionalidad: mx
    • Ver Perfil
Re: Busqueda en otro Formulario
« Respuesta #10 en: Lunes 19 de Octubre de 2009, 12:33 »
0
Parece que los problemas no son solo con los formularios, sino de programacion, de conocimiento del entorno, conocimiento del lenguaje, y de saber resolver el problema, ademas de saber comprender explicaciones (logico si no se conoce ni el IDE)

---
El metodo DAO es un metodo obsoleto... (pero en fin espero investiges)
---

Lo que necesitas, si ya sabes hacer una busqueda y obtener los resultados puedes hacer lo siguente

Código: Text
  1.  
  2. FrmPrincipal
  3.     Boton Buscar
  4.             Manda Llamar el de Frmbuscar
  5.                         Se escribe el numero de Cedula en el espacio solicitado (Textbox en FrmBuscar)
  6.                         Se presiona Buscar (Boton Buscar FrmBuscar)
  7.                         Se abre el formulario FrmFicha
  8.                         Se lee del frmBuscar el numero de Cedula
  9.                         Se hace la busqueda        
  10.  
  11.  

Ejemplo (FrmFicha):

Código: Visual Basic
  1.  
  2. Private Sub Form_load()
  3.      Data1.Recordset.FindFirst "Cedula=" & FrmBusqueda.TxtCedula
  4.       If Data1.Recordset.NoMatch Then
  5.              MsgBox "La Cedula de Identidad: " & FrmBusqueda.TxtCedula & " No está en la Base de Datos", vbExclamation, "Búsqueda de Personas..."
  6.              Unload me  
  7.       Else
  8.              Unload FrmBusqueda    
  9.       End If
  10.      
  11. End Sub
  12.  
  13.  

Se te ha explicado con mucho detalle pero parece que te hace falta leer mas sobre el IDE y el lenguaje


Suerte
Saludos
" ExIsTo y A vEcEs PiEnSo "

NOTA:
===========================================================================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
===========================================================================================================================