Se crea un cursor cuando la consulta no obtiene resultados?

150 views
Skip to first unread message

Ultraton500

unread,
Jan 21, 2014, 10:46:14 AM1/21/14
to publice...@googlegroups.com
Buenas tardes colegas, tengo una duda que quisiera despejar.
Si una consulta sql que guarda su resultado en un cursor no obtiene ningún registro, se crea el cursor o no?
Claro que hice la prueba y vi que crea un cursor vacío, pero tengo un vago recuerdo de haber obtenido el error de no existencia de un cursor porque la consulta que lo creaba no obtenía resultados.
Quiero sacarme la duda para ver si evito la línea

IF USED("Cursor1")

De antemano muchas gracias.
Saludos,
Javier.

Arnaldo Toledano

unread,
Jan 21, 2014, 10:55:21 AM1/21/14
to publice...@googlegroups.com, arnaldo....@gmail.com
Si no hay error en la consulta
    Se crea el cursor sin datos.

Hace esta prueba
If Sqlexec(tuconexion,"select tabla1 where 1=2", "Tu_Cursor")< 0
      ...
Else
     Brow
Endif

Veras el cursor sin datos


Arnaldo Toledano
--
Arnaldo Toledano Tesys Informática Córdoba Argentina

Ultraton500

unread,
Jan 21, 2014, 11:10:54 AM1/21/14
to publice...@googlegroups.com, arnaldo....@gmail.com
Así es Arnaldo, el cursor se crea sin datos.
Gracias por la prueba.

Saludos,
Javier.

HernanCano

unread,
Jan 21, 2014, 3:13:54 PM1/21/14
to publice...@googlegroups.com, arnaldo....@gmail.com
 Amigo ultraton:

Mi recomendación es verificar por ambas posibilidades, es decir:

If SqlExec(tuconexion,"select TABLA1 where CAMPO1=Valor", "UnCursor")<0
   MessageBox("No se pudo ejecutar")
else
     if used("UNCURSOR") and reccount("UNCURSOR")>0
          MessageBox("Sí hay datos y vamos a verlos....")
          select UNCURSOR
          browse nomodify
     endif
endif

Claudio Luna

unread,
Jan 21, 2014, 4:36:11 PM1/21/14
to Comunidad de Visual Foxpro en Español
En VFP9 tenes la nueva capacidad del sqlexec siguiente:
local array tnAcuantos[2]



2014/1/21 HernanCano <jherna...@gmail.com>



--
Claudio Luna
Monttevideo - Uruguay
SKYPE: clunamarin
Cel. 099 194 770

Claudio Luna

unread,
Jan 21, 2014, 4:40:44 PM1/21/14
to Comunidad de Visual Foxpro en Español
Perdón el mensaje anterior quedó incompleto:
lnResultado = SQLExec(.connhandle, lcComando,lcNomCursor,tnAcuantos)
en El array tncuantos tenes el nro. de registros que devolvio la consulta
thisform.lblresultado.Caption = "Se Encontraron "+Transform(tnAcuantos[2],"999999")
Saludos

Ultraton500

unread,
Jan 22, 2014, 12:40:22 AM1/22/14
to publice...@googlegroups.com, arnaldo....@gmail.com
Hola Hernan, gracias por la recomendación.
Automáticamente se me viene a la mente preguntarte cuál podría ser la razón para que no se cumpla la condición used("UNCURSOR") si la consulta se ejecuta con éxito.

Saludos,
Javier

Ultraton500

unread,
Jan 22, 2014, 12:48:12 AM1/22/14
to publice...@googlegroups.com
Qué tal Claudio, gracias por el dato, no conocía este parámetro.
Me pareció muy útil así que lo voy a tener en cuenta.

Saludos,
Javier.

HernanCano

unread,
Jan 22, 2014, 7:20:13 PM1/22/14
to publice...@googlegroups.com, arnaldo....@gmail.com
Tu pregunta original era de completa duda.
Ya te respondieron que "si la consulta está bien construida, se genera un cursor vacío".

Sólo estoy llegando a un extremo donde por ejm no haya conex física y no se genere el cursor; en este caso no se genera el cursor (¿otra forma de manejar un evento de error?).

Dicho de otra forma: si used("UNCURSOR") falla, es por la conexión al motor (física o lógica), mas no por "invalidez de la sintaxis". 

Lamento desviarte de tu pensamiento lógico. Perdón... disculpa...

Fernando D. Bozzo

unread,
Jan 22, 2014, 7:32:25 PM1/22/14
to publice...@googlegroups.com, arnaldo....@gmail.com
Hola Javier:

La razón podría ser que no devuelva resultados, por ejemplo consultando un dato que no cumple la condición indicada. Existen datos en la tabla, pero ningún resultado coincide con la condición, entonces no hay resultados. La consulta es un éxito desde la perspectiva de que no falla.

Te recomiendo leer detenidamente en la ayuda la función que estás usando, SQLEXEC(), ya que tiene un parámetro muy útil: aCountInfo


Saludos.-

Ultraton500

unread,
Jan 22, 2014, 8:08:41 PM1/22/14
to publice...@googlegroups.com, arnaldo....@gmail.com
Hola Hernan, ahora entiendo y veo por qué la necesidad de un IF USED(.... 
Y no te lamentes por desviarme de mi pensamiento lógico porque para mi es bienvenido.
Gracias por la explicación.

Saludos,
Javier.

Ultraton500

unread,
Jan 22, 2014, 8:45:13 PM1/22/14
to publice...@googlegroups.com, arnaldo....@gmail.com
Fernando, cómo estás!.....
Según las pruebas, si la consulta no devuelve resultados el cursor, aunque vacío, se crea de todas formas y por lo tanto la condición IF used("UNCURSOR") se cumple.
He leído ya la ayuda con respecto al parámetro aCountInfo por recomendación de Claudio Luna y si... resulta de mucha utilidad.
Gracias por la recomendación.

Saludos,
Javier.

Fernando D. Bozzo

unread,
Jan 22, 2014, 8:49:13 PM1/22/14
to publice...@googlegroups.com, arnaldo....@gmail.com
Por eso aCountInfo es lo que necesitás, ya que el array que genera no solo te dice cuántos registros retorna, sino también te dice si creó un cursor y con qué nombre, o incluso si ocurrió un error.

Ultraton500

unread,
Jan 22, 2014, 9:21:31 PM1/22/14
to publice...@googlegroups.com, arnaldo....@gmail.com
Ok Fernando, gracias nuevamente por tu colaboración.

Saludos cordiales,
Javier.
Reply all
Reply to author
Forward
0 new messages