Ayuda abrir un recordset ADO

Orlando
07 de Mayo del 2004
Tengo problemas en mi aplicacion VB.
Uso ACCESS 2000 y ADO.
A veces ocurre que al crear un recordset con una sentencia "SELECT" ,si tarda en crearlo, VB sigue con las siguientes instrucciones y tengo errores .
Mi consulta es buscar la manera de comprobar en la siguiente linea de código que me haya finalizado de cargar el recordset.
Seria válido o posible hacer un bucle con ?:
rs.open "SELECT .....
do while rs.state<>adStateOpen
enddo
Respecto a esta opcion me preocupa dos cosas:
cómo se si la propiedad "state" me esta dando un valor a tiempo real, y la otra es que se meta en un
bucle y se cuelgue el programa.
Por favor admito cualquier idea . Estoy bloqueado con
este tema.
Gracias de antemano

Yuval
07 de Mayo del 2004
Hola orlando!!!
No me entero muy bien lo que quieres hacer lo que veo en ese codigo que nunca va salir de el ya que nunca abres el recorset:
do while rs.state<>adStateOpen <----No puedes preguntar que mientras no este abierto no salga si nunca lo abres.
enddo
Para abrirlo tienes la sentencia rs.open
No entiendo por que tienes esa parte de codigo esplicate mejor asi podriamos ayudarte suerte!!!!

Orlando
07 de Mayo del 2004
Hola, gracias por responder. Si te fijas en la linea que
está antes del "Do While" yo hago el open del recordset. Lo que me esta ocurriendo es que el
programa va mas rapido que el proceso de carga del
recordset. Cuando hago el open, y mientras el
motor Jet de ACCCESS me esta llenando el recordset, el programa no espera, sino que sigue la ejecucion de las siguientes lineas, y si es por ejemplo una pregunta del tipo "if rs.recordcount > 0" me da error porque dice que el objeto (recordset) esta cerrado.
Dicho de otra forma, ¿Como puedo estar seguro de
que el recordset ya está abierto antes de seguir con
las siguientes lineas de código..?
¿Alguien me podria decir u orientarme como funciona
internamente el recordset ADO y de que forma se
comunica con el motor Jet de ACCESS? Porque lo que
yo creo es que al hacer un "open" de un recordet, internamente se produce una llamada al motor Jet para que me busque los registros de la tabla y los
pase al recordset. ¿o no es así?.
Si falta mas aclaración, me lo indicas. Gracias.

mariona
07 de Mayo del 2004
Si lo que quieres es saber si se carga el recordset,saca un msgbox con un campo del mismo que hayas incluido en la select.Es una chorrada esto que te digo,pero la programacion suele ser todo trampas.Oye,en el open del recordset ya ejecutas la select?Y como te conectas con la base de datos?Supongo que con un DSN no?Respondeme si no me entiendes algo

Orlando
07 de Mayo del 2004
Hola Mariona, gracias por responder.
Para abrir un recordset ADO, lo que hago es:
1)Abro una conexion ADO a la BD que tiene la tabla que me interesa
2)Abro el recordset ADO .
Yo abro el recordset con la instruccion:
rs.open "SELECT * FROM Tabla", conexion,adOpenStatic (o adOpenKeySet), adLockOptimistic...etc...

es decir, una forma de abrirlo como otra cualquiera
creo!?.
Respecto a mostrar en un textbox algún campo del
recordset es una idea válida,pero, lo que quiero es
asegurarme que ya se ha cargado el recordset antes
de mostrar cualquier campo, porque si no me daría error no!?.
Estas instrucciones las tengo en un monton de formularios de mi aplicación, y los errores me ocurren a veces y no en el mismo formulario.
¿Que errores?, aparentemente el programa ejecuta
la instrucción de "open" del recordset, y pasa a la
siguiente linea de ejecucion sin "preocuparse" si
el recordset todavia se está creando. Al menos eso
es lo que creo, porque da errores de objeto cerrado.

Por favor si tienes alguna duda o no me explico bien
me lo dices, es que estoy bloqueado con este problema. Parece que no es muy comun, porque por mucho que leo en foros de VB, solo he visto uno
que ponia algo parecido, pero bueno tengo que seguir
hasta buscar la manera de solucionarlo.

Gracias otra vez, me consuela saber que hay gente
como tu, interesadas en ayudar

Yuval
07 de Mayo del 2004
Hola orlando!!!
Podrias probar abrir la base de esta forma alomejor solucionas el problema yo siempre lo hagoa si y nunca he tenido problemas:

DIM CN AS NEW ADODB.CONNECTION
DIM RS NEW ADODB.RECORSET


cn.open= "dsn=..."
rs.cursortype=...
rs.locktype=...
RS.SOURCE= "select......." <-----
RS.ACIVECONECTION=CN
RS.OPEN <---

Espero que te ayude en algo SUERTE!!!!

Orlando
07 de Mayo del 2004
A ver, yo no tengo problemas con las instrucciones
de apertura del recordset. Si estuvieran mal, nunca
me abriría el recordset.
El problema que tengo es que "a veces" se abre
con "cierto retardo" , pero el programa continua con las siguientes instrucciones independientemente de
si todavia no se ha abierto del todo el recordset.
Cuando se ejecuta una instruccion "open" de recordset en ACCESS, internamente VB llama al motor Jet , que es quien se encarga de devolverle
los registros que pide., si VB no espera respuesta
del Jet indicando que ya le ha enviado los registros
el resultado es que puede dar error si alguna instruccion hace referencia al recordset.
Al menos eso es lo que yo supongo como funciona
internamente.
En mi ordenador nunca tengo problemas de este tipo
pero cuando se esta ejecutando el programa en un
entorno multiusuario, con 15 o 20 usuarios trabajando
con él, creo que los tiempos de respuesta del Jet se hacen criticos.
Saludos y gracias. Son las 11:00 de la mañana y estoy
atento al Foro.

críticos

Yuval
07 de Mayo del 2004
Siento no poder responder nada mas. espero que alguien pueda ayudarte, Asi me entero yo tambien. Ciaoo

mariona
07 de Mayo del 2004
Mira un ejemplo de como yo me conecto a la base de datos y ejecuto el recordset:

Dim conexion As ADODB.Connection
Dim record As ADODB.Recordset
Dim SQL

Set conexion = New ADODB.Connection

conexion.Open "DSN=conexion_nwind"

SQL = "Select * from Empleados where Ciudad='Londres'"

Set record = conexion.Execute(SQL)

La dsn es una que yo tengo por aqui,ademas,hay varias maneras de conectarse,es decir,se pueden ahorrar pasos.Mira,estoy fuera de casa,mañana si puedo te paso ejemplos que yo tengo,pero ojala podamos solucionarlo hoy.Chao Orlando