Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Buscar En Una Base De Datos
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje 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 
techm3 - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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)
' gambas class file
  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

PUBLIC SUB Form_Open()

  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")
  
  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()
  
  ME.Title = "Video Database"

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

 



 
techm3 - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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.
 



 
techm3 - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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?
 



 
techm3 - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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!
 



 
techm3 - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Como Buscar En Una Base De Datos Mientras ... pittusa Bases de Datos 1 Jueves, 30 Septiembre 2010, 21:24 Ver último mensaje
techm3
No hay nuevos mensajes Buscar En Base De Datos Un Registro alan Bases de Datos 2 Lunes, 10 Enero 2011, 17:44 Ver último mensaje
alan
No hay nuevos mensajes Problemas Al Buscar Registro String En Una... mauriciobaez1971 Bases de Datos 3 Martes, 29 Enero 2013, 04:59 Ver último mensaje
RodSanRey
No hay nuevos mensajes Buscar Datos En Un TextArea alessandri Aplicaciones/Fragmentos de Código 14 Martes, 18 Febrero 2014, 15:46 Ver último mensaje
edivaldo
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
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



  

 

cron