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.
Buenos días experto... Mil gracias, el código para ingresar los datos a la lista me funciona perfectamente, lo tengo en el init del formulario y apenas cargo el formulario se llena mi lista sin problemas, en base a eso tengo otra pregunta que tranquilo, no afectara sus puntos, el hecho es que tengo la lista, me gustaría saber si puedo crear un text código para que cuando ingrese parte del código del producto me sirva como de filtro o algo así, y igualmente con otro text que seria descripción y que con escribir una parte de la descripción me sirva de filtro en la lista para que solo aparezcan los que sean parecidos al que ingrese... creo que con el like de código sql funca, intente algo como esto:
En el interactivechange del text le coloque que me limpiara la bd y luego un "select * from productos where cod_pro like ?codpar%"... cave destacar que codpar es una variable donde estoy guardando lo que voy escribiendo en este text...
Y en base al segundo punto como que el error es mio entonces, cuando decía que una tabla temporal me refería a una tabla de fox para almacenar los datos que se van realizando al pedido, de manera que si por por o y cirscunstancia algo salia mal y la lista de productos solicitados es muy larga no se pierda la información... Pero lo más probable es que se una otro equipo a la red entonces no podre usar la tabla en modo exclusivo :(... Si me explicas como hacerlo con un cursor para no tener problemas seria de gran ayuda...
Mil gracias por adelantado amigo experto, ud me ha ayudado en más de un problema... Siga así que el que bien obra bien le va... :)
Bueno, me alegra mucho.
Claro que puedes hacerlo.
La sintaxis sería algo así:
* interactivechange txtcodigo *
local lcCodigo
lcCodigo=alltrim(thisform.textcode.value)
if !empty(lcCodigo)
     select mitabla.codigo, campo2, campo3 from mitabla where like(lcCodigo, codigo)
     && el segundo parámetro "codigo" se refiere al nombre del campo ***
Endif
Por supuesto que debes pasar la consulta desde SQLEXEC
Bueno, te llevaste dos respuestas al precio de una.
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: