Extraer datos de tabla MySQL a formulario de VFP

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: ¿Cómo extraer los registros de la tabla al formulario por medio de una búsqueda? Por ejemplo: tengo una tabla con un campo "clave int(6)" y el formulario tiene el campo "txtclave", ¿cómo 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 atención y ayuda!

1 respuesta

Respuesta
1
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
           *- Aquí 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.
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 búsqueda utilizando el cursor? ¿No puedo hacerlo directo en la tabla de MySQL utilizando algo así como un "seek()" osea que extraiga los datos de la tabla de mySQL sin utilizar el cursor?
¿Esta rutina del "select *" no se alentá cuando la base de datos es muy grande digamos unos 5,000,000 de registros o más?
¿Para hacer búsqueda en la tabla es necesario utilizar el "STR()"---> "+str(thisform.txtClave.value)"?
jajaja vas a decir que que preguntón soy una más
Como le hago para remplazar registros de una tabla porque con el "insert" agrego un nuevo registro, ¿cómo busco un registro y tan solo remplazo datos?
Muchísimas Gracias por tu atención, de verdad gracias y disculpa las molestias, me diste algunas ideas con tu respuesta, gracias!
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.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas