Insertar registros en mysql desde un formulario de vfp9

Estoy creando una aplicación en visual foxpro 9, ya logre conectarme a la base de datos, pero cuando guardo el registro aparentemente lo guarda, pero al consultarlo no esta, pero si puedo ver los registros de la tabla desde el formulario.

No se si el error esta en la forma como abro la tabla, lo hago desde el load del formulario:

CSQL = "Select * from clientes Order by Codigo"
RESULT = SQLEXEC(CN, CSQL , "clientes")
select clientes

luego inserto el registro desde un botón de comando así:

INSERT into clientes(codigo,nombre,apellido);
Values (vCodigo, vNombre, vApellido)

Los valores vCodigo, vNombre y vApellido los tomo de los textbox del formulario.

1 Respuesta

Respuesta
1

Hola Luis Mejia! Un placer saludarte. Espero poder ayudarte. Recorda siempre dirigir las preguntas a un experto en visual foxpro. A veces las preguntas quedan diassss en el tablon general y nadie las mira.

Segun leo y lo que logro comprender... haces una consulta de tus datos y los cargas en un cursor temporal "clientes". Luego insertas un nuevo registro y deseas ver ese registro recien ingresado. ¿Es asi? Corrigeme si me equivoco.

De ser asi, el problema radica en que una vez insertado el registro, debes regenerar la consulta otra vez para que el cursor clientes "levante" el nuevo dato.

En mi caso, yo utilizo el motor de BD de FIREBIRD. Y es igual.

En mi humilde opinion, yo t aconsejaria algunas cositas... que no creo que esten de mas mencionar:

1 - Para realizar tus procesos (dentro de un form) yo te aconsejaria crear tus propios metodos personalizados. Por ejemplo, cuando yo voy a hacer una consulta y voy a mostrar en un grid los datos de una tabla... voy al menu FORM (en modo de diseño del formulario) y escojo NEW METHOD y ahi creo un metodo llamado "cargardatos". Luego voy al metodo, en la pestaña method de la ventana de propiedades y al final esta cargardatos. Ahi escribo la consulta y el enlace al control grid. Si deseo regenerar 100 veces la consulta solo basta con llamar al metodo asi:

THISFORM. Cargardatos

Desde cualquier parte del form y se dispara el proceso.

Un tip extra: recorda que cada vez que se regenera una consulta, si usas un control grid para mostrar los datos... el control tiende a perder todo su formato y conexion con los campos del cursor. ¿Por qué? Al regenerar una consulta, la consulta actual se destruye y se crea inmediatamente una nueva, con el mismo nombre, pero con otros datos y volumen. Por tanto, el grid enlazado a dicho cursor o consulta, pierde su RecordSource o fuente de datos/registros y por tanto conlleva a este comportamiento. Para corregirlo, basta con agregar, antes de hacer la consulta, una linea que desprenda el grid de su fuente de datos...

THISFORM.Grid1.Recordsource = " "

**--Aca cargas la consulta

**--Aca volves a enlazar el grid con el cursor

THISFORM.Grid1.Recordsource = "tmpclientes"

**--Aca enlazas las columnas

THISFORM.Grid1.Refresh()

**--//

2 - Una vez, si te decides o no, por usar un metodo para cada proceso... t aconsejo que generes la consulta mejor en el evento INIT() del form. Si deseas usar un metodo, solo lo llamas asi:

THISFORM. Cargardatos

Desde el evento init y listo. Luego de insertar el registro... volves solo a llamar al metodo cargardatos y ya regeneras la consulta.

3 - Veo que usas "Select * from"! ¿Necesitas levantar todos los datos de la tabla? De ser asi.. ps ni modo. A veces a mi me toca! Pero en la medida de lo posible, trata de ejecutar tus consultas al servidor con la menor cantidad de datos posibles para que el transito de red no sea pesado y tu aplicacion no se atasque por largos periodos para generar consultas o actualizar datos.

4 - Los cursores donde se cargan los datos, en tu caso "clientes".. en mi humilde opinion, no deberian tener exactamente el mismo nombre de la tabla. Pueede que se de algun momento en que tengas un conflicto porque la tabla y el cursor se llaman igual. No obstante.. esto es mas concurrente cuando usas el motor nativo de VFP... pero ps para prevenir...! Yo acostumbro anteponer el prefijo temp o tmp o tp y luego el nombre de la fuente (tabla) para asi saber que datos se cargan.. quedaria asi: tmpclientes y ya se que es un cursor temporal.

5 - Por ultimo... segun leo, no se si usas forms ABM! Son realmente utiles y t aconsejo usarlos. Optimizan mejor los procesos y el trafico de datos en las redes. Asi.. designas que un form sea solo para consultass y otro para altas y bajas. Y otro para modificaciones. Cada proceso bien ordenado.

Bien.. solo son algunos tips que te pueden servir.

Proba insertar el registro e inmediatamente regenera la consulta y si el registro se grabo correctamente, debe aparecer cargado en el cursor clientes.

Un abrazo, desde Managua, capital de Nicaragua!

Ravenn :D :D

Mil gracias, probaré tus tips y te aviso como me fue, puede ser que el problema sea que el cursor y la tabla se llaman igual, porque si me los guarda en el cursor temporal, pero no en la base de datos..

Si lo guarda en el cursor... y el cursor nace de una consulta a la BD es raro... porque lo más seguro es que si debería de guardar en la BD. Bien... avisame cualquier cosa.. solo te pido que no dejes la pregunta abierta y sin valorar... ! Estoy a la orden cualquier duda.

Desde Managua, NIcaragua!

Ravenn :D

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas