|
Página 1 de 1
|
Buscar En Una Base De Datos
Autor |
Mensaje |
techm3
Programador
Registrado: Febrero 2010
Mensajes: 130
Edad: 32 Ubicación:
|
Buscar En Una Base De Datos
Buenas, he creado un formulario en donde un ColumnView muestra el contenido de la base de datos (siguiendo el manual) que a la vez se puede modificar. Lo que deseo hacer es poner un TextBox para hacer una búsqueda en la base de datos, en este foro encontré algo muy parecido a lo que quiero ( http://foro.gambas-es.org/viewtopic...car++base+datos) pero deseo utilizar el mismo ColumnView que tengo en el formulario principal para mostrar los resultados y que se muestren todos los datos.
Tipo: MySQL
Nombre Base de Datos: amp
Tabla: movinfo
Hay alguna manera de hacerlo?
última edición por techm3 el Martes, 20 Julio 2010, 03:07; editado 1 vez
|
#1 Martes, 20 Julio 2010, 00:25 |
|
|
jguardon
Administrador
Registrado: Septiembre 2009
Mensajes: 2708
Edad: 57 Ubicación: Granada
|
Re: Buscar En Una Base De Datos
Mira este enlace a ver si te sirve. Es el código de un formulario de búsqueda de uno de mis programas. Hay varias rutinas que seguro te sirven adaptándolas a tus necesidades. En especial, la forma de llenar un columview o un gridview mediante su evento _Data().
http://trac6.assembla.com/dfhlog/browser/trunk/FSearch.class
En ese formulario es posible buscar mientras escribes en cualquiera de los campos de búsqueda (o filtrado) y los resultados aparecen de inmediato en el gridview. Si hay algo que no entiendes, pregunta de nuevo.
Saludos
=================== Jesús Guardón
Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".
"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
|
#2 Martes, 20 Julio 2010, 22:06 |
|
|
techm3
Programador
Registrado: Febrero 2010
Mensajes: 130
Edad: 32 Ubicación:
|
Re: Buscar En Una Base De Datos
La verdad es que estoy comenzando con esto de base de datos y me ayudaría una pequeña explicación con un ejemplo ejecutable y no es para sacar provecho, es solo que no entiendo muy bien lo que quieres decir. Este es el código del formulario en donde quiero usar TxtSearch como el buscador y que los resultados se muestren en tabla(ColumnView)(es usado para mostrar todos los datos de la base al abrir el formulario)
|
#3 Martes, 20 Julio 2010, 23:24 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: Buscar En Una Base De Datos
Con tu código lo tienes fácil, separa el procedimiento que ahora reside en la función open como una función independiente que admita un parámetro de selección.
Suponiendo que tuvieses un listbox donde pudieses seleccionar los distintos formatos de vídeo (campo format), el código quedaría así:
PRIVATE hConn AS Connection
PRIVATE FUNCTION ConectarBase() AS Boolean
IF hConn <> NULL THEN RETURN FALSE
hConn = NEW Connection
hConn.Host = "localhost"
hConn.Name = "amp"
hConn.Type = "MySQL"
hConn.login = "root"
hConn.Password = "password"
TRY hConn.OPEN()
IF ERROR THEN
hConn = NULL
Message.Error("Error al conectar con la base")
RETURN TRUE
ENDIF
RETURN FALSE
END
PUBLIC SUB CerrarConexion()
IF hConn = NULL THEN RETURN
hConn.CLOSE()
hConn = NULL
END
PRIVATE SUB refrescarLista(OPTIONAL filtro as string)
DIM hResul AS Result
DIM Clave AS String
tabla.Clear()
IF ConectarBase() THEN RETURN
tabla.Columns.Count = 5
tabla.Columns[0].text = "Title"
tabla.Columns[1].text = "Classification"
tabla.Columns[2].Text = "Concentration"
tabla.Columns[3].Text = "Format"
tabla.Columns[4].text = "Comments"
hResul = hConn.Exec("select * from movinfo" & if(filtro, " where " & filtro,"")) 'Si hay cadena de filtro se adjunta, si no, no)
DO WHILE hResul.Available
Clave = hResul["title"]
tabla.Add(Clave, Clave)
tabla[Clave][1] = hResul["classification"]
tabla[Clave][2] = hResul["concentration"]
tabla[Clave][3] = hResul["format"]
tabla[Clave][4] = hResul["comments"]
hResul.MoveNext()
LOOP
CerrarConexion()
PUBLIC SUB form_open()
ME.Title = "Video Database"
refrescarLista() 'de entrada no enviamos ninguna cadena de filtro con lo que nos muestra todos
END
PUBLIC SUB tabla_KeyRelease()
IF Key.Code = Key.Delete THEN
IF tabla.Current = NULL THEN RETURN
IF tabla.Current.Selected = FALSE THEN RETURN
IF ConectarBase() THEN RETURN
TRY hConn.Exec("delete from movinfo where title=&1", tabla.Current.Key)
IF ERROR THEN
Message.Error("Can't erase \n" & ERROR .text)
ELSE
tabla.Current.Delete()
ENDIF
CerrarConexion()
ENDIF
END
PUBLIC SUB BtnAdd_Click()
IF ConectarBase() THEN RETURN
FData.RunNew(hConn)
CerrarConexion()
Form_Open()
END
PUBLIC SUB tabla_Activate()
DIM hResul AS Result
IF tabla.Current = NULL THEN RETURN
IF ConectarBase() THEN RETURN
hResul = hConn.Edit("movinfo", "title=&1", tabla.Current.Key)
FData.RunEdit(hResul)
tabla.Current[0] = hResul["title"]
tabla.Current[1] = hResul["classification"]
tabla.Current[2] = hResul["concentration"]
tabla.Current[3] = hResul["format"]
tabla.Current[4] = hResul["comments"]
CerrarConexion()
END
PUBLIC SUB listbox1_click() 'Suponiendo que tengas un listbox donde seleccionas el tipo de vídeo (por ejemplo)
refrescarLista("format = " & lisbox1.Text )
END
No lo he probado y puede que tenga errores, pero en esencia creo que se entiende el concepto.
Suerte
=================== No podemos regresar
última edición por shordi el Miercoles, 21 Julio 2010, 09:05; editado 1 vez
|
#4 Miercoles, 21 Julio 2010, 09:03 |
|
|
techm3
Programador
Registrado: Febrero 2010
Mensajes: 130
Edad: 32 Ubicación:
|
Re: Buscar En Una Base De Datos
Hola Shordi, no se si soy yo el que no entiendo, pero lo que quiero hacer es tener un textbox y utilizarlo para buscar en la base de datos lo que se escriba allí y mostrar los resultados en el ColumnView que ya tengo. Supongo que para eso tendría que hacer un clear al columnview cuando se esté escribiendo.
El ejemplo que dí al principio es lo que quiero hacer (que miesntras se escriba vayan apareciendo los resultados), lo único que en vez de un listbox quiero mostrar los resultados en el ColumnView con toda la información de cada artículo.
|
#5 Miercoles, 21 Julio 2010, 15:34 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: Buscar En Una Base De Datos
No me has entendido o yo no te he entendido. A ver si ahora lo entiendes: Imagina que tienes una tabla "Formatos" que contiene todos los posibles formatos de vídeo. El contenido de esa tabla lo pasas a un listbox y cada vez que haces un click en el listbox se te actualiza el ColumnView con los vídeos que tengan el formato elegido.
Eso es lo que hace el ejemplo (sin añadir el código que rellena el listbox, claro).
Ahora bien, si tú lo que quieres es tener un textbox en el que cada vez que pulsas una letra el contenido del columnview se va modificando acorde al textbox... bueno, eso es otro tema (aunque muy parecido y no hay que pensar demasiado para verlo tan sólo cambia las líneas
PUBLIC SUB listbox1_click()
refrescarLista("format = " & lisbox1.Text )
END
Por las líneas
PUBLIC SUB textbox1_change()
refrescarLista("format like " & textbox1.Text & "%" )
END
Sin embargo no te aconsejo que lo hagas así. De esta manera, el encontrar algo o no dependerá de si recuerdas cómo se tecleó en su momento o no. Te encontrarás que los formatos pueden estar duplicados, por ejemplo puede que a un vídeo le teclees 640X480 y a otro 640 x 480 (dejando espacios entre medio), lo que luego queda fatal al imprimirlo y al ordenarlos, etc. etc. etc.
MySQL, como todas las bases que aquí manejamos, es una base de datos Relacional, lo cual implica utilizar las relaciones entre tablas para garantizar la integridad referencial entre las mismas. En otras palabras utiliza tablas auxiliares de códigos que garanticen que lo que se archiva en la tabla de datos es lo que tiene que ser.
A la hora de grabar un formulario de un vídeo, es mucho mejor tener, por ejemplo, un comboBox con todos los formatos posibles de vídeo y elegir uno, que teclear cada vez lo que se te ocurra, o recuerdes. Ahí puede haber fallos de tecleo, errores, olvidos, etc. etc. De la otra manera no.
No todo se limita a conseguir el bonito efecto de "Mira, tecleo aquí una L y ya sólo veo a los que tienen L, ¡qué guay!". Es muuucho más importante que cuando eligas un formato ( o tipo, o género, o lo que sea) lo que te aparezca sea exactamente lo que quieres y nada más.
Espero que te ayude en algo todo esto.
Saludos.
=================== No podemos regresar
última edición por shordi el Jueves, 22 Julio 2010, 09:49; editado 1 vez
|
#6 Jueves, 22 Julio 2010, 09:48 |
|
|
techm3
Programador
Registrado: Febrero 2010
Mensajes: 130
Edad: 32 Ubicación:
|
Re: Buscar En Una Base De Datos
Hola shordi gracias por tu respuesta, mi base de datos tiene los siguientes datos título, clasificación, concentración, formato y comentarios. Lo que me hace falta es poder buscar por título y listar todos los resultados, pero tienes razón en que si no se recuerda como se escribio no se va a encontrar o si por ejemplo se utilizan carácteres como ¿ o ¡ al principio de algún título. Pero eso es lo que necesito, utilizé tu código pero me da error en la syntaxis: hResul = hConn.Exec("select * from movinfo" & If(filtro, " where " & filtro, "")) 'Si hay cadena de filtro se adjunta, si no, no).
Otra consulta, ¿Se puede hacer de alguna manera que se escriba una palabra y que al pulsar un botón o enter se muestren todas los videos que tengan esa palabra en el título?
|
#7 Jueves, 22 Julio 2010, 13:28 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: Buscar En Una Base De Datos
Si tu tabla (no confundas una base de datos con una tabla) tiene datos título, clasificación, concentración, formato y comentarios, se me ocurre que deberías tener una tabla de posibles formatos y otra de posibles clasificaciones como mínimo.
Si esa línea de código te da error, prueba a desglosarla así:
DIM sqlstr AS String
sqlstr = filtro
IF filtro THEN
sqlstr="select * from movinfo where " & filtro
ENDIF
hResul = hConn.Exec(sqlstr)
E inserta un punto de inspección en la línea del Exec. Comprueba el contenido de la variable sqlStr y su corrección sintáctica (por ejemplo copiando su contenido y lanzandolo en un entorno de ejecución SQL, como phpmyadmin o algo parecido.
Si quieres que te devuelva los registros que contengan lo tecleado cambia esta línea
refrescarLista("format like " & textbox1.Text & "%" )
por ésta
refrescarLista("format like %" & textbox1.Text & "%" )
Como verás no se depura en absoluto lo que haya en texbox1.text, por lo que si entras caracteres ilegales para sql el resultado puede ser un error.
Suerte.
=================== No podemos regresar
|
#8 Jueves, 22 Julio 2010, 19:36 |
|
|
techm3
Programador
Registrado: Febrero 2010
Mensajes: 130
Edad: 32 Ubicación:
|
Re: Buscar En Una Base De Datos
Gracias Shordi por tu respuesta. He logrado lo que "quería" arreglando el código que me enviaste con:
PUBLIC SUB textbox1_change()
refrescarLista("title like" & "'" & TextBox1.Text & "%" & "'")
END
Porque de la manera en que me dijistes siempre me daba error.
Gracias!
|
#9 Viernes, 23 Julio 2010, 01:52 |
|
|
|
Temas parecidos
Temas parecidos
|
Página 1 de 1
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 0 invitados Usuarios registrados conectados: Ninguno
|
No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas No puede adjuntar archivos Puede descargar archivos No puede publicar eventos en el calendario
|
|
|
|
|