• Domingo 22 de Diciembre de 2024, 19:05

Autor Tema:  Busqueda Exacta???  (Leído 4729 veces)

neorent

  • Miembro MUY activo
  • ***
  • Mensajes: 249
    • Ver Perfil
    • http://www.laestokada.cl
Busqueda Exacta???
« en: Jueves 6 de Abril de 2006, 19:51 »
0
Hola a todos:
ojala me puedan ayuar, trabajo con access97 y vb6.0 y quiero hacer lo siguiente, en una tabla tengo un campo cargosistema y resulta que quiero contar todos los registro de este campo solo buscando la palabra sistema, ej Administrativo,+1pc,sistema bueno solo quiero que me diga si este registro tiene sistema si no pase al otro registro, otro ejemplo seria asi "algo,sistema,algo" eso si todos estos estan separados por coma osea puede aparacer asi tambien en la base ",sistema,otro" no se si entiende la idea solo buscar esta palabra en cualquier parte del registro y si esta lo cuente si no esta no lo cuente solo quiero saber como puedo hacer la busqueda lo demas lo hago yo si pueden ayudarme seria genial adios y muchas gracias.
Un Tigre Nunka Kambia Sus Rayas

cpmario

  • Miembro HIPER activo
  • ****
  • Mensajes: 629
    • Ver Perfil
    • http://www.cpimario.com
Re: Busqueda Exacta???
« Respuesta #1 en: Jueves 6 de Abril de 2006, 21:24 »
0
Te escribí una subrutina que supongo te ayudará en lo que deseas. No la probé, ya que no una base de datos en que basarme, pero espero que funcione cuando la adecues a tu programa.

Código: Text
  1.  
  2. 'strPalabraBuscada = "sistema" o cualquier palabra que desees buscar
  3. Sub test(strPalabraBuscada As String)
  4.     Dim DBPrincipal As Database
  5.     Dim rstID As Recordset
  6.     Dim strSQL As String
  7.    
  8.     Set DBPrincipal = DBEngine.OpenDatabase("MiDataBase.mdb")
  9.     strSQL = "SELECT * FROM MiTabla"
  10.     Set rstID = DBPrincipal.OpenRecordset(strSQL, dbOpenDynaset)
  11.     rstID.MoveFirst
  12.     While Not rstID.EOF
  13.         'el signo (*) es un comodín, la palabra puede estar en cualquier _
  14.         parte del texto del campo a buscar
  15.         rstID.FindFirst "Micampo='*" & strPalabraBuscada & "*'"
  16.         If Not rstID.NoMatch Then
  17.             MsgBox "No encontré " & strPalabraBuscada
  18.         Else
  19.             MsgBox "Encontré " & strPalabraBuscada
  20.         End If
  21.         rstID.MoveNext
  22.     Wend
  23.     rstID.Close
  24.     DBPrincipal.Close
  25. End Sub
  26.  
:comp:

neorent

  • Miembro MUY activo
  • ***
  • Mensajes: 249
    • Ver Perfil
    • http://www.laestokada.cl
Re: Busqueda Exacta???
« Respuesta #2 en: Viernes 7 de Abril de 2006, 00:26 »
0
Cita de: "cpmario"
Te escribí una subrutina que supongo te ayudará en lo que deseas. No la probé, ya que no una base de datos en que basarme, pero espero que funcione cuando la adecues a tu programa.

Código: Text
  1.  
  2. 'strPalabraBuscada = "sistema" o cualquier palabra que desees buscar
  3. Sub test(strPalabraBuscada As String)
  4.     Dim DBPrincipal As Database
  5.     Dim rstID As Recordset
  6.     Dim strSQL As String
  7.     
  8.     Set DBPrincipal = DBEngine.OpenDatabase("MiDataBase.mdb")
  9.     strSQL = "SELECT * FROM MiTabla"
  10.     Set rstID = DBPrincipal.OpenRecordset(strSQL, dbOpenDynaset)
  11.     rstID.MoveFirst
  12.     While Not rstID.EOF
  13.         'el signo (*) es un comodín, la palabra puede estar en cualquier _
  14.         parte del texto del campo a buscar
  15.         rstID.FindFirst "Micampo='*" & strPalabraBuscada & "*'"
  16.         If Not rstID.NoMatch Then
  17.             MsgBox "No encontré " & strPalabraBuscada
  18.         Else
  19.             MsgBox "Encontré " & strPalabraBuscada
  20.         End If
  21.         rstID.MoveNext
  22.     Wend
  23.     rstID.Close
  24.     DBPrincipal.Close
  25. End Sub
  26.  
:comp:
bueno muchas gracias por tu ayuda sabes trate de adaptar el code a lo que yo queria, pero no me resulta cuando empiezo el conteo en la base por ejemplo tengo 200 registros y me cuenta que ya paso como 3000 veces osea no me funciona lo que yo hice quizas algo esta mal te puedo dejar el code para que lo veas y me puedas indicar cual puede ser mi error, te lo agradeceria muchisimo ya que haci podria entregar la aplicacion que me estan pidiendo y esto es lo unico que me retrasa un poco bueno es mi primera vez que realizo una busqueda con sql jejeje bueno te dejo el code y espero me cuentes ok adios y gracias

Dim prueba As Database
Dim tabla As Recordset
Dim strSQL As String
Dim strpalabrabuscada As String
Dim cuentasistema As Integer

strpalabrabuscada = "SISTEMA"
Set prueba = DBEngine.OpenDatabase("\\obiwan\soporte\inventario06.mdb")
strSQL = "SELECT * FROM maestra"
Set tabla = prueba.OpenRecordset(strSQL, dbOpenDynaset)
tabla.MoveFirst
While Not tabla.EOF
     tabla.FindFirst "perfilusuario='*" & strpalabrabuscada & "*'"
     If Not tabla.NoMatch Then
           MsgBox "No encontré " & strpalabrabuscada
     Else
           MsgBox "Encontré " & strpalabrabuscada
           cuentasistema = cuentasistema + 1
           Label31.Caption = cuentasistema
     End If
     tabla.MoveNext
Wend
tabla.Close
prueba.Close
Un Tigre Nunka Kambia Sus Rayas

Juanolo

  • Miembro MUY activo
  • ***
  • Mensajes: 202
    • Ver Perfil
Re: Busqueda Exacta???
« Respuesta #3 en: Viernes 7 de Abril de 2006, 16:30 »
0
Hola Neorent!

Creo que tu código puede mejorar con un par de cosillas:

En primer lugar, creo que el error del código está en:

Código: Text
  1. If Not tabla.NoMatch Then
  2. MsgBox "No encontré " & strpalabrabuscada
  3. Else
  4.  

Pues, si encuentra la palabra te dirá que no la encontró. Me explico. Si no encuentra la palabra, tabla.nomatch es Verdadero. U sea, Si tabla.nomatch, entonces "No encontré la palabra" (El Not está de más)

Pero yendo al código (Puede que me equivoque en algo, no tengo Visual cerca; pero si algo falla sin duda te dará las pistas para corregirlo:

Código: Text
  1. Dim prueba As Database
  2. Dim tabla As Recordset
  3. Dim strSQL As String
  4. Dim strpalabrabuscada As String
  5.  
  6. strpalabrabuscada = "SISTEMA"
  7. Set prueba = DBEngine.OpenDatabase("\\obiwan\soporte\inventario06.mdb")
  8. strSQL = "SELECT * FROM maestra WHERE perfilusuario='*" & strpalabrabuscada & "*'"
  9. Set tabla = prueba.OpenRecordset(strSQL, dbOpenDynaset)
  10.  
  11. With Tabla
  12.   If .EOF and .BOF   'Si está al comienzo y al final del Recordset al mismo tiempo.
  13.      MsgBox "La Palabra no existe"
  14.      Goto SAlida
  15.   Else
  16.      .MoveLast
  17.      .MoveFirst   'Voy al primer y al último registros
  18.      msgbox "La palabra se encuentra " & .Recordcount & " veces"
  19.   endif
  20.   .close
  21. end With
  22. Salida:
  23. prueba.close
  24.  
La luz que sólo se ilumina a sí misma, es oscuridad.

neorent

  • Miembro MUY activo
  • ***
  • Mensajes: 249
    • Ver Perfil
    • http://www.laestokada.cl
Re: Busqueda Exacta???
« Respuesta #4 en: Lunes 10 de Abril de 2006, 15:17 »
0
hola juanolo bueno gracias por la ayuda pero igual me da errores, osea no que me de un error de ejecucion o algo asi solo que cuando sigo contando igual me sobre pasa lo que deberia tener no se si me entiendes igual dejo la inquietante para ver quien me echa la manito y se agradece mucho el aporte adios
Un Tigre Nunka Kambia Sus Rayas

Juanolo

  • Miembro MUY activo
  • ***
  • Mensajes: 202
    • Ver Perfil
Re: Busqueda Exacta???
« Respuesta #5 en: Lunes 10 de Abril de 2006, 16:36 »
0
Hola Neorent!
  Mira, estuve perfeccionando un poco el código que te entregué anteriormente (lo vi con cuidado y me dio vergüenza). Prueba este:

Código: Text
  1. Private Sub TestNeorent()
  2.     Dim pRueba As Database
  3.     Dim taBla As Recordset
  4.     Dim strSQL As String
  5.     Dim strPalabrabuscada As String
  6.     
  7.     strPalabrabuscada = "SISTEMA"
  8.     Set pRueba = DBEngine.OpenDatabase("\\obiwan\soporte\inventario06.mdb")
  9.     strSQL = "SELECT * FROM maestra WHERE perfilUsuario like '*" & strPalabrabuscada & "*'"
  10.     Set taBla = pRueba.OpenRecordset(strSQL, dbOpenDynaset)
  11.     
  12.     With taBla
  13.      If .EOF And .BOF Then   'Si está al comienzo y al final del Recordset al mismo tiempo.
  14.         MsgBox "La Palabra nos e encuentra"
  15.         GoTo Salida
  16.      Else
  17.         .MoveLast
  18.         .MoveFirst   'Voy al primer y al último registros con el objetivo de contar los registros.
  19.                               'Por algún motivo, si no lo hago, DAO no los cuenta bien.
  20.         MsgBox "La palabra se encuentra " & .RecordCount & " veces"
  21.         'La siguiente rutina recorre el recordset generado mostrando cada uno de los registros que contienen
  22.         'la palabra buscada.
  23.         Do While Not .EOF
  24.             MsgBox "Encontre: " & !PerfilUsuario
  25.             .MoveNext
  26.         Loop
  27.         
  28.      End If
  29. Salida:
  30.      taBla.Close
  31.     End With
  32.     pRueba.Close
  33. End Sub
  34.  

Respecto al error que se te produce..., bueno, debí verlo antes, pero ahora he notado lo siguiente:

La comparación (para lo que querías) debía ser 'like' y no '='.
Como buscabas el primer registro que cumpliera la condición, al ir al principio del loop, siempre llegarías al mismo registro. Luego: Era imposible que llegara al final de la tabla; condición para que saliera del loop.
Como yo había modificado tu código original, 'heredé' algunos de esos errores en mi propuesta.
En fin, quien se explica se complica. El error está reparado y el código anterior debería funcionarte sin problemas.

Chau!.. Y suerte!
La luz que sólo se ilumina a sí misma, es oscuridad.

cpmario

  • Miembro HIPER activo
  • ****
  • Mensajes: 629
    • Ver Perfil
    • http://www.cpimario.com
Re: Busqueda Exacta???
« Respuesta #6 en: Lunes 10 de Abril de 2006, 16:52 »
0
Es dificíl proponer una rutina sin tener la base de datos original para hacer pruebas, esta otra rutina  debiera funcionar:
Código: Text
  1.  
  2. Private Sub Contar()
  3.     Dim prueba As Database
  4.     Dim tabla As Recordset
  5.     Dim strSQL As String
  6.     Dim strpalabrabuscada As String
  7.     Dim cuentasistema As Integer
  8.  
  9.     strpalabrabuscada = "SISTEMA"
  10.     Set prueba = DBEngine.OpenDatabase("\\obiwan\soporte\inventario06.mdb")
  11.     strSQL = "SELECT * FROM maestra where perfilusuario= '*" & strpalabrabuscada & "*'"
  12.     Set tabla = prueba.OpenRecordset(strSQL, dbOpenDynaset)
  13.    
  14.     tabla.MoveLast
  15.     cuentasistema = tabla.RecordCount
  16.     Label31.Caption = cuentasistema
  17.     tabla.Close
  18.     prueba.Close
  19. End Sub
  20.  
:comp:

neorent

  • Miembro MUY activo
  • ***
  • Mensajes: 249
    • Ver Perfil
    • http://www.laestokada.cl
Re: Busqueda Exacta???
« Respuesta #7 en: Lunes 10 de Abril de 2006, 18:55 »
0
hey!!! muchisimas gracias a los dos bueno leyendo un poco el codigo que han posteado he podido entender como funciona una instruccion sql  :P  ais que se los agradesco, respecto a los code los dos son lo que necesitaba solo que no sabia como se debia preguntar y aplicar gracias por su ayuda y su tiempo adios.
Un Tigre Nunka Kambia Sus Rayas