• Martes 14 de Mayo de 2024, 21:19

Autor Tema:  Error En Filtrado De Datos  (Leído 1038 veces)

BUHO

  • Nuevo Miembro
  • *
  • Mensajes: 17
    • Ver Perfil
Error En Filtrado De Datos
« en: Lunes 19 de Enero de 2004, 13:17 »
0
Hola de nuevo.

Tengo el siguiente problema a la hora de filtrar unase serie de datos de una DB

El problema es el siguiente: Necesito filtrar todos los registros de una DB cuyo valor sea superior a 3000, para ello uso la siguiente instruccion:

AW = "3000"
Set db = OpenDatabase(App.Path & "\prueba.mdb")
tira = "Select * From clientes WHERE TOTAL >= """ & AW & """ "
notal: TOTAL es el nombre del campo donde se hallan los valores que quiero filtrar
Set campo = db.OpenRecordset(Tira)

  If campo.RecordCount > 0 Then
    campo.MoveFirst
    campo.MoveLast
        With campo
            .MoveFirst
            While Not .EOF
                List1.AddItem campo(1) & Space(15) & Format(campo(10), "###,##0.00") _
                & Space(19) & campo(0)  
                 .MoveNext
            Wend
        End With
       
  Else
    MsgBox "Base  Vacia", vbInformation, "¡MENSAJE!"
     
    Me.Hide
  End If

toda esta instruccion funciona pero el caso es que tambien localiza registros con valores inferiores a 3000

por cierto el campo donde estan almacenados los valores es del tipo text

agradecería mucho vuestra ayuda, estoy bloqueado en este tema varios dias

Gracias por todo un saludo

QliX=D!

  • Miembro MUY activo
  • ***
  • Mensajes: 214
    • Ver Perfil
Re: Error En Filtrado De Datos
« Respuesta #1 en: Lunes 19 de Enero de 2004, 15:39 »
0
No podes usar para guaradar un campo TEXT un valor numerico y dps pretender usar as operaciones control numerico como mayor, menor o igual que.
Lamentablemente con esa definicion de campo no vas a poder comparar si es mayop o menor, porq ue en caso de campos text, revisa la longitud.
O sea la DB y VB no son tan inteligente como para saber que corchos pretendes hacer vos con eso y compara las longitudes de las cadenas.
Tenes que poner ese campo como Numerico o usar otro tipo de algoritmo para buscarlo...


Algo BASE, es que si pretendes usar comparaciones para evaluar el contenido de un numero OBVIAMENTE no lo podes almacenar como cadena de texto, a aprte de que un numero como cadena de texto puede ocupar mas que un numero como entero o como float.

Es logico que no funcione stu "filtrado" por que esta mal hecho todo el sistema desde la base....
sorry por ser el portador de tan negras noticias...
 <_<
QliX=D! - From the top of Tsunami

Brroz

  • Miembro de PLATA
  • *****
  • Mensajes: 1058
    • Ver Perfil
Re: Error En Filtrado De Datos
« Respuesta #2 en: Lunes 19 de Enero de 2004, 15:43 »
0
Hola BUHO.

Si el campo TOTAL siempre va a contener un valor numérico, lo mejor que puedes hacer es modificar el diseño de la tabla y crear el campo como número.

Si quieres evitarte problemas, esta es tu mejor opción, porque las comparaciones por mayor o menor nunca funcionarán como lo esperas. Por ejemplo, el valor del texto '11' ¡ es menor que el del texto '2' !

Para conseguir un resultado satisfactorio, tendrías que usar funciones de conversión de tipos, con las que puedes tener muchos problemas...

De todas formas, si no quieres cambiar el tipo de datos del campo, puedes probar de estas formas:

1. como lo estabas haciendo pero usando comillas simples.
Código: Text
  1.  
  2. tira = "Select * From clientes WHERE TOTAL >= '" & AW & "'"
  3. ' más claro: ...>= ' " & AW & " ' "
  4.  
  5.  

2
Código: Text
  1.  
  2. tira = "Select * From clientes WHERE Val(TOTAL) >= " & CDbl(AW)
  3.  
  4.  
en caso de que AW siga siendo de tipo String...

3 Para curarte en salud y que funcione siempre. Es un poco más lento, te creas una tabla temporal.
Código: Text
  1.  
  2. .
  3. .
  4. .
  5. db.Execute "SELECT clientes.*," _
  6. & " Val(TOTAL) AS dblTOTAL " _
  7. & " INTO wSeleccion FROM clientes " _
  8. & "WHERE clientes.TOTAL Is Not Null
  9. .
  10. .
  11. .
  12. tira = "Select * From wSeleccion " _
  13. & "WHERE dblTotal >= " & Cdbl(AW)
  14. .
  15. .
  16. .
  17. db.Execute "DROP TABLE wSeleccion"
  18. .
  19. .
  20. .
  21.  
  22.  

Suerte.

BUHO

  • Nuevo Miembro
  • *
  • Mensajes: 17
    • Ver Perfil
Re: Error En Filtrado De Datos
« Respuesta #3 en: Lunes 19 de Enero de 2004, 22:22 »
0
Gracias a los dos por responder tan pronto.

Voy a probar con las dos respuestas y ya os contaré

Gracias de nuevo