¿Por qué mi grilla guarda varias veces mi registro?
Buenas tardes experto, lo que me sucede es que cuando voy a guardar datos de una grilla me los guarda hasta 4 bese en la base de datos por que puede ser, en la grilla tengo datos en combos y textos.
Seguramente no estas utilizando indices ej. Se le 0 Use xbase order 1 Sele xbase Seek mcampo if not found() appen blank replace campo with xcampo else =messagebox("registro ya existe","Informacion") Enidif Thisform. Grid1. Setfocus Thisform. Grid1. Refresh Thisform. Mcampo. Setfocus
Mi código es algo así Select regw &&tabla registro daniel Locate for upper(cod)=Alltrim(Thisform.text4.value) &&&& campo de codigo If Found() Then Replace cod With Thisform.text4.value else go bott Append Blank Replace cod With Thisform.text4.value ENDIF Igual lo que inserte en la grilla se guarda, la verdad los campos de la grilla en el botón de guardar no están enlazados, sin embargo me guarda los campos pero vasias veces, ¿qué sera? ¿Cómo puedo solucionar lo del guardado? Aclaro en la grilla los campos o las columnas en el control sourse si están enlazados al los campos de la tabla no se si por eso me guarda, pero me guarda varias veces
¿Por qué usas Locate? Este comando como puede encontrarte un valor tampoco no, a no ser que uses CONTINUÉ y por desgracia no necesariamente la cadena que buscas la encontrara exactamente sino que coincidentemente en sus primeros caractares que coincidan eje: locate cod=11 El buscara 11 pero obviara que este tenga 1101 e igual agregara Mejor indexa la tabla o el cursor y usa SEEK como te lo explique anteriormente. SEEK o FIND este asegura que si un registro existe para el es TRUE (.t.) Caso contrario agregara cambia en vez de LOCATE a SEEK pero indexa la tabla ej. Crea un prg para indexar si no lo tienes hazlo en caliente es decir en tiempo de ejecución pero a través de cursores set exclusive off set safe off set talk off store space(2) to mcod store space(20) to mnombre se le 0 use regw se le 0 create cursor regw2(cod c(2),nombre c(20), nuevo L) Index on cod tag xcod Sele regw Scan Scatter memvar Se le regw2 Append blank Gather memvar Se le regw Endscan @2,10 get mcod @3,10 get mnombre Read Se le regw2 set order to tag xcod seek mcod if not found append blank replace cod with mcod,nombre with mnombre, nuevo with .t. else =messagebox("registro ya existe","Informacion") endif * ahora agregamos los nuevos a la tabla original la que tenemos de manera permanente sele regw2 set filter to nuevo=.t. Scan Scatter memvar Se le regw Append blank Gather memvar Se le regw2 Endscan Clos data return Si la tabla origen es muy grande es decir tiene demasiada información entonces ocupa filtros A través de sentencias SQL con la clausula WHERE en fin hay tantas formas que tienes un mundo infinito de posibilidades.