diff --git a/TESTS/DATOS_READONLY/FB2P_DBC.DC2 b/TESTS/DATOS_READONLY/FB2P_DBC.DC2
index c3d3542..8310436 100644
--- a/TESTS/DATOS_READONLY/FB2P_DBC.DC2
+++ b/TESTS/DATOS_READONLY/FB2P_DBC.DC2
@@ -2,7 +2,7 @@
* (ES) AUTOGENERADO - ¡¡ATENCIÓN!! - ¡¡NO PENSADO PARA EJECUTAR!! USAR SOLAMENTE PARA INTEGRAR CAMBIOS Y ALMACENAR CON HERRAMIENTAS SCM!!
* (EN) AUTOGENERATED - ATTENTION!! - NOT INTENDED FOR EXECUTION!! USE ONLY FOR MERGING CHANGES AND STORING WITH SCM TOOLS!!
*--------------------------------------------------------------------------------------------------------------------------------------------------------
-*< FOXBIN2PRG: Version="1.15" SourceFile="C:\DESA\FOXBIN2PRG\TESTS\DATOS_READONLY\FB2P_DBC.DBC" Generated="2013/12/17 16:01:00" /> (Para uso con Visual FoxPro 9.0)
+*< FOXBIN2PRG: Version="1.19" SourceFile="C:\DESA\foxbin2prg\TESTS\DATOS_READONLY\fb2p_dbc.dbc" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries)
*
@@ -10,7 +10,7 @@
Comentario de los eventos o de la BDD???
11
.T.
-
+ eventsfile.prg
@@ -74,17 +74,17 @@
depto
"Depto.Caption"
depto_field_comment
- depto_field_def_value
+ "Depto."
cl_optiongroup
c:\desa\foxbin2prg\tests\datos_readonly\fb2p_test.vcx
- Disp.Format
- InputMask
+ !
+ XXXXXXXXXX
depto_field_validation_rule()
depto_field_validation_message()
descrip
- aaaaaaaaaa
+ Descripción
@@ -103,10 +103,6 @@
.T.
-
-
-
-
@@ -190,28 +186,36 @@
.T.
- i_nombre
+ edad_nd
.F.
+
+ notdeleted
+
+ .F.
+
+
+ edad
+
+ .T.
+
depto
.F.
+
+ nombre
+
+ .F.
+
+
+ i_nombre
+
+ .F.
+
-
-
-
- Relation 1
- NOMBRELARGODELDBF
- FB2P_DEPTO
- DEPTO
- DEPTO
- ICR
-
-
-
@@ -248,115 +252,147 @@
pk_name
+ C(30)
+ .F.
+ .F.
+ STROSNC.DB_DEBUG_SETUP.PK_NAME
enabled
+ N(3)
+ .F.
+ .F.
+ STROSNC.DB_DEBUG_SETUP.ENABLED
evaluacion
+ M
+ .F.
+ .F.
+ STROSNC.DB_DEBUG_SETUP.EVALUACION
pk_metodo
+ C(30)
+ .F.
+ .F.
+ STROSNC.DB_DEBUG_SETUP.PK_METODO
niveldebug
+ N(3)
+ .F.
+ .F.
+ STROSNC.DB_DEBUG_SETUP.NIVELDEBUG
f_desde
+ T
+ .F.
+ .F.
+ STROSNC.DB_DEBUG_SETUP.F_DESDE
f_hasta
+ T
+ .F.
+ .F.
+ STROSNC.DB_DEBUG_SETUP.F_HASTA
direccion_ip
+ C(30)
+ .F.
+ .F.
+ STROSNC.DB_DEBUG_SETUP.DIRECCION_IP
usuario
+ C(30)
+ .F.
+ .F.
+ STROSNC.DB_DEBUG_SETUP.USUARIO
-
-
-
-
@@ -389,67 +425,83 @@
descrip
+ C(50)
+ .F.
+ .F.
+ fb2p_dbc!fb2p_depto.descrip
nombre
+ C(30)
+ .F.
+ .T.
+ fb2p_dbc!nombrelargodeldbf.nombre
edad
+ N(3)
+ .F.
+ .T.
+ fb2p_dbc!nombrelargodeldbf.edad
id
+ I
+ .T.
+ .F.
+ fb2p_dbc!nombrelargodeldbf.id
depto
+ C(10)
+ .F.
+ .T.
+ fb2p_dbc!nombrelargodeldbf.depto
-
-
-
-
@@ -482,43 +534,51 @@
id_convenio
+ C(15)
+ .F.
+ .T.
+ CONVENIOS.ID_CONVENIO
nombre_convenio
+ C(250)
+ .F.
+ .T.
+ CONVENIOS.NOMBRE_CONVENIO
historico
+ C(1)
+ .F.
+ .T.
+ CONVENIOS.HISTORICO
-
-
-
-
@@ -551,19 +611,19 @@
dummy
+ C(1)
+ .F.
+ .T.
+ DUAL.DUMMY
-
-
-
-
@@ -578,436 +638,449 @@ ENDPROC
PROCEDURE del_trg
STRTOFILE( PROGRAM(), FORCEPATH( "LOG_DBC.TXT", JUSTPATH( EVL( DBC(),DBF() ) ) ) )
ENDPROC
+PROCEDURE depto_field_validation_rule
+ENDPROC
+PROCEDURE depto_field_validation_message
+ RETURN 'Mensaje para Field Rule "depto_field_validation_rule"'
+ENDPROC
+PROCEDURE fb2p_depto_record_rule_validation
+ENDPROC
+PROCEDURE fb2p_depto_record_rule_validation_message
+ RETURN 'Mensaje para Record Rule "fb2p_depto_record_rule_validation"'
+ENDPROC
+PROCEDURE depto_field_def_value
+ RETURN 'Dpto.'
+ENDPROC
-*PROCEDURE dbc_OpenData
-* LPARAMETERS cDatabaseName, lExclusive, lNoUpdate, lValidate
+PROCEDURE dbc_OpenData
+ LPARAMETERS cDatabaseName, lExclusive, lNoUpdate, lValidate
* ? ' cDatabaseName = ' + TRANSFORM(cDatabaseName) + ' - ' + TYPE('cDatabaseName')
* ? ' lExclusive = ' + TRANSFORM(lExclusive) + ' - ' + TYPE('lExclusive')
* ? ' lNoUpdate = ' + TRANSFORM(lNoUpdate) + ' - ' + TYPE('lNoUpdate')
* ? ' lValidate = ' + TRANSFORM(lValidate) + ' - ' + TYPE('lValidate')
-*ENDPROC
+ENDPROC
**__RI_HEADER!@ Do NOT REMOVE or MODIFY this line!!!! @!__RI_HEADER**
-procedure RIDELETE
-local llRetVal
-llRetVal=.t.
- IF (ISRLOCKED() and !deleted()) OR !RLOCK()
- llRetVal=.F.
- ELSE
- IF !deleted()
- DELETE
- IF CURSORGETPROP('BUFFERING') > 1
- =TABLEUPDATE()
- ENDIF
- ENDIF not already deleted
- ENDIF
- UNLOCK RECORD (RECNO())
- llRetVal=pnerror=0
-RETURN llRetVal
+PROCEDURE RIDELETE
+ LOCAL llRetVal
+ llRetVal=.T.
+ IF (ISRLOCKED() AND !DELETED()) OR !RLOCK()
+ llRetVal=.F.
+ ELSE
+ IF !DELETED()
+ DELETE
+ IF CURSORGETPROP('BUFFERING') > 1
+ =TABLEUPDATE()
+ ENDIF
+ ENDIF NOT already DELETED
+ ENDIF
+ UNLOCK RECORD (RECNO())
+ llRetVal=pnerror=0
+ RETURN llRetVal
-procedure RIUPDATE
-lparameters tcFieldName,tcNewValue,tcCascadeParent
-local llRetVal
-llRetVal=.t.
- IF ISRLOCKED() OR !RLOCK()
- llRetVal=.F.
- ELSE
- IF EVAL(tcFieldName)<>tcNewValue
- PRIVATE pcCascadeParent
- pcCascadeParent=upper(iif(type("tcCascadeParent")<>"C","",tcCascadeParent))
- REPLACE (tcFieldName) WITH tcNewValue
- IF CURSORGETPROP('BUFFERING') > 1
- =TABLEUPDATE()
- ENDIF
- ENDIF values don't already match
- ENDIF it's locked already, or I was able to lock it
- UNLOCK RECORD (RECNO())
- llRetVal=pnerror=0
-return llRetVal
+PROCEDURE RIUPDATE
+ LPARAMETERS tcFieldName,tcNewValue,tcCascadeParent
+ LOCAL llRetVal
+ llRetVal=.T.
+ IF ISRLOCKED() OR !RLOCK()
+ llRetVal=.F.
+ ELSE
+ IF EVAL(tcFieldName)<>tcNewValue
+ PRIVATE pcCascadeParent
+ pcCascadeParent=UPPER(IIF(TYPE("tcCascadeParent")<>"C","",tcCascadeParent))
+ REPLACE (tcFieldName) WITH tcNewValue
+ IF CURSORGETPROP('BUFFERING') > 1
+ =TABLEUPDATE()
+ ENDIF
+ ENDIF VALUES don't already match
+ ENDIF it's locked already, or I was able to lock it
+ UNLOCK RECORD (RECNO())
+ llRetVal=pnerror=0
+ RETURN llRetVal
-procedure rierror
-parameters tnErrNo,tcMessage,tcCode,tcProgram
-local lnErrorRows,lnXX
-lnErrorRows=alen(gaErrors,1)
-if type('gaErrors[lnErrorRows,1]')<>"L"
- dimension gaErrors[lnErrorRows+1,alen(gaErrors,2)]
- lnErrorRows=lnErrorRows+1
-endif
-gaErrors[lnErrorRows,1]=tnErrNo
-gaErrors[lnErrorRows,2]=tcMessage
-gaErrors[lnErrorRows,3]=tcCode
-gaErrors[lnErrorRows,4]=""
-lnXX=1
-do while !empty(program(lnXX))
- gaErrors[lnErrorRows,4]=gaErrors[lnErrorRows,4]+","+;
- program(lnXX)
- lnXX=lnXX+1
-enddo
-gaErrors[lnErrorRows,5]=pcParentDBF
-gaErrors[lnErrorRows,6]=pnParentRec
-gaErrors[lnErrorRows,7]=pcParentID
-gaErrors[lnErrorRows,8]=pcParentExpr
-gaErrors[lnErrorRows,9]=pcChildDBF
-gaErrors[lnErrorRows,10]=pnChildRec
-gaErrors[lnErrorRows,11]=pcChildID
-gaErrors[lnErrorRows,12]=pcChildExpr
-return tnErrNo
+PROCEDURE rierror
+ PARAMETERS tnErrNo,tcMessage,tcCode,tcProgram
+ LOCAL lnErrorRows,lnXX
+ lnErrorRows=ALEN(gaErrors,1)
+ IF TYPE('gaErrors[lnErrorRows,1]')<>"L"
+ DIMENSION gaErrors[lnErrorRows+1,alen(gaErrors,2)]
+ lnErrorRows=lnErrorRows+1
+ ENDIF
+ gaErrors[lnErrorRows,1]=tnErrNo
+ gaErrors[lnErrorRows,2]=tcMessage
+ gaErrors[lnErrorRows,3]=tcCode
+ gaErrors[lnErrorRows,4]=""
+ lnXX=1
+ DO WHILE !EMPTY(PROGRAM(lnXX))
+ gaErrors[lnErrorRows,4]=gaErrors[lnErrorRows,4]+","+;
+ PROGRAM(lnXX)
+ lnXX=lnXX+1
+ ENDDO
+ gaErrors[lnErrorRows,5]=pcParentDBF
+ gaErrors[lnErrorRows,6]=pnParentRec
+ gaErrors[lnErrorRows,7]=pcParentID
+ gaErrors[lnErrorRows,8]=pcParentExpr
+ gaErrors[lnErrorRows,9]=pcChildDBF
+ gaErrors[lnErrorRows,10]=pnChildRec
+ gaErrors[lnErrorRows,11]=pcChildID
+ gaErrors[lnErrorRows,12]=pcChildExpr
+ RETURN tnErrNo
PROCEDURE riopen
-PARAMETERS tcTable,tcOrder
+ PARAMETERS tcTable,tcOrder
-LOCAL lcCurWkArea,lcNewWkArea,lnInUseSpot,lnOccurs,lnOccurance
-lnInUseSpot=0
-lnOccurs = OCCURS(UPPER(tcTable)+"*",UPPER(pcRIcursors))
-FOR lnOccurance = 1 TO lnOccurs
- lnInUseSpot=ATC(tcTable+"*",pcRIcursors,lnOccurance)
- IF ISDIGIT(SUBSTR(pcRIcursors,lnInUseSpot-1,1)) OR;
- EMPTY(SUBSTR(pcRIcursors,lnInUseSpot-1,1))
- EXIT
- ENDIF
+ LOCAL lcCurWkArea,lcNewWkArea,lnInUseSpot,lnOccurs,lnOccurance
lnInUseSpot=0
-ENDFOR
+ lnOccurs = OCCURS(UPPER(tcTable)+"*",UPPER(pcRIcursors))
+ FOR lnOccurance = 1 TO lnOccurs
+ lnInUseSpot=ATC(tcTable+"*",pcRIcursors,lnOccurance)
+ IF ISDIGIT(SUBSTR(pcRIcursors,lnInUseSpot-1,1)) OR;
+ EMPTY(SUBSTR(pcRIcursors,lnInUseSpot-1,1))
+ EXIT
+ ENDIF
+ lnInUseSpot=0
+ ENDFOR
-IF lnInUseSpot=0
- lcCurWkArea=select()
- SELECT 0
- lcNewWkArea=select()
- IF NOT EMPTY(tcOrder)
- USE (tcTable) AGAIN ORDER (tcOrder) ;
- ALIAS ("__ri"+LTRIM(STR(SELECT()))) share
- ELSE
- USE (tcTable) AGAIN ALIAS ("__ri"+LTRIM(STR(SELECT()))) share
- ENDIF
- if pnerror=0
- pcRIcursors=pcRIcursors+upper(tcTable)+"?"+STR(SELECT(),5)
- else
- lcNewWkArea=0
- endif something bad happened while attempting to open the file
-ELSE
- lcNewWkArea=val(substr(pcRIcursors,lnInUseSpot+len(tcTable)+1,5))
- pcRIcursors = strtran(pcRIcursors,upper(tcTable)+"*"+str(lcNewWkArea,5),;
- upper(tcTable)+"?"+str(lcNewWkArea,5))
- IF NOT EMPTY(tcOrder)
- SET ORDER TO (tcOrder) IN (lcNewWkArea)
- ENDIF sent an order
- if pnerror<>0
- lcNewWkArea=0
- endif something bad happened while setting order
-ENDIF
-RETURN (lcNewWkArea)
+ IF lnInUseSpot=0
+ lcCurWkArea=SELECT()
+ SELECT 0
+ lcNewWkArea=SELECT()
+ IF NOT EMPTY(tcOrder)
+ USE (tcTable) AGAIN ORDER (tcOrder) ;
+ ALIAS ("__ri"+LTRIM(STR(SELECT()))) SHARE
+ ELSE
+ USE (tcTable) AGAIN ALIAS ("__ri"+LTRIM(STR(SELECT()))) SHARE
+ ENDIF
+ IF pnerror=0
+ pcRIcursors=pcRIcursors+UPPER(tcTable)+"?"+STR(SELECT(),5)
+ ELSE
+ lcNewWkArea=0
+ ENDIF something bad happened WHILE attempting TO OPEN the FILE
+ ELSE
+ lcNewWkArea=VAL(SUBSTR(pcRIcursors,lnInUseSpot+LEN(tcTable)+1,5))
+ pcRIcursors = STRTRAN(pcRIcursors,UPPER(tcTable)+"*"+STR(lcNewWkArea,5),;
+ UPPER(tcTable)+"?"+STR(lcNewWkArea,5))
+ IF NOT EMPTY(tcOrder)
+ SET ORDER TO (tcOrder) IN (lcNewWkArea)
+ ENDIF sent an ORDER
+ IF pnerror<>0
+ lcNewWkArea=0
+ ENDIF something bad happened WHILE setting ORDER
+ ENDIF
+ RETURN (lcNewWkArea)
PROCEDURE riend
-PARAMETERS tlSuccess
-local lnXX,lnSpot,lcWorkArea
-IF tlSuccess
- END TRANSACTION
-ELSE
- SET DELETED OFF
- ROLLBACK
- SET DELETED ON
-ENDIF
-IF EMPTY(pcRIolderror)
- ON ERROR
-ELSE
- ON ERROR &pcRIolderror.
-ENDIF
-FOR lnXX=1 TO occurs("*",pcRIcursors)
- lnSpot=atc("*",pcRIcursors,lnXX)+1
- USE IN (VAL(substr(pcRIcursors,lnSpot,5)))
-ENDFOR
-IF pcOldCompat = "ON"
- SET COMPATIBLE ON
-ENDIF
-IF pcOldDele="OFF"
- SET DELETED OFF
-ENDIF
-IF pcOldExact="ON"
- SET EXACT ON
-ENDIF
-IF pcOldTalk="ON"
- SET TALK ON
-ENDIF
-do case
- case empty(pcOldDBC)
- set data to
- case pcOldDBC<>DBC()
- set data to (pcOldDBC)
-endcase
-RETURN .T.
+ PARAMETERS tlSuccess
+ LOCAL lnXX,lnSpot,lcWorkArea
+ IF tlSuccess
+ END TRANSACTION
+ ELSE
+ SET DELETED OFF
+ ROLLBACK
+ SET DELETED ON
+ ENDIF
+ IF EMPTY(pcRIolderror)
+ ON ERROR
+ ELSE
+ ON ERROR &pcRIolderror.
+ ENDIF
+ FOR lnXX=1 TO OCCURS("*",pcRIcursors)
+ lnSpot=ATC("*",pcRIcursors,lnXX)+1
+ USE IN (VAL(SUBSTR(pcRIcursors,lnSpot,5)))
+ ENDFOR
+ IF pcOldCompat = "ON"
+ SET COMPATIBLE ON
+ ENDIF
+ IF pcOldDele="OFF"
+ SET DELETED OFF
+ ENDIF
+ IF pcOldExact="ON"
+ SET EXACT ON
+ ENDIF
+ IF pcOldTalk="ON"
+ SET TALK ON
+ ENDIF
+ DO CASE
+ CASE EMPTY(pcOldDBC)
+ SET DATA TO
+ CASE pcOldDBC<>DBC()
+ SET DATA TO (pcOldDBC)
+ ENDCASE
+ RETURN .T.
PROCEDURE rireuse
-* rireuse.prg
-PARAMETERS tcTableName,tcWkArea
-pcRIcursors = strtran(pcRIcursors,upper(tcTableName)+"?"+str(tcWkArea,5),;
- upper(tcTableName)+"*"+str(tcWkArea,5))
-RETURN .t.
+ * rireuse.prg
+ PARAMETERS tcTableName,tcWkArea
+ pcRIcursors = STRTRAN(pcRIcursors,UPPER(tcTableName)+"?"+STR(tcWkArea,5),;
+ UPPER(tcTableName)+"*"+STR(tcWkArea,5))
+ RETURN .T.
-********************************************************************************
-** "Referential integrity delete trigger for" fb2p_depto
+ ********************************************************************************
+ ** "Referential integrity delete trigger for" fb2p_depto
PROCEDURE __RI_DELETE_fb2p_depto
-LOCAL llRetVal
-llRetVal = .t.
-PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
-PRIVATE pcParentExpr,pcChildExpr
-STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
-STORE 0 TO pnParentRec,pnChildRec
-IF _triggerlevel=1
- BEGIN TRANSACTION
- PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
- pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
- pcOldTalk=SET("TALK")
- SET TALK OFF
- pcOldDele=SET("DELETED")
- pcOldExact=SET("EXACT")
- pcOldCompat=SET("COMPATIBLE")
- SET COMPATIBLE OFF
- SET DELETED ON
- SET EXACT OFF
- pcRIcursors=""
- pcRIwkareas=""
- pcRIolderror=ON("error")
- pnerror=0
- ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
- IF TYPE('gaErrors(1)')<>"U"
- release gaErrors
- ENDIF
- PUBLIC gaErrors(1,12)
- pcOldDBC=DBC()
- SET DATA TO ("FB2P_DBC")
-ENDIF first trigger
-LOCAL lcParentID && parent's value to be sought in child
-LOCAL lcChildWkArea && child work area handle returned by riopen
-LOCAL lcParentWkArea
-LOCAL llDelHeaderarea
-LOCAL lcStartArea
-lcStartArea=select()
-llRetVal=.t.
-lcParentWkArea=select()
-SELECT (lcParentWkArea)
-pcParentDBF=dbf()
-pnParentRec=recno()
-STORE DEPTO TO lcParentID,pcParentID
-pcParentExpr="DEPTO"
-lcChildWkArea=riopen("nombrelargodeldbf","depto")
-IF lcChildWkArea<=0
- IF _triggerlevel=1
- DO riend WITH .F.
- ENDIF at the end of the highest trigger level
- RETURN .F.
-ENDIF not able to open the child work area
-pcChildDBF=dbf(lcChildWkArea)
-SELECT (lcChildWkArea)
-SEEK lcParentID
-SCAN WHILE DEPTO=lcParentID AND llRetVal
- pnChildRec=recno()
- pcChildID=DEPTO
- pcChildExpr="DEPTO"
- llRetVal=ridelete()
-ENDSCAN get all of the nombrelargodeldbf records
-=rireuse("nombrelargodeldbf",lcChildWkArea)
-IF NOT llRetVal
- IF _triggerlevel=1
- DO riend WITH llRetVal
- ENDIF at the end of the highest trigger level
- SELECT (lcStartArea)
- RETURN llRetVal
-ENDIF
-IF _triggerlevel=1
- do riend with llRetVal
-ENDIF at the end of the highest trigger level
-SELECT (lcStartArea)
-RETURN llRetVal
-** "End of Referential integrity Delete trigger for" fb2p_depto
-********************************************************************************
+ LOCAL llRetVal
+ llRetVal = .T.
+ PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
+ PRIVATE pcParentExpr,pcChildExpr
+ STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
+ STORE 0 TO pnParentRec,pnChildRec
+ IF _TRIGGERLEVEL=1
+ BEGIN TRANSACTION
+ PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
+ pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,pcOldDBC
+ pcOldTalk=SET("TALK")
+ SET TALK OFF
+ pcOldDele=SET("DELETED")
+ pcOldExact=SET("EXACT")
+ pcOldCompat=SET("COMPATIBLE")
+ SET COMPATIBLE OFF
+ SET DELETED ON
+ SET EXACT OFF
+ pcRIcursors=""
+ pcRIwkareas=""
+ pcRIolderror=ON("error")
+ pnerror=0
+ ON ERROR pnerror=rierror(ERROR(),MESSAGE(),MESSAGE(1),PROGRAM())
+ IF TYPE('gaErrors(1)')<>"U"
+ RELEASE gaErrors
+ ENDIF
+ PUBLIC gaErrors(1,12)
+ pcOldDBC=DBC()
+ SET DATA TO ("FB2P_DBC")
+ ENDIF FIRST TRIGGER
+ LOCAL lcParentID && parent's value to be sought in child
+ LOCAL lcChildWkArea && child work area handle returned by riopen
+ LOCAL lcParentWkArea
+ LOCAL llDelHeaderarea
+ LOCAL lcStartArea
+ lcStartArea=SELECT()
+ llRetVal=.T.
+ lcParentWkArea=SELECT()
+ SELECT (lcParentWkArea)
+ pcParentDBF=DBF()
+ pnParentRec=RECNO()
+ STORE DEPTO TO lcParentID,pcParentID
+ pcParentExpr="DEPTO"
+ lcChildWkArea=riopen("nombrelargodeldbf","depto")
+ IF lcChildWkArea<=0
+ IF _TRIGGERLEVEL=1
+ DO riend WITH .F.
+ ENDIF AT the END OF the highest TRIGGER LEVEL
+ RETURN .F.
+ ENDIF NOT able TO OPEN the CHILD WORK area
+ pcChildDBF=DBF(lcChildWkArea)
+ SELECT (lcChildWkArea)
+ SEEK lcParentID
+ SCAN WHILE DEPTO=lcParentID AND llRetVal
+ pnChildRec=RECNO()
+ pcChildID=DEPTO
+ pcChildExpr="DEPTO"
+ llRetVal=RIDELETE()
+ ENDSCAN GET ALL OF the nombrelargodeldbf RECORDS
+ =rireuse("nombrelargodeldbf",lcChildWkArea)
+ IF NOT llRetVal
+ IF _TRIGGERLEVEL=1
+ DO riend WITH llRetVal
+ ENDIF AT the END OF the highest TRIGGER LEVEL
+ SELECT (lcStartArea)
+ RETURN llRetVal
+ ENDIF
+ IF _TRIGGERLEVEL=1
+ DO riend WITH llRetVal
+ ENDIF AT the END OF the highest TRIGGER LEVEL
+ SELECT (lcStartArea)
+ RETURN llRetVal
+ ** "End of Referential integrity Delete trigger for" fb2p_depto
+ ********************************************************************************
-********************************************************************************
-procedure __RI_UPDATE_nombrelargodeldbf
-** "Referential integrity update trigger for" nombrelargodeldbf
-LOCAL llRetVal
-llRetVal = .t.
-PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
-PRIVATE pcParentExpr,pcChildExpr
-STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
-STORE 0 TO pnParentRec,pnChildRec
-IF _triggerlevel=1
- BEGIN TRANSACTION
- PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
- pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
- pcOldTalk=SET("TALK")
- SET TALK OFF
- pcOldDele=SET("DELETED")
- pcOldExact=SET("EXACT")
- pcOldCompat=SET("COMPATIBLE")
- SET COMPATIBLE OFF
- SET DELETED ON
- SET EXACT OFF
- pcRIcursors=""
- pcRIwkareas=""
- pcRIolderror=ON("error")
- pnerror=0
- ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
- IF TYPE('gaErrors(1)')<>"U"
- release gaErrors
- ENDIF
- PUBLIC gaErrors(1,12)
- pcOldDBC=DBC()
- SET DATA TO ("FB2P_DBC")
-ENDIF first trigger
-LOCAL lcParentID && parent's value to be sought in child
-LOCAL lcOldParentID && previous parent id value
-LOCAL lcChildWkArea && child work area handle returned by riopen
-LOCAL lcChildID && child's value to be sought in parent
-LOCAL lcOldChildID && old child id value
-LOCAL lcParentWkArea && parentwork area handle returned by riopen
-LOCAL lcStartArea
-lcStartArea=select()
-llRetVal=.t.
-lcChildWkArea=select()
-IF _triggerlevel=1 or type("pccascadeparent")#"C" or (NOT pccascadeparent=="FB2P_DEPTO")
- SELECT (lcChildWkArea)
- lcChildID=DEPTO
- lcOldChildID=oldval("DEPTO")
- pcChildDBF=dbf(lcChildWkArea)
- pnChildRec=recno(lcChildWkArea)
- pcChildID=lcOldChildID
- pcChildExpr="DEPTO"
- if isnull(lcChildID) or isnull(lcOldChildID) or lcChildID <> lcOldChildID
- lcParentWkArea=riopen("fb2p_depto","depto")
- IF lcParentWkArea<=0
- IF _triggerlevel=1
- DO riend WITH .F.
- ENDIF at the end of the highest trigger level
- SELECT (lcStartArea)
- RETURN .F.
- ENDIF not able to open the child work area
- pcParentDBF=dbf(lcParentWkArea)
- llRetVal=SEEK(lcChildID,lcParentWkArea)
- pnParentRec=recno(lcParentWkArea)
- if llRetVal and not (isrlocked(pnParentRec, lcParentWkArea) or ;
- isflocked(lcParentWkArea))
- if rlock(lcParentWkArea)
- unlock record pnParentRec in (lcParentWkArea)
- else
- =rireuse("tparen",lcParentWkArea)
- pnError = rierror(-1,"Insert restrict rule violated.","","")
- IF _triggerlevel=1
- DO riend WITH llRetVal
- ENDIF at the end of the highest trigger level
- SELECT (lcStartArea)
- RETURN llRetVal
- endif
- endif
- =rireuse("fb2p_depto",lcParentWkArea)
- IF NOT llRetVal
- pnError = rierror(-1,"Insert restrict rule violated.","","")
- IF _triggerlevel=1
- DO riend WITH llRetVal
- ENDIF at the end of the highest trigger level
- SELECT (lcStartArea)
- RETURN llRetVal
- ENDIF no parent
- ENDIF this value was changed
-ENDIF not part of a cascade from "fb2p_depto"
-lcParentWkArea=lcChildWkArea
-IF _triggerlevel=1
- do riend with llRetVal
-ENDIF at the end of the highest trigger level
-SELECT (lcStartArea)
-RETURN llRetVal
-** "End of Referential integrity Update trigger for" nombrelargodeldbf
-********************************************************************************
+ ********************************************************************************
+PROCEDURE __RI_UPDATE_nombrelargodeldbf
+ ** "Referential integrity update trigger for" nombrelargodeldbf
+ LOCAL llRetVal
+ llRetVal = .T.
+ PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
+ PRIVATE pcParentExpr,pcChildExpr
+ STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
+ STORE 0 TO pnParentRec,pnChildRec
+ IF _TRIGGERLEVEL=1
+ BEGIN TRANSACTION
+ PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
+ pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,pcOldDBC
+ pcOldTalk=SET("TALK")
+ SET TALK OFF
+ pcOldDele=SET("DELETED")
+ pcOldExact=SET("EXACT")
+ pcOldCompat=SET("COMPATIBLE")
+ SET COMPATIBLE OFF
+ SET DELETED ON
+ SET EXACT OFF
+ pcRIcursors=""
+ pcRIwkareas=""
+ pcRIolderror=ON("error")
+ pnerror=0
+ ON ERROR pnerror=rierror(ERROR(),MESSAGE(),MESSAGE(1),PROGRAM())
+ IF TYPE('gaErrors(1)')<>"U"
+ RELEASE gaErrors
+ ENDIF
+ PUBLIC gaErrors(1,12)
+ pcOldDBC=DBC()
+ SET DATA TO ("FB2P_DBC")
+ ENDIF FIRST TRIGGER
+ LOCAL lcParentID && parent's value to be sought in child
+ LOCAL lcOldParentID && previous parent id value
+ LOCAL lcChildWkArea && child work area handle returned by riopen
+ LOCAL lcChildID && child's value to be sought in parent
+ LOCAL lcOldChildID && old child id value
+ LOCAL lcParentWkArea && parentwork area handle returned by riopen
+ LOCAL lcStartArea
+ lcStartArea=SELECT()
+ llRetVal=.T.
+ lcChildWkArea=SELECT()
+ IF _TRIGGERLEVEL=1 OR TYPE("pccascadeparent")#"C" OR (NOT pcCascadeParent=="FB2P_DEPTO")
+ SELECT (lcChildWkArea)
+ lcChildID=DEPTO
+ lcOldChildID=OLDVAL("DEPTO")
+ pcChildDBF=DBF(lcChildWkArea)
+ pnChildRec=RECNO(lcChildWkArea)
+ pcChildID=lcOldChildID
+ pcChildExpr="DEPTO"
+ IF ISNULL(lcChildID) OR ISNULL(lcOldChildID) OR lcChildID <> lcOldChildID
+ lcParentWkArea=riopen("fb2p_depto","depto")
+ IF lcParentWkArea<=0
+ IF _TRIGGERLEVEL=1
+ DO riend WITH .F.
+ ENDIF AT the END OF the highest TRIGGER LEVEL
+ SELECT (lcStartArea)
+ RETURN .F.
+ ENDIF NOT able TO OPEN the CHILD WORK area
+ pcParentDBF=DBF(lcParentWkArea)
+ llRetVal=SEEK(lcChildID,lcParentWkArea)
+ pnParentRec=RECNO(lcParentWkArea)
+ IF llRetVal AND NOT (ISRLOCKED(pnParentRec, lcParentWkArea) OR ;
+ ISFLOCKED(lcParentWkArea))
+ IF RLOCK(lcParentWkArea)
+ UNLOCK RECORD pnParentRec IN (lcParentWkArea)
+ ELSE
+ =rireuse("tparen",lcParentWkArea)
+ pnerror = rierror(-1,"Insert restrict rule violated.","","")
+ IF _TRIGGERLEVEL=1
+ DO riend WITH llRetVal
+ ENDIF AT the END OF the highest TRIGGER LEVEL
+ SELECT (lcStartArea)
+ RETURN llRetVal
+ ENDIF
+ ENDIF
+ =rireuse("fb2p_depto",lcParentWkArea)
+ IF NOT llRetVal
+ pnerror = rierror(-1,"Insert restrict rule violated.","","")
+ IF _TRIGGERLEVEL=1
+ DO riend WITH llRetVal
+ ENDIF AT the END OF the highest TRIGGER LEVEL
+ SELECT (lcStartArea)
+ RETURN llRetVal
+ ENDIF no PARENT
+ ENDIF THIS VALUE was changed
+ ENDIF NOT PART OF a CASCADE FROM "fb2p_depto"
+ lcParentWkArea=lcChildWkArea
+ IF _TRIGGERLEVEL=1
+ DO riend WITH llRetVal
+ ENDIF AT the END OF the highest TRIGGER LEVEL
+ SELECT (lcStartArea)
+ RETURN llRetVal
+ ** "End of Referential integrity Update trigger for" nombrelargodeldbf
+ ********************************************************************************
-********************************************************************************
-** "Referential integrity insert trigger for" nombrelargodeldbf
+ ********************************************************************************
+ ** "Referential integrity insert trigger for" nombrelargodeldbf
PROCEDURE __RI_INSERT_nombrelargodeldbf
-LOCAL llRetVal
-llRetVal = .t.
-PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
-PRIVATE pcParentExpr,pcChildExpr
-STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
-STORE 0 TO pnParentRec,pnChildRec
-IF _triggerlevel=1
- BEGIN TRANSACTION
- PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
- pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
- pcOldTalk=SET("TALK")
- SET TALK OFF
- pcOldDele=SET("DELETED")
- pcOldExact=SET("EXACT")
- pcOldCompat=SET("COMPATIBLE")
- SET COMPATIBLE OFF
- SET DELETED ON
- SET EXACT OFF
- pcRIcursors=""
- pcRIwkareas=""
- pcRIolderror=ON("error")
- pnerror=0
- ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
- IF TYPE('gaErrors(1)')<>"U"
- release gaErrors
- ENDIF
- PUBLIC gaErrors(1,12)
- pcOldDBC=DBC()
- SET DATA TO ("FB2P_DBC")
-ENDIF first trigger
-LOCAL lcChildID && child's value to be sought in parent
-LOCAL lcParentWkArea && parentwork area handle returned by riopen
-LOCAL lcChildWkArea && child's work area
-LOCAL lcStartArea
-lcStartArea=select()
-llRetVal=.t.
-lcChildWkArea=SELECT()
-SELECT (lcChildWkArea)
-lcChildID=DEPTO
-pcChildDBF=dbf(lcChildWkArea)
-pnChildRec=recno(lcChildWkArea)
-pcChildID=lcChildID
-pcChildExpr="DEPTO"
-lcParentWkArea=riopen("fb2p_depto","depto")
-IF lcParentWkArea<=0
- IF _triggerlevel=1
- DO riend WITH .F.
- ENDIF at the end of the highest trigger level
- SELECT (lcStartArea)
- RETURN .F.
-ENDIF not able to open the child work area
-pcParentDBF=dbf(lcParentWkArea)
-llRetVal=SEEK(lcChildID,lcParentWkArea)
-pnParentRec=recno(lcParentWkArea)
-if llRetVal and not (isrlocked(pnParentRec, lcParentWkArea) or ;
- isflocked(lcParentWkArea))
- if rlock(lcParentWkArea)
- unlock record pnParentRec in (lcParentWkArea)
- else
- =rireuse("tparen",lcParentWkArea)
- pnError = rierror(-1,"Insert restrict rule violated.","","")
- IF _triggerlevel=1
- DO riend WITH llRetVal
- ENDIF at the end of the highest trigger level
- SELECT (lcStartArea)
- RETURN llRetVal
- endif
-endif
-=rireuse("fb2p_depto",lcParentWkArea)
-IF NOT llRetVal
- pnError = rierror(-1,"Insert restrict rule violated.","","")
- IF _triggerlevel=1
- DO riend WITH llRetVal
- ENDIF at the end of the highest trigger level
- SELECT (lcStartArea)
- RETURN llRetVal
-ENDIF
-IF _triggerlevel=1
- do riend with llRetVal
-ENDIF at the end of the highest trigger level
-SELECT (lcStartArea)
-RETURN llRetVal
-** "End of Referential integrity insert trigger for" nombrelargodeldbf
-********************************************************************************
-**__RI_FOOTER!@ Do NOT REMOVE or MODIFY this line!!!! @!__RI_FOOTER**
+ LOCAL llRetVal
+ llRetVal = .T.
+ PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
+ PRIVATE pcParentExpr,pcChildExpr
+ STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
+ STORE 0 TO pnParentRec,pnChildRec
+ IF _TRIGGERLEVEL=1
+ BEGIN TRANSACTION
+ PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
+ pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,pcOldDBC
+ pcOldTalk=SET("TALK")
+ SET TALK OFF
+ pcOldDele=SET("DELETED")
+ pcOldExact=SET("EXACT")
+ pcOldCompat=SET("COMPATIBLE")
+ SET COMPATIBLE OFF
+ SET DELETED ON
+ SET EXACT OFF
+ pcRIcursors=""
+ pcRIwkareas=""
+ pcRIolderror=ON("error")
+ pnerror=0
+ ON ERROR pnerror=rierror(ERROR(),MESSAGE(),MESSAGE(1),PROGRAM())
+ IF TYPE('gaErrors(1)')<>"U"
+ RELEASE gaErrors
+ ENDIF
+ PUBLIC gaErrors(1,12)
+ pcOldDBC=DBC()
+ SET DATA TO ("FB2P_DBC")
+ ENDIF FIRST TRIGGER
+ LOCAL lcChildID && child's value to be sought in parent
+ LOCAL lcParentWkArea && parentwork area handle returned by riopen
+ LOCAL lcChildWkArea && child's work area
+ LOCAL lcStartArea
+ lcStartArea=SELECT()
+ llRetVal=.T.
+ lcChildWkArea=SELECT()
+ SELECT (lcChildWkArea)
+ lcChildID=DEPTO
+ pcChildDBF=DBF(lcChildWkArea)
+ pnChildRec=RECNO(lcChildWkArea)
+ pcChildID=lcChildID
+ pcChildExpr="DEPTO"
+ lcParentWkArea=riopen("fb2p_depto","depto")
+ IF lcParentWkArea<=0
+ IF _TRIGGERLEVEL=1
+ DO riend WITH .F.
+ ENDIF AT the END OF the highest TRIGGER LEVEL
+ SELECT (lcStartArea)
+ RETURN .F.
+ ENDIF NOT able TO OPEN the CHILD WORK area
+ pcParentDBF=DBF(lcParentWkArea)
+ llRetVal=SEEK(lcChildID,lcParentWkArea)
+ pnParentRec=RECNO(lcParentWkArea)
+ IF llRetVal AND NOT (ISRLOCKED(pnParentRec, lcParentWkArea) OR ;
+ ISFLOCKED(lcParentWkArea))
+ IF RLOCK(lcParentWkArea)
+ UNLOCK RECORD pnParentRec IN (lcParentWkArea)
+ ELSE
+ =rireuse("tparen",lcParentWkArea)
+ pnerror = rierror(-1,"Insert restrict rule violated.","","")
+ IF _TRIGGERLEVEL=1
+ DO riend WITH llRetVal
+ ENDIF AT the END OF the highest TRIGGER LEVEL
+ SELECT (lcStartArea)
+ RETURN llRetVal
+ ENDIF
+ ENDIF
+ =rireuse("fb2p_depto",lcParentWkArea)
+ IF NOT llRetVal
+ pnerror = rierror(-1,"Insert restrict rule violated.","","")
+ IF _TRIGGERLEVEL=1
+ DO riend WITH llRetVal
+ ENDIF AT the END OF the highest TRIGGER LEVEL
+ SELECT (lcStartArea)
+ RETURN llRetVal
+ ENDIF
+ IF _TRIGGERLEVEL=1
+ DO riend WITH llRetVal
+ ENDIF AT the END OF the highest TRIGGER LEVEL
+ SELECT (lcStartArea)
+ RETURN llRetVal
+ ** "End of Referential integrity insert trigger for" nombrelargodeldbf
+ ********************************************************************************
+ **__RI_FOOTER!@ Do NOT REMOVE or MODIFY this line!!!! @!__RI_FOOTER**
]]>
\ No newline at end of file
diff --git a/TESTS/DATOS_READONLY/FB2P_DBF.DB2 b/TESTS/DATOS_READONLY/FB2P_DBF.DB2
index afc5d93..cfb2b3c 100644
--- a/TESTS/DATOS_READONLY/FB2P_DBF.DB2
+++ b/TESTS/DATOS_READONLY/FB2P_DBF.DB2
@@ -2,13 +2,13 @@
* (ES) AUTOGENERADO - ¡¡ATENCIÓN!! - ¡¡NO PENSADO PARA EJECUTAR!! USAR SOLAMENTE PARA INTEGRAR CAMBIOS Y ALMACENAR CON HERRAMIENTAS SCM!!
* (EN) AUTOGENERATED - ATTENTION!! - NOT INTENDED FOR EXECUTION!! USE ONLY FOR MERGING CHANGES AND STORING WITH SCM TOOLS!!
*--------------------------------------------------------------------------------------------------------------------------------------------------------
-*< FOXBIN2PRG: Version="1.18" SourceFile="C:\DESA\foxbin2prg\TESTS\DATOS_READONLY\fb2p_dbf.dbf" Generated="2014/01/05 19:10:49" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries)
+*< FOXBIN2PRG: Version="1.19" SourceFile="C:\DESA\foxbin2prg\TESTS\DATOS_READONLY\fb2p_dbf.dbf" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries)
*
1252
- 2014/01/05
+ 2014/01/06
fb2p_dbc.dbc
0x00000031
Visual FoxPro, autoincrement enabled
@@ -71,7 +71,7 @@
- 20
+ 30
2
@@ -122,31 +122,15 @@
ID
- PRINCIPAL
+ PRIMARY
ID
ASCENDING
MACHINE
-
- I_NOMBRE
- NORMAL
- NOMBRE
-
- ASCENDING
- GENERAL
-
-
- DEPTO
- NORMAL
- DEPTO
-
- ASCENDING
- MACHINE
-
EDAD_ND
- NORMAL
+ REGULAR
EDAD
.NOT.DELETED()
ASCENDING
@@ -154,7 +138,7 @@
NOTDELETED
- BINARIO
+ BINARY
.NOT.DELETED()
ASCENDING
@@ -162,12 +146,36 @@
EDAD
- CANDIDATO
+ CANDIDATE
EDAD
DESCENDING
MACHINE
+
+ DEPTO
+ REGULAR
+ DEPTO
+ .NOT.DELETED().AND..T.
+ ASCENDING
+ GENERAL
+
+
+ NOMBRE
+ REGULAR
+ NOMBRE
+ .NOT.DELETED().AND..T..AND..T.
+ ASCENDING
+ GENERAL
+
+
+ I_NOMBRE
+ REGULAR
+ NOMBRE
+ .NOT.DELETED().AND..T..AND..NOT..F.
+ DESCENDING
+ GENERAL
+
diff --git a/TESTS/DATOS_READONLY/fb2p_foxuser.fr2 b/TESTS/DATOS_READONLY/fb2p_foxuser.fr2
new file mode 100644
index 0000000..61f7b74
--- /dev/null
+++ b/TESTS/DATOS_READONLY/fb2p_foxuser.fr2
@@ -0,0 +1,460 @@
+*--------------------------------------------------------------------------------------------------------------------------------------------------------
+* (ES) AUTOGENERADO - ¡¡ATENCIÓN!! - ¡¡NO PENSADO PARA EJECUTAR!! USAR SOLAMENTE PARA INTEGRAR CAMBIOS Y ALMACENAR CON HERRAMIENTAS SCM!!
+* (EN) AUTOGENERATED - ATTENTION!! - NOT INTENDED FOR EXECUTION!! USE ONLY FOR MERGING CHANGES AND STORING WITH SCM TOOLS!!
+*--------------------------------------------------------------------------------------------------------------------------------------------------------
+*< FOXBIN2PRG: Version="1.19" SourceFile="C:\DESA\foxbin2prg\TESTS\DATOS_READONLY\fb2p_foxuser.frx" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries)
+*
+
+
+
+
+
+