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 de davsoft
1
1
davsoft, Desarrollador con 10 años de experiencia en el area de Visual...
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.