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

Busqueda dentro de base de datos

Estas en el tema de Busqueda dentro de base de datos en el foro de Visual Basic clásico en Foros del Web. Hola gente les comento que empeze hace unos dias a programar en VB6 y decici comenzar con un simple prorgamita para leer y editar una ...
  #1 (permalink)  
Antiguo 07/03/2009, 03:20
 
Fecha de Ingreso: marzo-2009
Mensajes: 23
Antigüedad: 15 años, 1 mes
Puntos: 0
Busqueda dentro de base de datos

Hola gente les comento que empeze hace unos dias a programar en VB6 y decici comenzar con un simple prorgamita para leer y editar una base de datos echa en Acces 2003.

Lo que ando buscando es un codigo de busqueda con las siguientes opciones:

Buscar: (datos) -Busqueda exacta (buscar el valor "Datos" dentro de la base de datos)
- Busqueda Parcial (Buscar "Datos***" y q me de todos los resultados q coinsidan con eso)

pero quiero que me los devuelva en una MsFlexGrid y no encontre como ahcerlo :S..
andube buscando en el foro pero todo lo q vi utilizan ADO y yo estoy usando DAO 3.6.. no se si me pueden ayudar
se los agradeceria muchisimo :D
  #2 (permalink)  
Antiguo 07/03/2009, 11:55
Avatar de GABRIL  
Fecha de Ingreso: febrero-2007
Mensajes: 280
Antigüedad: 17 años, 2 meses
Puntos: 4
Respuesta: Busqueda dentro de base de datos

con un sql resuelves tu problema:

consulta="select * from tutabla where campo1='varbusca'"


tal vez necesites el operador like para otro tipo de busquedas, como las parciales..
Nunca he probado con MsFlexGrid, pero intenta asi:

set MsflexGrid=consulta

suerte
  #3 (permalink)  
Antiguo 09/03/2009, 01:02
 
Fecha de Ingreso: marzo-2009
Mensajes: 23
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Busqueda dentro de base de datos

Mira gracias por responder pero no te entiendo del todo.. tu dices q en ves de usar bases de dato en acces las pase a sql ?..

otra cosa.. Estube probando de algunas formas e intente usar el FindFirst.. te muestro como lo voy haciendo:


En un modulo declare esto:

Public DB As dao.Database
Public DATOS As dao.Recordset
Public ID As Integer

(tengo mas cosas pero no son de importancia)

y en un form para buscar esta lo siguiente:


Private Sub Form_Load()
Dim destsearch As String
grilla.Rows = 1
grilla.FormatString = "ID |Destino |Codigo |Precio "

destsearch = "Argentina"
DATOS.FindFirst "destsearch"

Do Until DATOS.NoMatch

grilla.AddItem DATOS!ID
grilla.TextMatrix(grilla.Rows - 1, 1) = DATOS!destino
grilla.TextMatrix(grilla.Rows - 1, 2) = DATOS!codigo
grilla.TextMatrix(grilla.Rows - 1, 3) = DATOS!Precio

DATOS.FindNext "Destsearch"

loop

end sub


Lo que deberia hacer esto es buscar en el recordset DATOS el valor "argentina" y que luego de eso lo me lo devuelva en un MsFlexGrid llamado Grilla junto a los datos de toda la fila.. pero me da un error con el criterio de busqueda.. y no se si lo estoy usando mal..
  #4 (permalink)  
Antiguo 09/03/2009, 05:46
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 3 meses
Puntos: 37
Respuesta: Busqueda dentro de base de datos

Hola, para estos casos es mejor utilizar una consulta WHERE:

Dim strSQL As String
strSQL = "SELECT * FROM LaTabla WHERE NombreCampo = '" & destsearch & "'"
Set DATOS = DB.OpenRecordset(strSQL)


y a continuación cargas el recordset en la grilla.

En tu código el error está en esta línea:

DATOS.FindFirst "destsearch"

debe ser:

DATOS.FindFirst "NombreCampo='" & destsearch & "'"

Igualmente para FindNext

Un saludo
  #5 (permalink)  
Antiguo 09/03/2009, 12:30
Avatar de totigo  
Fecha de Ingreso: marzo-2007
Ubicación: America
Mensajes: 103
Antigüedad: 17 años, 2 meses
Puntos: 3
De acuerdo Respuesta: Busqueda dentro de base de datos

Tu quieres asignar el resultado de la consulta a un MSHflexgrid. hazlo a traves de la propiedad DataSource de tu control.+



Código vb:
Ver original
  1. Dim ADBrecordset As New ADODB.Recordset
  2. Dim strParametro as String
  3.        
  4.     strSucursal = "cordoba"
  5.     sql = " SELECT * FROM TABLA WHERE CAMPO='"   & strParametro & "'"
  6.  
  7.     Set ADBrecordset = New ADODB.Recordset
  8.     ADBrecordset .Open sql, miAdoConexion, adOpenForwardOnly
  9.    
  10.     Set mi_MSHFlexGrid.DataSource = ADBrecordset
  #6 (permalink)  
Antiguo 09/03/2009, 14:30
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 3 meses
Puntos: 37
Respuesta: Busqueda dentro de base de datos

Cita:
Iniciado por totigo Ver Mensaje
Tu quieres asignar el resultado de la consulta a un MSHflexgrid. hazlo a traves de la propiedad DataSource de tu control.+



Código vb:
Ver original
  1. Dim ADBrecordset As New ADODB.Recordset
  2. Dim strParametro as String
  3.        
  4.     strSucursal = "cordoba"
  5.     sql = " SELECT * FROM TABLA WHERE CAMPO='"   & strParametro & "'"
  6.  
  7.     Set ADBrecordset = New ADODB.Recordset
  8.     ADBrecordset .Open sql, miAdoConexion, adOpenForwardOnly
  9.    
  10.     Set mi_MSHFlexGrid.DataSource = ADBrecordset

Me parece que eso no le va a funcionar, ya que está utilizando DAO y no ADO y además creo que no es un control MSHFlexGrid sino un control MSFLEXGrid que no se puede enlazar a un recordset.

  #7 (permalink)  
Antiguo 09/03/2009, 15:25
 
Fecha de Ingreso: marzo-2009
Mensajes: 23
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Busqueda dentro de base de datos

Muchisimas gracias por la ayuda ya me esta funcionando de la forma que me dio avellaneda :D:D.

ahora una consultita mas y listo. Con este metodo cuando yo busco "Argentina" me devuelve el resultado si y solo si en la BD esta Argentina. quisiera saber si puedo hacer q la busqueda me devuelca todas las filas que contienen argentina como:

Argentina
Argentina - Cordoba
Argentina - Buenos Aires
Argentina - Tucuman

Etc...
  #8 (permalink)  
Antiguo 09/03/2009, 15:43
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 3 meses
Puntos: 37
Respuesta: Busqueda dentro de base de datos

Solo cambia la consulta:

strSQL = "SELECT * FROM LaTabla WHERE NombreCampo LIKE '*" & destsearch & "*'"

Saludos
  #9 (permalink)  
Antiguo 09/03/2009, 16:12
 
Fecha de Ingreso: marzo-2009
Mensajes: 23
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Busqueda dentro de base de datos

Cambie la consulta pero me sigue devolviendo el valor exacto.. aca esta mi form_load:

Private Sub Form_Load()
Dim strSQL As String
strSQL = "SELECT * FROM Datos WHERE Destino LIKE '*" & Destsearch & "*'"

Set DATOS = DB.OpenRecordset(strSQL)
Grilla.Rows = 1
Grilla.FormatString = "ID |Destino |Codigo |Precio "

DATOS.FindFirst "Destino='" & Destsearch & "'"

Do Until DATOS.NoMatch

Grilla.AddItem DATOS!ID
Grilla.TextMatrix(Grilla.Rows - 1, 1) = DATOS!destino
Grilla.TextMatrix(Grilla.Rows - 1, 2) = DATOS!codigo
Grilla.TextMatrix(Grilla.Rows - 1, 3) = DATOS!Precio

DATOS.FindNext "Destino='" & Destsearch & "'"

Loop

End Sub


Aclaro q a la variable Destsearch la tengo declarada en un modulo como String y le asigno un valor desde un Text.Value de otro formulario
  #10 (permalink)  
Antiguo 09/03/2009, 16:35
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 3 meses
Puntos: 37
Respuesta: Busqueda dentro de base de datos

Esa consulta te devolvería todos los registros que contengan la palabra Argentina, con lo cual sobran las instrucciones 'FindFirst' y 'FindNext'. solo tendrías que recorrer el recordset hasta EOF y mostrar los datos en el grid.

  #11 (permalink)  
Antiguo 09/03/2009, 16:50
 
Fecha de Ingreso: marzo-2009
Mensajes: 23
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Busqueda dentro de base de datos

pero como hago q el programa muestre los resultados sin usar el findfirst ni el findnext
  #12 (permalink)  
Antiguo 10/03/2009, 03:49
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 3 meses
Puntos: 37
Respuesta: Busqueda dentro de base de datos

Cita:
Iniciado por acc008 Ver Mensaje
pero como hago q el programa muestre los resultados sin usar el findfirst ni el findnext
Con un bucle de principio a fin del recordset. Este sería el código completo:

Código vb:
Ver original
  1. Dim strSQL As String
  2. strSQL = "SELECT * FROM LaTabla WHERE NombreCampo = '" & destsearch & "'"
  3. Set DATOS = DB.OpenRecordset(strSQL)
  4.  
  5. Dim i As Integer, j As Integer
  6. With Grilla
  7.     .Rows = DATOS.RecordCount + 1
  8.     .Cols = DATOS.Fields.Count
  9.     .FixedCols = 0
  10.     For i = 0 To .Cols - 1
  11.         ' poner en el encabezado el nombre de los campos
  12.        .TextMatrix(0, i) = DATOS.Fields(i).Name
  13.     Next i
  14.     For i = 0 To DATOS.RecordCount - 1
  15.     ' listar los registros en el grid    
  16.    For j = 0 To .Cols - 1
  17.             .TextMatrix(i + 1, j) = DATOS(j) & ""
  18.         Next j
  19.         DATOS.MoveNext
  20.     Next i
  21. End With
  #13 (permalink)  
Antiguo 10/03/2009, 04:16
 
Fecha de Ingreso: marzo-2009
Mensajes: 23
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Busqueda dentro de base de datos

no funca :S.. si busco Argentina me sale me da solo el resultado Argentina. y si pongo Arg no me devuelve nada y me abre la grilla vacia
  #14 (permalink)  
Antiguo 10/03/2009, 04:36
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 3 meses
Puntos: 37
Respuesta: Busqueda dentro de base de datos

Cita:
Iniciado por acc008 Ver Mensaje
no funca :S.. si busco Argentina me sale me da solo el resultado Argentina. y si pongo Arg no me devuelve nada y me abre la grilla vacia
mira la respuesta nº 8
  #15 (permalink)  
Antiguo 10/03/2009, 05:09
 
Fecha de Ingreso: marzo-2009
Mensajes: 23
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Busqueda dentro de base de datos

tienes razon no me di cuenta que le faltaba el LIKE. Ahora si busca bien pero no me devuelve todos los resultados. solo me muestra 1.

me puse a ver bien el codigo y pienso que le puede faltar un do while y un loop, la verdad es que recien estoy aprendiendo asi que corriganme si me equivoco :D

Última edición por acc008; 10/03/2009 a las 05:22
  #16 (permalink)  
Antiguo 10/03/2009, 05:28
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 3 meses
Puntos: 37
Respuesta: Busqueda dentro de base de datos

Cita:
Iniciado por acc008 Ver Mensaje
tienes razon no me di cuenta que le faltaba el LIKE. Ahora si busca bien pero no me devuelve todos los resultados. solo me muestra 1.

me puse a ver bien el codigo y pienso que le puede faltar un do while y un loop, la verdad es que recien estoy aprendiendo asi que corriganme si me equivoco :D
Puedes poner el código de la búsqueda y cómo lo cargas en el Grid?

Mejor haz un copy-pate, no lo escribas a mano.
  #17 (permalink)  
Antiguo 10/03/2009, 05:43
 
Fecha de Ingreso: marzo-2009
Mensajes: 23
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Busqueda dentro de base de datos

Puse el que tu me pasaste. solo le cambie el nombre de la tabla y el campo:
Código:
Private Sub Form_Load()
Dim strSQL As String
strSQL = "SELECT * FROM Datos WHERE destino LIKE '*" & Destsearch & "*'"
Set DATOS = DB.OpenRecordset(strSQL)
 
Dim i As Integer, j As Integer
With Grilla
    .Rows = DATOS.RecordCount + 1
    .Cols = DATOS.Fields.Count
    .FixedCols = 0
    For i = 0 To .Cols - 1
        ' poner en el encabezado el nombre de los campos
        .TextMatrix(0, i) = DATOS.Fields(i).Name
    Next i
    For i = 0 To DATOS.RecordCount - 1
    ' listar los registros en el grid
    For j = 0 To .Cols - 1
            .TextMatrix(i + 1, j) = DATOS(j) & ""
        Next j
        DATOS.MoveNext
    Next i
End With


End Sub
y aqui estan las variables declaradas en un modulo:

Código:
Public Destsearch As String
Public DB As dao.Database
Public DATOS As dao.Recordset
  #18 (permalink)  
Antiguo 10/03/2009, 06:11
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 3 meses
Puntos: 37
Respuesta: Busqueda dentro de base de datos

¿ y dónde se le asigna un valor a la variable Destsearch?
  #19 (permalink)  
Antiguo 10/03/2009, 06:35
 
Fecha de Ingreso: marzo-2009
Mensajes: 23
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Busqueda dentro de base de datos

se lo asigno en un txt.value de un formulario anteriror
  #20 (permalink)  
Antiguo 11/03/2009, 09:31
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 3 meses
Puntos: 37
Respuesta: Busqueda dentro de base de datos

Bueno, parece que el problema está en la propiedad RecordCount que solamente devuelve un registro, prueba así:

Búsqueda por aproximación:

Código vb:
Ver original
  1. Private Sub Form_Load()
  2. Dim strSQL As String
  3. strSQL = "SELECT * FROM Datos WHERE destino LIKE '*" & Destsearch & "*'"
  4. Set DATOS = DB.OpenRecordset(strSQL)
  5. Dim i As Integer, j As Integer
  6. With Grilla
  7.     .Rows = 1
  8.     .Cols = DATOS.Fields.Count
  9.     .FixedCols = 0
  10.     For i = 0 To .Cols - 1
  11.         .TextMatrix(0, i) = DATOS.Fields(i).Name
  12.     Next i
  13.     i = 1
  14.     Do Until DATOS.EOF
  15.         .Rows = .Rows + 1
  16.         For j = 0 To .Cols - 1
  17.             .TextMatrix(i, j) = DATOS(j) & ""
  18.         Next j
  19.         DATOS.MoveNext
  20.         i = i + 1
  21.     Loop
  22. End With
  23.  
  24. End Sub

En la búsqueda exacta, sólo tienes que cambiar la sentencia:

strSQL = "SELECT * FROM Datos WHERE destino = '" & Destsearch & "'"

Lo demás, todo igual a lo anterior.

Saludos
  #21 (permalink)  
Antiguo 11/03/2009, 10:25
 
Fecha de Ingreso: marzo-2009
Mensajes: 23
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Busqueda dentro de base de datos

Bueno ya me funciono.
Muchas gracias por la ayuda :D
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 01:35.