Cual sería la data o el motodo que, de una tabla con un campo autoincremental, me permita saber cual es el valor que corresponde a un nuevo registro.
Si bien cuando hago un :Append() y luego :Save() me guarda correctamente el valor, desearía mostrarlo antes en la captura de datos en el formulario.
Otra consulta:
Cual sería el proceso correcto despues de un :Append() para que el Browse refleje la realidad del orden de la tabla.
Hice esta prueba. En una tabla ordenada por nombre, agrego un registro que quede por orden alfabetico entre dos registros, y cuando refresca el browse el orden resultante no refleja el orden real. Si cierro la Query y la vuelvo a abrir, ahi si muestra los datos correctamente.
El ejemplo sería este:
- Code: Select all Expand view
- STATIC FUNCTION ArmarBrowse(oWnd)
nFilter := 1
nSeekWild := 1
oQryBrw := oApp:oServer:Query("SELECT * FROM agenda WHERE usuario = "+;
ClipValue2Sql(oApp:usuario)+ " ORDER BY nombre ")
DEFINE WINDOW oDlgBrw FROM 0,0 TO oApp:oWnd:nWidth-200, oApp:oWnd:nHeight - 300;
NOSYSMENU NOCAPTION NOMINIMIZE NOMAXIMIZE OF oWnd
@ 05,01 XBROWSE oBrw DATASOURCE oQryBrw SIZE oApp:oWnd:nWidth-200, oApp:oWnd:nHeight - 300;
OF oDlgBrw AUTOSORT ;
COLUMNS "id","nombre","direccion","Telefono","celular","mail","empresa";
HEADERS "Id","Apellido y Nombre","Direccion","Tel.Fijo","Tel.Celular","Email","Empresa";
SIZES 35,250,95,80,80,200,200;
ON DBLCLICK (Formu(.f.),oBrw:Refresh())
@ 00,00 SAY oBrw:oSeek PROMPT "Buscar:" OF oDlgBrw
@ 00,10 SAY oBrw:oSeek PROMPT "" SIZE 500,20 OF oDlgBrw
@ 02,10 COMBOBOX nFilter SIZE 200,60 OF oDlgBrw ;
ITEMS { "Buscar por...", "Filtrar por..." } ;
ON CHANGE ( oBrw:Seek( "" ), oBrw:lIncrFilter := nFilter > 1, oBrw:SetFocus() )
@ 02,72 COMBOBOX nSeekWild SIZE 200, 60 OF oDlgBrw ;
ITEMS { "Que comience con..", "Que contenga" } ;
ON CHANGE ( oBrw:lSeekWild := ( nSeekWild > 1 ), oBrw:Seek( "" ), oBrw:SetFocus() )
oBrw:nFreeze := 7
oBrw:CreateFromCode()
ACTIVATE WINDOW oDlgBrw ON INIT oDlgBrw:Move(0,0)
oQryBrw:GoTop()
RETURN nil
***************************************
** Formulario de altas y modificaciones
STATIC FUNCTION Formu (lAlta)
LOCAL oGet := ARRAY(7), oBot := ARRAY(2), oForm, lRta := .f., aCor, oFont, oError
IF lAlta
oQryBrw:Append()
oQryBrw:usuario := oApp:usuario
ENDIF
DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-11.5
DO WHILE .T.
DEFINE DIALOG oForm TITLE IF(lAlta,"Alta","Modificacion") + " de Contacto" FROM 05,15 TO 25,80 FONT oFont
acor := AcepCanc(oForm)
@ 07, 05 SAY "Id:" OF oForm PIXEL SIZE 60,20 RIGHT
@ 22, 05 SAY "Apellido y Nombre:" OF oForm PIXEL SIZE 60,20 RIGHT
@ 37, 05 SAY "Direccion:" OF oForm PIXEL SIZE 60,16 RIGHT
@ 52, 05 SAY "Telefono:" OF oForm PIXEL SIZE 60,16 RIGHT
@ 67, 05 SAY "Celular:" OF oForm PIXEL SIZE 60,16 RIGHT
@ 82, 05 SAY "Mail:" OF oForm PIXEL SIZE 60,16 RIGHT
@ 97, 05 SAY "Empresa:" OF oForm PIXEL SIZE 60,16 RIGHT
@ 05, 70 GET oGet[1] VAR oQryBrw:id OF oForm PICTURE "9999999" PIXEL RIGHT WHEN(.F.)
@ 20, 70 GET oGet[2] VAR oQryBrw:nombre OF oForm PIXEL CUEBANNER "Nombre contacto"
@ 35, 70 GET oGet[3] VAR oQryBrw:direccion OF oForm PIXEL CUEBANNER "Domiclio contacto"
@ 50, 70 GET oGet[4] VAR oQryBrw:telefono OF oForm PIXEL CUEBANNER "Telefono fijo contacto"
@ 65, 70 GET oGet[5] VAR oQryBrw:celular OF oForm PIXEL CUEBANNER "Telefono movil contacto"
@ 80, 70 GET oGet[6] VAR oQryBrw:mail OF oForm PIXEL CUEBANNER "Direccion de correo electronico"
@ 95, 70 GET oGet[7] VAR oQryBrw:empresa OF oForm PIXEL CUEBANNER "Empresa para la que trabaja"
@ acor[1],acor[2] BUTTON oBot[1] PROMPT "&Grabar" OF oForm SIZE 30,10 ;
ACTION ((lRta := .t.), oForm:End() ) PIXEL
@ acor[3],acor[4] BUTTON oBot[2] PROMPT "&Cancelar" OF oForm SIZE 30,10 ;
ACTION ((lRta := .f.), oForm:End() ) PIXEL CANCEL
ACTIVATE DIALOG oForm CENTER
IF !lRta
RELEASE oFont
oQryBrw:Cancel()
RETURN nil
ENDIF
TRY
oApp:oServer:BeginTransaction()
oQryBrw:Save()
*oQryBrw:Refresh() // Probe con esto solo y sin esto
*oBrw:Refresh() // Probe con esto y sin esto
oApp:oServer:CommitTransaction()
CATCH oError
ValidaError(oError, oQryBrw)
LOOP
END TRY
EXIT
ENDDO
RELEASE oFont
RETURN nil
La funcion se llama de la ventana contenedora
Gracias