Inicio > Visual Fox Pro > davsoft > Extraer datos de tabla MySQL a fomulario de VFP

Extraer datos de tabla MySQL a fomulario de VFP

Experto:
Usuario:
Fecha: 22/07/2008
Valoración: (5,00 sobre 5) Categoría: Visual Fox Pro
22/07/2008
huguim, usuario preguntando en Visual Fox Pro
Usuario
Hola, estoy empezando a utilizar MySQL con VFP y tengo algunas dudas, por fin pude conectarlos entre si y guardar registros de un formulario a una tabla. Pero ahora mi dudas es: ¿Como estraer los registros de la tabla al formulario por medio de una busqueda? por ejemplo: tengo una tabla con un campo "clave int(6)" y el formulario tiene el campo "txtclave", ¿como le hago para que busque en la tabla un registro con la clave que escribo en txtclave y si la encuentra que me mande el resto de los campos de la tabla a los textbox de mi formulario?
 
Gracias por su atencion y ayuda!
22/07/2008
huguim, experto respondiendo en Visual Fox Pro
Experto
Hola amigo, esto es muy simple, te doy unejemplo:
xSql = "select * from empresas where emp_clave = "+str(thisform.txtClave.value)
if sqlexec(xCon,xSql,"misDatos")>0
       sele misDatos
       if reccount("misDatos")>0
            brow normal
           *- aqui te pongo un browse, pero ya tienes un cursor de lectura/escritura llamada
           *- misDatos que puedes manipularlo a tu antojo, meterlo en un grid etc.
       else
            messagebox("No se econtraron cohincidencias")
       endif
else
       messagebox("Error ha ocurrido al ejecutar el comando",55)
endif
 
 
Bueno, este ejemplo es a mi metodo, siempre uso una variable,en este caso xSql en donde almaceno el comando que quiero enviar al motor, esto es por comodidad, por que cuando envias un comando muy largo es incomodo hacer
if sqlexec(xCon,"select * from empresas where emp_codigo = "+str(thisform.txtClave.value),"misDatos")>0
 ves, es mas practico meterlo todo a una variable,
espero haberte ayudado, saludos
 
 
22/07/2008
huguim, usuario preguntando en Visual Fox Pro
Usuario
busca=sqlexec(lnHandle,"select * from datos where clave = ?thisform.txtclave.value","ct02")
select ct02
if reccount('ct02') >0 then
    thisform.txtnombre.Value = ct02.nombre
else
     messagebox("No hay registros")
endif
Mira use esta rutina y si me resulto, pero tengo unas dudas:
Solo puedo hacer la busqueda utilizando el cursor? no puedo hacerlo directo en la tabla de MySQL utilizando algo asi como un "seek()" osea que extraiga los datos de la tabla de mySQL sin utilizar el cursor??
Esta rutina del "select *" no se alenta cuando la base de datos es muy grande digamos unos 5,000,000 de registros o mas??
Para hacer busqueda en la tabla es necesario utilizar el "STR()"---> "+str(thisform.txtClave.value)"??
jajaja vas a decir que que pregunton soy una mas
como le hago para remplazar registros de una tabla porque con el "insert" agrego un nuevo registro, como busco un registro y tan solo remplazo datos?
Muchisimas Gracias por tu atencion, de verdad gracias y disculpa las molestias, me diste algunas ideas con tu respuesta, gracias!
 
22/07/2008
huguim, experto respondiendo en Visual Fox Pro
Experto
Justamente cuando comence a trabajar en ambiente cliente servidor mi primera pregunta fue, cual es el equivalente al seek(), bueno, la respuesta es que no hay eso, todo es select, pero de velocidad no te preocupes, el mysql es realmente poderoso, siempre y cuando utilices indices correctamente, siempre debes tener en cuenta que en el where .... debe existir campos indices, bien, te cuento que tengo actualmente en  produccion tablas con 1.100.000 registros y no tengo problemas en las busquedas de este tipo, por ej.  select * from clientes where codigo=501 , si codigo es una clave primaria se supone que el resultado será siempre 1 registro, pero si quieres evitarte problemas puede ponerle limit 1  cuando no estas seguro de esto, pero siempre evita *, pon select codigo,nombre,tel from clientes where codigo=501  , esto sera mucho mas rapido, asi que no existe seek(), con respecto a tu 2da pregunta, str() es mi costumbre, bien puede hacerlo con ? como lo hiciste tu, es mi estilo, porque lo que uno envia al motor siempre es una clausula del tipo string (caracter) siempre, pero si txtClave fuese del tipo caracter no habria necesidad, esto seria asi: "select * from clientes where codigo="+thisform.txtClave.value        y listo, asi que STR() no es mandatorio, todo depende como quieres concatenar los datos enviados al motor, 3ra pregunta, para reemplazar un registro existente es con update
update clientes set nombre='jose',tel='051546',direcion='avda mcal lopez' where codigo=501
siempre debes poner where para que no reemplazca toda la tabla, por lo tanto esto es el equivalente a  replace campo with dato   for condicion  , pero no te preocupes, es muy rapido, lo que pasa es que le extrañamos los primeros tiempos al seek(), pero luego te das cuenta que mysql es maravilloso y no hay lentitud, siempre y cuando esten bien definidos los indices.
Espero haber respondido todas las preguntas.
 
22/07/2008
huguim, usuario preguntando en Visual Fox Pro
Usuario
Excelente!!! muchisimas gracias!!! es lo que estaba buscando, muchas gracias por tu tiempo!
Enlaces patrocinados