Hola tengo una formulario donde realizo la carga de datos, eliminacion y modificación y despues otro formulario donde muestra un grid y donde realizo busquedas para llevar ese registro que encontre al otro formulario y poder modificarlos. Yo antes en el grid usaba la tabla asociada, que era la misma que en el formulario de carga y utilizaba el comando seek() para buscar. Pero vi en esta comunidad que es más seguro trabajar con cursor, en vez de la tabla en un grid y que ademas es más rápido con el comando select-sql. El problema que tengo, es que antes podia llevar el registro que seleccionaba al formulario, pero ahora como a la tabla la llevo a un cursor y ahi la filtro con la busqueda ya no puedo decirle a la tabla cual registro es, porque cambia la posicion del registro según el filtro.
Este es el nuevo código que utilizo para realizar la busqueda de la tabla datos, la llevo a un cursor y ahi la filtro. El grid es solo para buscar y llevar el registro por ende el grid tiene la propiedad Readonly=.T.
PRIVATE consulta
consulta=(VAL(alltrim(Thisform.Txtexpedni.Value)))
DO CASE
CASE Thisform.cmbBusqueda.Value="Expediente"
Thisform.grido.RecordSource = ""
SELECT * FROM datos WHERE expediente=consulta ORDER BY ingreso INTO CURSOR cur_grid readwrite
Thisform.grido.RecordSource = "cur_grid"
Thisform.grido.Refresh
IF RECCOUNT("cur_grid")>=1 Then
MESSAGEBOX("Se encontro","Consulta",64,1)
ELSE
MESSAGEBOX("No se encontro","Consulta",64,1)
ENDIF
CASE Thisform.CmbBusqueda.Value="DNI"
Thisform.grido.RecordSource = ""
SELECT * FROM datos WHERE DNI=consulta ORDER BY ingreso INTO CURSOR cur_grid readwrite
Thisform.grido.RecordSource = "cur_grid"
Thisform.grido.Refresh
IF RECCOUNT("cur_grid")>=1 Then
MESSAGEBOX("Se encontro","Consulta",64,1)
ELSE
MESSAGEBOX("No se encontro","Consulta",64,1)
ENDIF
CASE Thisform.CmbBusqueda.Value="Apellido y Nombre"
Thisform.grido.RecordSource = ""
SELECT * FROM datos WHERE apellido=Thisform.txtApe.Value AND nombre=Thisform.txtNom.Value ORDER BY ingreso INTO CURSOR cur_grid readwrite
Thisform.grido.RecordSource = "cur_grid"
Thisform.grido.Refresh
IF RECCOUNT("cur_grid")>=1 Then
MESSAGEBOX("Se encontro","Consulta",64,1)
ELSE
MESSAGEBOX("No se encontro","Consulta",64,1)
ENDIF
ENDCASE
Como crea el cursor con la busqueda filtrada no puedo obtener nunca la posición real del regsitro para poder llevarla a la tabla datos y despues poder modificarla o eliminarla. No se si volver a trabajar directamente con la tabla y el comando seek o si hay alguna otra forma para trabajar con el comando select-sql y obtener el mismo resultado que antes.