Visual Basic - Problemas con Busqueda SQL

Life is soft - evento anual de software empresarial
 
Vista:

Problemas con Busqueda SQL

Publicado por XcUiDi (30 intervenciones) el 28/05/2002 06:16:11
Bien, mi pregunta es la siguiente, espero no los llegue a sorprender, es una tarea fácil, pero no se porque me salé un error...

En mi base de datos MDB (mibase.mdb) tengo varias tablas, entre ellas: "tMaterias", "tPreguntas", etc... tPreguntas cuenta con los siguientes campos, por ejemplo: "ID" Tipo Entero, "clvMateria" Tipo Cadena y "Unidad" Tipo Entero

El hecho es que, yo los utilizo de la siguiente manera, con Adodc, ya que me parecío mas sencillo...

Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & App.Path & "\mibase.mdb"
Adodc1.CursorType = adOpenDynamic
Adodc1.RecordSource = "tPreguntas"
Adodc1.Refresh
-----------

Bien, pero a la hora de querer encontrar la primera incidencia de la clave clvMaterias = "abc0000001" y la Unidad = 1 lo trate de hacer así:
Campo1="clvMateria" 'lo asigne mediante parametro en una funcion de busqueda
Dato1="abc0000001" 'tambien lo asigne mediante parametro
Campo2="Unidad" 'asignado mediante parametro
Dato2="1" 'igualmente mediante parametro

Criterio = Campo1 & " Like '" & Dato1 & "' And " & Dato2 & " Like '" & Criterio2 & "'"

Continua, en el otro mensaje, porque no me permite mas de ??? caracteres.....
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Continuacion...

Publicado por XcUiDi (30 intervenciones) el 28/05/2002 06:26:18
Viene del anterior mensaje.....

El caso es que la cadena Criterio queda compuesta de la siguiente manera para su ejecución: "clvMateria Like 'abc0000001' And Unidad Like '1'"

Y la busqueda la hago de la siguiente manera:

Adodc1.Recordset.MoveFirst 'Movel al primer registro
Adodc1.Recordset.Find Criterio 'Aquí comienza la busqueda

If Not Adodc1.Recordset.EOF Then 'Si no llegó a Fin de Archivo, entonces lo encontró
Buscar = True 'Devolver valor encontrado
Else
Buscar = False 'Devolver valor no encontrado
End if
...

Pero al momento de ejecutarlo, al llegar a Adodc1.Recordset.Find Criterio , me marca este error:
_____________________________________________________
| Error '3001' en tiempo de ejecución:
|
| Argumentos incorrectos, fuera del intervalo permitido o en conflicto
| con otros.
-----------------------------------------------------

Y este error no debe suceder, digo yo, porque los dos campos son de la misma tabla, incluso cambie el Criterio para que localizara 1 en lugar de '1' en el campo Unidad, porque como es un campo numerico el de Unidad, pos queda así:

Criterio = Campo1 & " Like '" & Dato1 & "' And " & Dato2 & " Like " & Criterio2
"clvMateria Like 'abc0000001' And Unidad Like 1"

Sigue Continuación .... :S :S :S porque no me permite más caracteres
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Otra Continuacion...

Publicado por XcUiDi (30 intervenciones) el 28/05/2002 06:33:09
Viene del anterior mensaje, jojojojoj que estrictos son los de la Web del programador.....

Pero de igual manera me marca el mismo error, entonces quiere decir que al momento de colocar las dos expresiones Like y el And son los que provocan este error, ya que si hago una consulta sencilla de un solo campo:

Criterio = Campo1 & " Like '" & Dato1 & "'"
"clvMateria Like 'abc0000001'"

esa si me consigue localizar el registro con esa clave.

Entonces quisiera por favor me apoyaran en este problema :D ya que yo igual soy principiante en la programación de Bases de Datos con Visual Basic y mucho mas con consultas SQL. :D y necesito hacer consultas de varios campos a la vez, incluso si se puede, hacer consultas comparando campos de una tabla con campos de otra tabla :D :D

Anticipando las Gracias, quedo de ustedes, totalmente agradecido:
-)<XcUiDi>(-
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

por que usas LIKE?

Publicado por Josep (60 intervenciones) el 28/05/2002 09:46:14
Hola, no creo que te sirva de mucha ayuda, pero por que usas like? si quieres encontrar las coincidencias deberias usar como criterio criterio="campo_numerico1=" & valor_numerico1 & " and campo_texto1= ' " & valor_texto1 & " ' "
De todas formas, esto también lo puedes hacer con DAO, indexando la tabla por los campos que desees buscar i con la instrucción seek...
siento no serte de más ayuda...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:Otra Continuacion...

Publicado por Iñaki (502 intervenciones) el 28/05/2002 10:32:48
En principio parece que la sintaxis que utilizas está bién, pero no estaría de más que sacaras un mensaje con el MSGBOX ( solo a modo de prueba) el contenido del "CRITERIO". Otro detalle son los campos a buscar, puede que no coincidan totalmente (espacios en blanco ,,...) de modo que puedes añadir el caracter " * " a el campo a buscar, por ejemplo :
"clvMateria Like 'abc0000001*'" , en este caso al final de la cadena, pero puedes ponerlo al principio y al final.
También puedes hacer la consulta con intrucciones SQL, aunque esta opcion esta más bien enfocada cuando tienes que buscar varios registros que cumplen una condicion.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No se precupen, ya lo obtuve.

Publicado por XcUiDi (30 intervenciones) el 29/05/2002 06:20:56
Bien, pos a uds dos, amigos, muchas gracias por el apoyo, pero para el primer amigo, Si utilizo solamente el signo igual (=) en lugar de "Like" me sigue marcando el mismo error, de hecho, Like si me funciona bien cuando se trata de un solo campo y un solo criterio por ejemplo "clvMaterias Like 'abc0000001'" <-- si funciona.

Bien para el otro amigo, pues el programa lo checo paso a paso con lineas de Interrupcion (y con F8 para paso a paso), incluso agrego la cadena Criterio a mi Lista de Inspeccion y es por eso que checo que pasa con esa variable :D.

Pero no se preocupen, la programación no es rígida y por lo tanto ya cree una manera quizá mas laboriosa (pero ni tanto) pero que me efectua lo que deseo :D

Lo que hice fué, en el ciclo de 1 hasta RecordCount localice todas las incidencias del campo clvMateria, y cada incidencia la iba comparando en el otro campo por ejemplo:

(Continua en otro mensaje...)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Continuación..

Publicado por XcUiDi (30 intervenciones) el 29/05/2002 06:30:49
(Continuación...)

For I = 1 To Adodc1.Recordset.RecordCount
If BuscarRegistroP("clvMat", Text1(2).Text) Then
'Aquí lo encontro, ahora comprobar si es la unidad buscada
If Adodc4.Recordset.Fields.Item(2).Value = Int(cmbUnidad.Text) Then
'Si es la unidad buscada aumentar el numero de Preguntas de la unidad
PU = PU + 1
End If
End If
If Not Adodc4.Recordset.EOF Then
'Si no ha llegado a EOF, buscar si el siguiente registro contiene la clave
Adodc4.Recordset.MoveNext
End If
Next I

Pues así lo hice, y me funcionó a la perfección :D. Muchas gracias por los amigos que me dieron las sugerencias :D.

Con esto demuestro que me gusta mucho la Programación :D

Hasta pronto, y cualquier cosa, me echan un grito! :D [email protected]

-=)XcUiDi(=-
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar