Hola amgios del forum.
He ido aprendiendo de todos ustedes, también he leído documentación. Pero tengo otra inquietud:
Como seria en un browse donde hay una relacion de clientes, y al seleccionar un registro, se va para una rutina donde hace cálculos y luego imprime una factura. Si el mismo cliente otra terminal lo selecciona, como hacemos para que la otra terminal quede en espera, mientras la otra la desocupe. Como este código que encontré de Mr Rao.
- Code: Select all Expand view RUN
#include "fivewin.ch"
//----------------------------------------------------------------------------//
STATIC oCn1
function Main()
local oRs, oDlg, oFont, oBrw
FWCONNECT oCn1 HOST "localhost" USER "Adolfredo" PASSWORD "1234567" DB "indfundacion" PORT 3307
if oCn1 == nil
return nil
endif
oRs := oCn1:RowSet( "SELECT ID,FIRST,CITY,AGE FROM customer" )
DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-14
DEFINE DIALOG oDlg SIZE 600,500 PIXEL TRUEPIXEL FONT oFont ;
TITLE "MARIADB LOCKED EDIT"
@ 60,20 XBROWSE oBrw SIZE -20,-20 PIXEL OF oDlg ;
DATASOURCE oRs AUTOCOLS ;
CELL LINES NOBORDER FASTEDIT
WITH OBJECT oBrw
:nEditTypes := EDIT_GET
:CreateFromCode()
END
@ 10,20 BTNBMP PROMPT "LockedEdit" SIZE 150,40 PIXEL OF oDlg FLAT ;
ACTION LockedEdit( oBrw )
ACTIVATE DIALOG oDlg CENTERED
RELEASE FONT oFont
return nil
//----------------------------------------------------------------------------//
static function LockedEdit( oBrw )
local oRsMain, oRsEdit, oRec, nWait,oCn
oRsMain := oBrw:oDbf
oCn := oRsMain:oCn
nWait := oCn:QueryResult( "SHOW SESSION VARIABLES LIKE 'innodb_lock_wait_timeout'" )[ 2 ]
oCn:Execute( "SET SESSION innodb_lock_wait_timeout = 1" )
oCn:BeginTransaction()
MsgRun( "Reading Record", "WAIT", { || ;
oRsEdit := oCn:RowSet( "SELECT * FROM customer WHERE ID = ? FOR UPDATE", { oRsMain:ID } ) ;
} )
if oCn:nError == 0
oCn:Execute( "SET SESSION innodb_lock_wait_timeout = " + cValToChar( nWait ) )
oRec := TDataRow():New( oRsEdit )
oRec:Edit()---------------------------------------->Aquí debe irse para la rutina de calculo e impresión de Factura
Calculo( oBrw, oRsContribu )
oCn:CommitTransaction()
oRsMain:ReSync()
oBrw:RefreshCurrent()
else
oCn:RollBack()
oCn:Execute( "SET SESSION innodb_lock_wait_timeout = " + cValToChar( nWait ) )
? "Record is locked by other user"
endif
oBrw:SetFocus()
return nil
//----------------------------------------------------------------------------//
//----------------------------------------------------------//
FUNCTION Calculo( oBrw, oRsContribu )
//----------------------------------------------------------//
msginfo("Modulo de Calculo e impresion de Factura")
RETURN( NIL)