Ingresar datos de MySQL a list con VFP 9

Buenas tardes amigos expertos... Estoy trabajando nuevamente en mi sistema con VFP 9 y MySQL y me he conseguido dos problemas, los cuales son:
1.- No he podido ingresar los datos de una tabla en mysql hacia una lista en VFP (list o cuadro de lista en español), he pasado los datos a un cursor pero no he podido visualizarlos en una lista... Intenten hacer lo siguiente como prueba pero solo me muestra el primer campo del cursor, dividí la lista en 4 columnas con un tamaño de 50c/u pero nada:
nodefault
=sqLEXEC(CONEXION,"select * from productos","cruproductos")
thisform.list1.rowsource = "cruproductos.nom_prov"
thisform.list1.rowsourcetype = 6
thisform.list1.boundcolumn = 1
Ese código me sirvió para llenar la info de un combo con la bd pero para la lista por lo visto no... Cambie el rowsourcetype a 3 y me sale error...
2.- Tengo una tabla temporal en una bd de fox (no mysql) para los productos temporales, donde cargo los productos antes de pasarlos a mi bd fija en mysql... ¿Cómo puedo hacer para que cuando le de imprimir me guarde los datos a la bd de mysql y luego se me vacíe la de fox?
Espero sus consejos amigos expertos y ayuda en este tema... Gracias

1 respuesta

1
Respuesta de
Estimado Usuario:
1) En cuanto a tu primera pregunta el problema está en tu comando:
thisform.list1.rowsource = "cruproductos.nom_prov"
Estás especificando un sólo campo para tu lista. Debes especificar todos los campos que desees que figuren en tu lista:
thisform.list1.rowsourcetype = 6
thisform.list1.rowsource = "cruproductos.nom_prov, campo2, campo3, campo4"
2) En cuanto a tu segunda pregunta hay varias cosas a considerar:
a) ¿Una Tabla temporal? En Visual FoxPro no hay tablas temporales ! Sí hay cursores que son temporales, en cambio las tablas (*.dbf) se guardan en el disco duro, por lo tanto no son temporales.
b) Si la carga de productos la realizas en partes, es decir de a poco y en distintos momentos, antes de actualizar tu tabla mysql: Sí necesitas una tabla que se guarde en disco. En cambio si el proceso de alta de productos y la actualización se realizan en forma inmediata (antes de cerrar tu formulario de carga de datos) no necesitas una tabla, debes utilizar un cursor creado con CREATE CURSOR... y de esta forma evitas tener que borrar los registros de tu tabla.
Aunque esta diferencia parezca irrelevante tiene mucha importancia en el desempeño de tu sistema. Borrar registros de una tabla de Visual FoxPro es algo complicado ya que el comando delete sólo marca el registro para su eliminación. Luego debes usar el comando pack que requiere acceso exclusivo a la tabla, y si estas trabajando en un entorno multiusuario puede ser complicado.
Suponiendo que se trata del segundo caso el código a utilizar en el evento click de tu botón imprimir sería algo así:
* variables locales *
local cmd, lcMystring, lnHandle, lcSQLcommand
cmd=0
lcMystring=*tu conexión a mySql*
lnHandle= sqlstringconnect(lcMystring)
select mitabla
scan
   lcSQLcommand="INSERT INTO My_TABLA (campos) VALUES (valores)"
   cmd=SQLEXEC(lnHandle, lcSQLcommand)
   if cmd=1 && se copio el registro
      * elimina el registro de la tabla *
      delete next 1
   Endif
Endscan
pack
release cmd, lcMystring, lnHandle, lcSQLcommand
Espero te sirva.
Saludos.
Carlos.
Añade un comentario a esta respuesta
Añade tu respuesta
Haz clic para o
Escribe tu mensaje
¿No es la respuesta que estabas buscando? Puedes explorar otras preguntas del tema Visual Fox Pro o hacer tu propia pregunta: