Lunes 23 de Diciembre de 2024, 07:19
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
Visual Basic 6.0 e inferiores
(Moderador:
F_Tanori
) »
Busqueda en otro Formulario
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Busqueda en otro Formulario (Leído 3928 veces)
Dragos
Nuevo Miembro
Mensajes: 11
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 (
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
Tweet
Nebire
Miembro HIPER activo
Mensajes: 670
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
' declaramos las especificaciones del tipo de datos que vamos a usar en diferentes lugares
'para el caso se ha supuesto una estructura de tipo persona
public
type
Personas
Nombre
as
string
Apellido1
as
string
Apellido2
as
string
NumeroCedula
as
string
end
type
' variable de compartición dentro del proyecto
public
Persona
as
Personas
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
Persona=....
call
formExibirResultados.show(1)
' lo llamamos como modal...
' En el formulario de exhibición:
' Si no quieres mantener una variable compartida entre proyectos, entonces debes tener una variable pública en este formulario
Public
per
as
personas
private
sub
Form_Load
Me.Show
Text1.text= persona.Nombre
Text2.text= persona.Apellido1
Text3.Text= persona.apellido2
Text4.text= Persona.NumerCedula
end
sub
' este formulario tendría un botón de aceptar que al pulsarlo cierra el formulario
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
public
enum
TiposdeDatos
TIPO_PERSONAS=0
TIPO_DIRECCIONES=1
TIPO_DATOS_EMPRESA=2
end
enum
public
Tipo
as
TiposDeDatos
Ahora entonces cuando vaya a leer un dato sobre personas pondré en el formulario que hace la búsqueda
Código: Visual Basic
' ...
Persona= buscar....
Tipo= TIPO_PERSONAS
call
FormExibirResultados.show(1)
' ...
Y en el formulario de exhibición habrá que distinguir que 'estatua' recibimos...
Código: Visual Basic
private
sub
Form_Load
Me.Show
select
case
Tipo
case
0
' personas
Text1.text= persona.Nombre
Text2.text= persona.Apellido1
Text3.Text= persona.apellido2
Text4.text= Persona.NumerCedula
case
1
' direcciones
Text1.text= Direccion.Ciudad
Text2.text= Direccion.Poblacion
Text3.Text= Direccion.Calle
Text4.text= Direccion.Numero
case
2
'................ otros casos
end
select
end
sub
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
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
' declaramos las especificaciones del tipo de datos que vamos a usar en diferentes lugares
'para el caso se ha supuesto una estructura de tipo persona
public
type
Personas
Cedula
as
string
Nombres
as
string
Apellidos
as
string
Direccion
as
string
Edad
as
string
Fecha de Nacimiento
as
string
Sexo
as
string
end
type
' variable de compartición dentro del proyecto
public
Persona
as
Personas
Dragos
Nuevo Miembro
Mensajes: 11
Re: Busqueda en otro Formulario
«
Respuesta #3 en:
Jueves 8 de Octubre de 2009, 21:59 »
0
Código: Visual Basic
Persona=....
call
formExibirResultados.show(1)
' lo llamamos como modal...
' En el formulario de exhibición:
' Si no quieres mantener una variable compartida entre proyectos, entonces debes tener una variable pública en este formulario
Public
per
as
personas
private
sub
Form_Load
Me.Show
Text1.text= persona.Nombre
Text2.text= persona.Apellido1
Text3.Text= persona.apellido2
Text4.text= Persona.NumerCedula
end
sub
' este formulario tendría un botón de aceptar que al pulsarlo cierra el formulario
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
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
' ...
Persona= buscar....
' el resultado de la query la volcamos en esta estructura, habrá que hacerlo elemento a elemento.
Tipo= TIPO_PERSONAS
call
FormExibirResultados.show(1)
' ...
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
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
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
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
Persona=....
call
formExibirResultados.show(1)
Código: Visual Basic
' ...
Persona= buscar....
' el resultado de la query la volcamos en esta estructura, habrá que hacerlo elemento a elemento.
Tipo= TIPO_PERSONAS
call
FormExibirResultados.show(1)
' ...
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
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
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
Private
Sub
cmdbuscar_Click()
formbusqueda.Show
End
Sub
Private
Sub
cmdexaminar_Click()
With
CommonDialog1
.DialogTitle =
"Seleccionar imagen "
.Filter =
"JPG|*.JPG|BMP|*.bmp|GIF|*.GIF|Todos los archivos|*.*"
.ShowOpen
If
.FileName =
""
Then
Exit
Sub
Else
Picture1 = LoadPicture(.FileName)
End
If
End
With
End
Sub
Private
Sub
cmdguardar_Click()
Formregistros.lblfecha = Format(
Date
,
"dd/mm/yyyy"
)
Formregistros.lblid = Format(
" & IdRegistro & "
)
If
txtcedula.Text =
""
Then
MsgBox (
"No Se puede Guardar la informacion porque las casillas estan Vacias, por Favor introduzca la Informacion"
)
Else
Data1.UpdateRecord
Data1.Refresh
MsgBox
"El Cliente ha sido Guardado en la Base de Datos"
, vbExclamation,
"Aviso Importante"
End
If
cmdguardar.Enabled =
False
End
Sub
Private
Sub
cmdnuevo_Click()
txtcedula.SetFocus
cmdguardar.Enabled =
True
cmdborrar.Enabled =
True
cmdexaminar.Enabled =
True
cmdlimpiar.Enabled =
True
Data1.Recordset.AddNew
End
Sub
Private
Sub
cmdeditar_Click()
If
(Data1.Recordset.EOF
Or
Data1.Recordset.BOF)
Then
Dim
r
r = MsgBox(
"No hay Clientes Registrados que Editar"
, vbInformation,
"Editar Clientes"
)
Else
Dim
m
As
Long
m = Val(InputBox(
"Introduce la cedula de la persona que deseas Editar"
))
Data1.Recordset.FindFirst
"Cedula="
& m
If
Data1.Recordset.NoMatch
Then
MsgBox
"La Cedula de Identidad: "
& m &
" No está en la Base de Datos"
, vbExclamation,
"Búsqueda de Personas..."
End
If
End
If
cmdguardar.Enabled =
True
End
Sub
Private
Sub
Text1_GotFocus()
Text1.Text =
""
End
Sub
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:
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
FrmPrincipal
Boton Buscar
Manda Llamar el de Frmbuscar
Se escribe el numero de Cedula en el espacio solicitado (Textbox en FrmBuscar)
Se presiona Buscar (Boton Buscar FrmBuscar)
Se abre el formulario FrmFicha
Se lee del frmBuscar el numero de Cedula
Se hace la busqueda
Ejemplo (FrmFicha):
Código: Visual Basic
Private
Sub
Form_load()
Data1.Recordset.FindFirst
"Cedula="
& FrmBusqueda.TxtCedula
If
Data1.Recordset.NoMatch
Then
MsgBox
"La Cedula de Identidad: "
& FrmBusqueda.TxtCedula &
" No está en la Base de Datos"
, vbExclamation,
"Búsqueda de Personas..."
Unload me
Else
Unload FrmBusqueda
End
If
End
Sub
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
===========================================================================================================================
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
Visual Basic 6.0 e inferiores
(Moderador:
F_Tanori
) »
Busqueda en otro Formulario