Desbloquear cursor de ALTER TABLE

120 views
Skip to first unread message

Zarlu

unread,
Apr 19, 2021, 3:28:32 PM4/19/21
to Comunidad de Visual Foxpro en Español
Estimados foxeros

Éste código me marca error al querer volver a crear el cursor :
Select .f. as marca, * From verage Where 1=3 InTo Cursor xxxx readwrite
ALTER TABLE xxxx Drop COLUMN marca&&elimina campo marca
Select .f. as marca, * From verage Where 1=3 InTo Cursor xxxx readwrite

Noto que que es un problema de bloqueo de ALTER TABLE
Ya use UNLOCK sin éxito
Y no puedo cerrar el cursor xxxx porque requiero la información

Por ahora lo solucioné asi:
IF !USED("sqlage")
    Select .f. as marca, * From verage Where 1=3 InTo Cursor sqlage readwrite
    =CursorSetProp("Buffering", 5, "sqlage")   
ELSE
    DELETE ALL IN sqlage   
ENDIF



Gracias por su ayuda
zarlu
Chetumal, Quintana Roo, México

Message has been deleted

jorgeg...@gmail.com

unread,
Apr 19, 2021, 5:25:05 PM4/19/21
to Comunidad de Visual Foxpro en Español
Fijate que en una tabla dbf si puedes agregar campos y eliminarlos, pero abriendola en forma exclusiva.
Cuando creas un cursor que no es mas que un dbf,  el nombre que le pones xxxx es un alias, para saber su nombre verdadero debes usar dbf("xxxx") y te dira la ruta y el nombre con que fue creado.
Al hacer un select into cursor este crea un cursor en el directorio donde tienes direccionado los temporrales y le pone un numero aleatorio 
ejemplo: 
C:\USERS\JORGAL~1\APPDATA\LOCAL\TEMP\00002H3D00H4.TMP y este lo abre en forma shared (compartida) por esi te dice "file is in use".

la solucion es la que pusiste tu :
Select .f. as marca, * From verage Where 1=3 InTo Cursor sqlage readwrite
al hacer el select estas creando el cursor y adicionado el campo que necesitas.

Saludos.
JorGalvan

El lunes, 19 de abril de 2021 a la(s) 17:19:54 UTC-4, jorgeg...@gmail.com escribió:
Fijate que que en una tabla dbf si puedes agregar campos y eliminarlos pero abriendola en forma exclusiva.
Cuando creas un cursor que no es mas que un dbf el nombre que le pones xxxx es un alias para saber su nombre verdadero debes usar dbf("xxxx") y te dira la ruta y el nombre con que fue creado.
Al hacer un select into cursor este crea un cursor en el directorio donde tienes direccionado los temporrales y le pone un numero aleatorio 
ejemplo: 
C:\USERS\JORGAL~1\APPDATA\LOCAL\TEMP\00002H3D00H4.TMP y este lo abra en forma shared (compartida) por esi te dice "file is in use".

la solucion es la que pusiste tu :
Select .f. as marca, * From verage Where 1=3 InTo Cursor sqlage readwrite
al hacer el select estas creando el cursor y adicionado el campo que necesitas.

Saludos.
JorGalvan

Zarlu

unread,
Apr 19, 2021, 5:42:26 PM4/19/21
to Comunidad de Visual Foxpro en Español
Buenas tardes Jorge!

Realmente lo que requiero es quitar un campo....y luego volverlo a agregar.
Si no se altera el cursor no hay problema de volver a crearlo con el mismo nombre.
Pero ese bloqueo al usar ALTER TABLE no me lo permite

Gracias por la respuesta

zarlu
Chetumal, Quintana Roo, México


Ricardo Soldini

unread,
Apr 19, 2021, 6:10:17 PM4/19/21
to Comunidad de Visual Foxpro en Español
Zarlu ¿Para que quieres quitar un campo de un cursor? con volver a crear el cursor sin el campo ya esta.
Por Otra parte fijate que cada vez que ejecutas la sentencia select .. into CUrsor Readwrite tendras los campos que incluiste, si no quieres uno no lo incluyes y luego si lo necesitas lo vuelves a incluir con una nueva llamada o select

jorgeg...@gmail.com

unread,
Apr 19, 2021, 6:17:25 PM4/19/21
to Comunidad de Visual Foxpro en Español
Zarlu en este link tu intervienes y alli dice que lo resolvio : 

Si haces esto
Select .f. as marca, * From verage Where 1=3 InTo Table xxxx readwrite

ALTER TABLE xxxx Drop COLUMN marca&&elimina campo marca

Si te funciona ya que va a crear la tabla con el nombre xxxx y la abre en forma exclusiva y puedes elimianar el campo y volver a crearlo

Zarlu

unread,
Apr 20, 2021, 10:18:13 AM4/20/21
to Comunidad de Visual Foxpro en Español
Buenos días foxeros!

ricardosoldini: Zarlu ¿Para que quieres quitar un campo de un cursor? con volver a crear el cursor sin el campo ya esta.
Requiero quitarlo para que coincidan los campos al hacer un INSERT INTO ...SELECT

jorgegalvanp: Zarlu en este link tu intervienes y alli dice que lo resolvió : 
Era otro escenario, se aplico a una tabla en un contenedor. Se cerraba y sin problemas
No se requería regenerar un cursor como en mi caso.

El problema es al querer regenerar el cursor (mismo nombre). Después del ALTER TABLE no lo permite
Entonces lo solucioné validando. Si existe el alias borra registros, si no existe lo crea.
Otra solución sería cerrar el cursor

Gracias a ambos por su interés y apoyo

zarlu
Chetumal, Quintana Roo, México
Reply all
Reply to author
Forward
0 new messages