Seek y ADO

Como puedo cambiar este sistema de búsqueda de DAO:
Set rs=db.openrecordset("Clientes",dbopentable)
rs.index="numero"
rs.seek ">", Text1
if rs.nomatch then
msgbox "NO encontrado"
else
msgbox "Encontrado"
Endif
Rs. Close
--------------------------------------
Ahora me interesa cambiar a ADO y no se como hacerlo en SQL o como haya que hacerlo.
Desde ya.

1 Respuesta

Respuesta
1
Dim iCx As ADODB.Connection
Dim sSQL As String
Dim rs As ADODB.Recordset
sSQL = "SELECT numero FROM Clientes WHERE numero >" & text1.Text
Set rs = New ADODB.Recordset
rs.Open sSQL, iCx, adOpenForwardOnly, adLockReadOnly
If Not (rs.EOF And rs.BOF) Then
MsgBox "Encontrado"
Else
MsgBox "No Encontrado"
End If
'Ojo que no te anda si no efectuas la apertura del objeto connection o sea no le asignas un string de conexion y ejecutas el open.
Muchas gracias aromman.
Pero falta algún detalle.
Por ej. el indice.
1. Al hacerlo de esta manera, no me salen ordenados.
2. El recordset se carga desde el resultado de la búsqueda hasta el final de la tabla.
La idea es hacer un movenext y moveprevious, pero en tiempo real y que solo se cargue el registro en cuestión.
Con el seek ya lo hacia, pero ahora con ado, se be que no quiere oír ni hablar del seek.
Si tienes alguna idea más, te lo agradecería.
Gracias por contestar.
En principio para que te salgan en orden a la variable sSQL agregale al final el siguiente literal " ORDER BY " & campo1 & ", " & campo2
Donde Campo1, Campo2 son los campos que determinan el orden, ojo que tienen que estar separados por comas.
Y si no me equivoco el Seek te traía el que cumplía la condición o el inmediato posterior, si la idea es que traiga de esta colección solo el primero que cumple con el WHERE coloca luego del SELECT la palabra TOP 1 donde 1 es la cantidad de registros que quieres devolver.
O sea que el sql final te va a quedar más o menos así
sSQL = "SELECT TOP 1 numero FROM Clientes WHERE numero >" & text1.Text & " ORDER BY numero"
Hola de nuevo.
Ya había probado esta sentencia sql, pero tampoco es del todo correcta.
Ya que el orden que genera esta instrucción, hace un indice pero de los datos ya capturados a través de la consulta pero realmente la tabla está desordenada y la lectura la hace tal cual.
También cuando la consulta es "<" inferior, va al primer registro y no al anterior.
Perdona que sea critico, pero es que me parece que ya he probado de todo y no hay manera.
Gracias por tu tiempo y paciencia.
Olvide que el TOP primero toma la cantidad de registros que necesitas y luego los ordena, sacale el TOP y pruébalo.
De todas maneras según me has escrito lo que quieres evaluar es si según el indice "numero" el comando Seek te trae algo, si lo trae mostrar un mensaje y caso contrario mostrar un mensaje de error.
Lo que necesitaría para mayor detalle es que me describas al indice "numero", pero se me ocurre una fácil.
sSQL = "SELECT COUNT(NUMERO) AS CANTIDAD FROM CLIENTES WHERE
NUMERO > " & text1.Text & " ORDER BY numero"
Set rs = New ADODB.Recordset
rs.Open sSQL, iCx, adOpenForwardOnly, adLockReadOnly
If Not (rs.EOF And rs.BOF) Then
if rs!CANTIDAD > 0 then
MsgBox "Encontrado"
else
MsgBox "No Encontrado"
end if
Else
MsgBox "No Encontrado"
End If
Si el resultado es el que no deseas quedo a la espera de la descripción del indice, ya que de esa forma solucionaremos el problema.
En cuanto a lo que decís que trataste todo y no se puede, te puedo decir que ADO es una herramienta mucho más potente que DAO y ademas si has utilizado DAO con seek y nomatch en realidad no has utilizado el verdadero potencial de DAO. Si bien SQL puede ser enroscado es mucho más potente que sentencias propias del DBEngine.
Saludos y Hablamos para resolver tu problema.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas