PDA

Ver la versión completa : Fucking Datagrid!



EPP
14/01/2010, 04:48
Bueno el tema es simple... quiero hacer una busqueda en un DATAGRID metiante un TEXTBOX y me funciona todo de 10 salvo cuando el dato a buscar es numerico...

O sea yo escribo en el TEXTBOX y se va filtrando automaticamente las coincidencias... salvo cuando busco por DNI el cual esta declarado en la DB como numerico...

Copio el codigo a ver que carajo puede ser...

Saludos




Option Explicit
Dim strSQL As String
Dim Campo As String
Dim RSCarga As ADODB.Recordset
Dim RSAlu As ADODB.Recordset
Private Sub Form_Load()

Set RSCarga = New ADODB.Recordset
strSQL = "SELECT * From Alumnos"
Campo = "DNI"

'Comprueba si el RecordSet (RSCarga) esta abierto, si es asi lo cierra
If RSCarga.State = adStateOpen Then
RSCarga.Close
End If

RSCarga.CursorLocation = adUseClient
RSCarga.Open strSQL, CN, adOpenDynamic, adLockOptimistic

RSCarga.Requery
'Asigna un título a la Grilla
DGAlumnos.Caption = "Listado de Alumnos"
'Asigna el RecordSet (RSCarga) a la Grilla
Set DGAlumnos.DataSource = RSCarga
DGAlumnos.Refresh
DGAlumnos.Enabled = True

End Sub
Private Sub optApellido_Click()
Campo = "Apellido"
End Sub
Private Sub optDNI_Click()
Campo = "DNI"
End Sub
Private Sub txtBuscar_Change()

'Comprueba que el RecordSet (RSCarga) se halla creado
If RSCarga Is Nothing Then
Exit Sub
End If
'Verifica que el RecordSet (RSCarga) se encuentre abierto
If Not RSCarga.State = adStateOpen Then
Exit Sub
End If

If txtBuscar.Text <> "" Then
'Filtra por el campo especificado en la variable Campo y tomando como valor el dato del TextBox (txtBuscar.text)
RSCarga.Filter = Campo & " LIKE '" & txtBuscar.Text & "*'"
Else
'Si txtBuscar.text no tiene nada se limpia el filtro
RSCarga.Filter = ""
'Vuelve a mostrar todos los registros en la Grilla
Set DGAlumnos.DataSource = RSCarga
DGAlumnos.Refresh
DGAlumnos.Enabled = True

End If

End Sub

EPP
14/01/2010, 04:59
Aclaro mas por si no se entiende... si yo pongo a buscar por nombre y Empiezo a escribir y coloco la A me vienen todos los apellidos con A, bueno la idea es que al empezar a escribir el DNI y ponga 1 o 2 o lo que sea me traiga de la misma forma los que mepiezan con 1 o 2... si no puedo usar el LIKE que otra alternativa me pueden dar para trabajar con numeros? o cambio todo a STRING y controlo que solo pongan numeros :P

Saludos

EPP
14/01/2010, 05:05
Definitivamente cambiando el tipo de datos desde la Base de datos a tipo TEXTO y no numerico como estbaa se soluciona pero no es la idea.

Enkapzulada
14/01/2010, 09:48
Si estas enviando el campo, no te basta poner un if, preguntando si es ese campo ( el que es numerico ) entonces en vez de un like te queda : campo = 1 ponele, sin el like ni las comillas.
JAVA sample


if( campo.equals(dni))
query = "where dni =" + parametrodeInput;
else
query = "where apellido like '% " + parametrodeInput + "%'";


En jquery lo que uso yo es el indice de las columnas de busqueda, pero en este caso no se si tenes un form para cada columna. Supongo que tenes un solo input de busqueda.

Enkapzulada
14/01/2010, 10:07
Che, tenes una funcion que es IsNumeric(input.text) ahi le podes poner la condicion de búsqueda , tambien jajaja



If txtBuscar.Text <> "" Then
'Filtra por el campo especificado en la variable Campo y tomando como valor el dato del TextBox (txtBuscar.text)
if not IsNumeric(txtBuscar.text)
RSCarga.Filter = Campo & " LIKE '" & txtBuscar.Text & "*'"
else
// búsqueda numerica
RSCarga.Filter = Campo & " =" & txtBuscar.Text
Else
// lalala



algo asi capaz xDDDDDDDDDDDDDD

vofijatee
18/01/2010, 13:30
Los únicos operadores de compración de SQL para trabajar con campos numericos son BETWEEN (no sirve en este caso) , los de igualdad (=, !=, <>, ^=) , mayor o menor (> , <, <=, >=) etc.

La solución es como dijiste, trabajarlo como si fuera texto. Que para el campo DNI es mucho más recomendable que usarlo como número.

Saludos.