¿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.
1

1 Respuesta

8.050 pts.
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.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas