Visualizar los cambios al modificar un registro

411 views
Skip to first unread message

integral

unread,
Apr 15, 2024, 3:34:42 PM4/15/24
to Comunidad de Visual Foxpro en Español
Que tal Amigos :

He creado un formulario que esta enlazado a una tabla en Sql Server 2019

Cuando modifico un registro no me visualiza los cambios efectuados de forma instantánea.

Pero si cierro el formulario y vuelvo a ingresar, si aparecen los cambios realizados en el registro.

Como hago para que los cambios se reflejen en el formulario de VFP que esta enlazado directamente a mi base de datos. ( dbo.perecible )

Agradezco sus comentarios y sugerencias.

Saludos,

Integral

RS “Ricardo de Stgo”

unread,
Apr 15, 2024, 5:03:27 PM4/15/24
to Comunidad de Visual Foxpro en Español
Hola Yo hago lo siguiente
Los Datos de la tabla en SQL yo los Traigo a un Cursor Actualizable (Uso Vfp 9) dependiendo de lo que el usuario necesita puede trae un grupo d eregistros , un solo registro, etc (no traigo mas toda la tabla porque si pones el server en la nube es muy ineficiente)  y eso lo realizo en un metodo del form.
 luego de que se agregue un nuevo registro y ejecutado  el Update / Insert que corresponda en la BD SQL vuelvo a invocar al metodo que trae el o los registros que se necesita visualizar

Y nunca uso la tabla enlazada (no lo hacia en dbf nativo, menos ahora que uso el motor BD Sql)   

integral

unread,
Apr 16, 2024, 12:50:46 AM4/16/24
to Comunidad de Visual Foxpro en Español
Que tal Sr. Ricardo

Le agradezco desde ya por sus comentarios y sugerencias.

Estoy utilizando la conexión directa. Aquí muestro el código.

SQLEXEC(cn, 'SELECT * FROM dbo.Perecible ORDER BY Registro', 'Cursor_Total_Perecible')
SELECT Cursor_Total_Perecible            
GO BOTTOM

IF RECCOUNT() > 0
     Thisform.Quita_Null()      
ELSE
     MESSAGEBOX(' La Base de Datos. Esta Vacia o No existe ! ' ,0+16,' Atención !')  
     RETURN .F.  
ENDIF

En la imagen muestro como esta enlazado cada campo a una variable de memoria.

Campo_Enlazado.jpg

Cada vez que modifico un registro tengo que salir del formulario y volver a llamar al formulario para visualizar los cambios realizados en el registro.

Podría usted mediante un ejemplo quizás como lo viene realizando...

Gracias nuevamente.

Saludos,

Integral

RS “Ricardo de Stgo”

unread,
Apr 17, 2024, 6:58:12 PM4/17/24
to Comunidad de Visual Foxpro en Español
Prueba a poner despues de 

SQLEXEC(cn, 'SELECT * FROM dbo.Perecible ORDER BY Registro', 'Cursor_Total_Perecible')
SELECT Cursor_Total_Perecible    
Select Cursor_Total_Perecible
y asignas a cada variable enlazada a los controles 
m.desc_gene = cursor_total_perecible.desc_gene
m.tusotrasvariable = cursor_total_perecible.lavariableasociada
thisform.refresh()

integral

unread,
Apr 19, 2024, 12:53:25 AM4/19/24
to Comunidad de Visual Foxpro en Español
Buenas Tardes

Efectivamente hice la prueba cambiando al Cursor y funciona correctamente. Y coincide además con su sugerencia.

Desde que migre desde Sql Server 2008r2 a Sql Server 2019 lo estaba haciendo de otra forma creando un cursor secundario y también funcionaba
perfectamente.

Pero esta vez al crear este nuevo formulario me aparecía el siguiente error :

 ERROR_CURSOR.jpg
Como no encontraba la solución y buscando información decidí utilizar el Cursor creado directamente al inicio de la conexión.

Ahora cual seria la solución para poder corregir este error...

Agradezco sus comentarios y sugerencias.

Saludos,

Integral

HernanCano

unread,
Apr 19, 2024, 4:23:09 PM4/19/24
to Comunidad de Visual Foxpro en Español
PARA REFRESCAR LOS DATOS (mostarlos luego de algún cambio):

En el momento q ejecutas el SQLEXEC, no lo haces hacia el cursor "principal": lo haces hacia un cursor temporal....
Y el escenario completo puede ser así:

**

SQLEXEC(cn, 'SELECT * FROM dbo.Perecible ORDER BY Registro', 'crsTemporal')

** luego ejecutas una de las dos instrucciones sgtes
** para dejar vacío el cursor principal
zap in Cursor_Total_Perecible
** delete all in Cursor_Total_Perecible

SELECT Cursor_Total_Perecible
append from dbf('crsTemporal')

**

EN EL LOAD DEL FORMULARIO:
Pero veo que tu problema está en el Load de tu formulario.
Ahí no puedes ejecutar "SELECT CURSOR" porq el cursor todavía no ha sido creado.

Como siempre: debes mostar lo que estás haciendo en el Load, porq está incorrecto.

integral

unread,
Apr 19, 2024, 6:37:55 PM4/19/24
to Comunidad de Visual Foxpro en Español
Buenas tardes

gracias por tus comentarios.

Consulta. Donde es decir en que evento se debe realizar la codificación de la creación de la conexión con el cursor Principal.

Agradezco nuevamente tus comentarios y sugerencias.

Saludos,

Integral   

integral

unread,
Apr 23, 2024, 12:21:38 PM4/23/24
to Comunidad de Visual Foxpro en Español
Buenos Días Amigos 

Ahora que tengo el formulario enlazado cada control al cursor principal que obtengo del sql server.

Como le hago para que al momento de crear un nuevo registro aparezcan en blanco cada control en el formulario

Estaba utilizando variables de memoria en cada control y utilizaba el siguiente comando

SCATTER MEMVAR

Cuando creaba un nuevo registro.

Probé con el Append Blank pero me aparece ahora como ultimo registro un registro en blanco.

Algún colega que me oriente con alguna solución

Agradezco sus comentarios y sugerencias.

saludos,

Integral

Zarlu

unread,
Apr 23, 2024, 2:22:15 PM4/23/24
to Comunidad de Visual Foxpro en Español
Buenos días Integral!

Mencionas:
"Como le hago para que al momento de crear un nuevo registro aparezcan en blanco cada control en el formulario"
...
"Probé con el Append Blank pero me aparece ahora como ultimo registro un registro en blanco."

Si tienes un registro en blanco y tienes enlazados los text a los campos entonces los tendrás en blanco también. Quizá sólo falte refrescarlos.
Sino quieres el registro en blanco entonces deberás desenlazar los controles y limpiar su "Value" y crear el registro hasta que lo vayas a guardar y almacenarle los valores de esos controles

Suerte
zarlu
Chetumal, Quintana Roo, México

integral

unread,
Apr 23, 2024, 2:57:05 PM4/23/24
to Comunidad de Visual Foxpro en Español
Que tal amigo Zarlu

Buscando información encontré el siguiente ejemplo .

CREATE TABLE oTest FREE ;
(Object C(10), Color C(16), SqFt n(6,2))

SCATTER NAME oTest BLANK
oTest.Object="Box"
oTest.Color="Red"
oTest.SqFt=12.5

APPEND BLANK
GATHER NAME oTest
RELEASE oTest
BROWSE

***

INSERT INTO myTable FROM MEMVAR  

Pienso hacer una prueba a ver como funcionan.

atte.,

integral

integral

unread,
Apr 29, 2024, 12:39:24 AM4/29/24
to Comunidad de Visual Foxpro en Español
Que tal amigo Zarlu :

Venia aplicando una forma diferente de grabar y adicionar y funcionaba perfectamente.

Pero en este formulario no me aceptaba la misma rutina y me marcaba error. EL ALIAS NO EXISTE o algo parecido decía el mensaje...

 Entonces aplique el consejo del Sr. Ricardo.

*****************************************************
* ACTIVAR LAS BASES DE DATOS EN SQL SERVER *
*****************************************************
SQLEXEC(cn, 'SELECT * FROM dbo.Perecible ORDER BY Registro', 'Cursor_Total_Perecible')
SELECT Cursor_Total_Perecible            

  IF RECCOUNT() > 0
     Thisform.Carga_Memvar()    
     Thisform.Quita_Null()      
  ELSE
     MESSAGEBOX(' La Base de Datos. Esta Vacía o No existe ! ' ,0+16,' Atención !')  
     RETURN .F.  
  ENDIF

Pero luego de Grabar un nuevo registro o modificar algún campo de un registro ya existente no aparece los cambios realizados.

Debo cerrar el formulario y volver a ingresar y ahí si aparece los cambios y nuevo registro ingresado.

Es correcto que nuevamente tenga que llamar al Cursor principal 

Agradezco tus comentarios y sugerencias.

Saludos

Integral

Zarlu

unread,
Apr 29, 2024, 9:48:32 PM4/29/24
to Comunidad de Visual Foxpro en Español
Buenas noches Integral!

A ver si he entendido bien la situación....

Para que la información que se crea/modifica/elimina de una tabla (motor o tabla de vfp) se muestre actualizada en un cursor es necesario volver a generar la consulta y cargar y refrescar el grid, en su caso.
Salvo que se trabaje en el cursor (ReadWrite) y entonces seguidamente se hagan los cambios en la tabla.

Cuando cierras y abres el formulario estás actualizando el cursor

Suerte
zarlu
Chetumal, Quintana Roo, México

integral

unread,
Apr 30, 2024, 12:28:59 AM4/30/24
to Comunidad de Visual Foxpro en Español
Que tal Amigo Zarlu :

Si no es mucho pedirte. Podrías ilustrarme con un breve código de ejemplo lo que mencionas.

Y asi comparar con lo realizado hasta ahora.

Saludos,

Integral

VALIDACION.jpg

Message has been deleted
Message has been deleted

Zarlu

unread,
Apr 30, 2024, 9:53:48 PM4/30/24
to Comunidad de Visual Foxpro en Español
Buenas noches Integral!

Te paso un ejemplo muy sencillo y escueto.
Al inicio se hace la consulta sql y se carga el grid con el cursor resultante
Se modifica en el text, se guarda en la tabla origen, se vuelve a generar la consulta sql y se carga de nuevo el grid

(En el text se modifica el valor, no está enlazado al campo. Si lo estuviera no necesitaría refrescar el grid porque lo que haga en el text se actualizaría en el grid)

Puntalizo... es muy sencillo el ejemplo hay otras cosas que tomar en cuenta

Espero te sirva
nombres.dbf
form1.2scx
form1.2SCT
Reply all
Reply to author
Forward
0 new messages