odatatier=NEWOBJECT("Datatier","&xprog")
odatatier.handle=thisform.handle
cExpr="Begin Transaction"
resultado=oDatatier.EjecutaCMD("SQL",cExpr,thisform.handle)
IF resultado>=0
SELECT (thisform.tablamadre)
resultado=oDataTier.SaveRecord(thisform.tipobases,xtable,thisform.campoclave,THISFORM.NUEVO,thisform.registro,thisform.handle)
IF resultado<0
MESSAGEBOX("No se pudo realizar la grabación del Registro",0+16,"Informacion")
thisform.sqlerror=1
resultado=-1
endif
ENDIF
ELSE
MESSAGEBOX("No se pudo realizar la consulta del Registro en la Base de Datos"+CHR(13)+"para verificar el Estado de actualización",0+64,"Informacion Operador")
thisform.sqlerror=1
resultado=-1
endif
else
SELECT (thisform.tablamadre)
resultado=oDataTier.SaveRecord(thisform.tipobases,xtable,thisform.campoclave,THISFORM.NUEVO,thisform.registro,thisform.handle)
IF resultado<0
MESSAGEBOX("No se pudo realizar la grabación del Registro",0+16,"Informacion")
thisform.sqlerror=1
resultado=-1
endif
endif
IF thisform.nuevo .and. resultado>=0
regnro=odatatier.NvoID
ELSE
regnro=0
endif
ELSE
MESSAGEBOX("No se pudo iniciar la Transaccion en Base de Datos",0+16,"Informacion")
thisform.sqlerror=2
ENDIF
endif
if thisform.sqlerror=0
thisform.grabaextra
IF thisform.sqlerror=1
cExpr1="RollBack Transaction"
resultado=oDatatier.EjecutaCMD("SQL",cExpr1,thisform.handle)
IF resultado<0
MESSAGEBOX("No se pudo volver para atras la Transaccion en la Base de Datos "+CHR(13)+"Verifique funcionamiento Server",0+64,"Informacion Operador")
ELSE
MESSAGEBOX("Por un prolema de Sistema la operación fue vuelta para atras",0+64,"Informacion")
ENDIF
SELECT (thisform.tablamadre)
=TABLEREVERT(.t.)
thisform.sqlerror=1
ELSE
cExpr="Commit Transaction"
resultado=oDatatier.EjecutaCMD("SQL",cExpr,thisform.handle)
IF resultado<0
MESSAGEBOX("No se pudo terminar la Transaccion en la Base de Datos "+CHR(13)+"Verifique funcionamiento Server",0+64,"Informacion Operador")
else
IF thisform.nuevo .and. resultado>=0
SELECT (thisform.tablamadre)
replace (thisform.campoclave) WITH regnro
=TABLEUPDATE(.t.)
thisform.paginasform.page2.campoclave.value=regnro
ELSE
IF !thisform.nuevo .and. resultado>=0
SELECT (thisform.tablamadre)
=TABLEUPDATE(.t.)
endif
endif
ENDIF
endif
ELSE
IF thisform.sqlerror=1
cExpr1="RollBack Transaction"
resultado=oDatatier.EjecutaCMD("SQL",cExpr1,thisform.handle)
IF resultado<0
MESSAGEBOX("No se pudo volver para atras la Transaccion en la Base de Datos "+CHR(13)+"Verifique funcionamiento Server",0+64,"Informacion Operador")
ENDIF
endif
endif
PROCEDURE InsertRecord
LPARAMETERS xtipo1,pTable, pKeyField
cExpr = THIS.BuildInsertCommand (xtipo1, pTable, pKeyField)
_ClipText = cExpr
DO CASE
CASE xtipo1 = [SQL]
lr = SQLExec ( THIS.Handle, cExpr )
IF lr < 0
this.errores=-1
ELSE
* cExpr = "SELECT IDENT_CURRENT (´" + ptable +"´) AS lastid"
IF UPPER(pKeyField)<>"NO"
cExpr = "SELECT @@IDENTITY AS lastid"
a = SQLExec ( THIS.Handle, cExpr, "CUR_LASTID" )
IF a > 0
This.NvoID = cur_lastid.lastid
ELSE
this.errores=1
ENDIF
USE IN cur_lastid
ELSE
This.NvoID=0
endif
ENDIF
ENDCASE
ENDFUNC
FUNCTION BuildInsertCommand
PARAMETERS xtipo1,pTable, pKeyField
LOCAL A1
A1=ALIAS()
SELECT 0
CREATE CURSOR TEMPDATA( CAMPO M)
APPEND BLANK
SELECT &A1
Cmd = [INSERT ] + pTable + [ ( ]
REPLACE TEMPDATA.CAMPO WITH CMD
CMD=""
FOR I = 1 TO FCOUNT()
Fld = UPPER(FIELD(I))
IF Fld != UPPER(pKeyField) .and. TYPE ( Fld ) != [G] .and. Fld != "CONTROLREG" .and. Fld != "GUID"
npos=ASCAN(this.camposNO,"&FLD",1,ALEN(this.camposNO,1),1,14)
IF NPOS=0
IF I<FCOUNT()
Cmd = Cmd + Fld + [, ]
ELSE
Cmd = Cmd + Fld + [ ) VALUES ( ]
ENDIF
ELSE
IF I=>FCOUNT()
Cmd = LEFT(Cmd,LEN(Cmd)-2)+ [ ) VALUES ( ]
endif
ENDIF
ELSE
IF I=>FCOUNT()
Cmd = LEFT(Cmd,LEN(Cmd)-2)+ [ ) VALUES ( ]
ENDIF
endif
ENDFOR
REPLACE TEMPDATA.CAMPO WITH TEMPDATA.CAMPO+CMD
CMD=""
FOR I = 1 TO FCOUNT()
Fld = FIELD(I)
IF Fld != UPPER(pKeyField) .and. TYPE ( Fld ) != [G] .and. Fld != "CONTROLREG" .and. Fld != "GUID"
npos=ASCAN(this.camposNO,"&FLD",1,ALEN(this.camposNO,1),1,14)
IF NPOS=0
npos=ASCAN(this.camposNO,"&FLD",1,ALEN(this.camposNO,1),4,14)
IF npos=0
Dta = ALLTRIM(TRANSFORM ( &Fld ))
Dta = CHRTRAN ( Dta, CHR(39), CHR(146) )
Dta = IIF ( Dta = [/ /], [], Dta )
Dta = IIF ( Dta = [.F.], [0], Dta )
Dta = IIF ( Dta = [.T.], [1], Dta )
Dlm = IIF ( TYPE ( Fld ) $ [CM],['],;
IIF ( TYPE ( Fld ) $ [DT],['],IIF ( TYPE ( Fld ) $ [IN],[], [])))
IF I<FCOUNT()
Cmd = Cmd + Dlm + Dta + Dlm + [, ]
ELSE
Cmd = Cmd + Dlm + Dta + Dlm + [ ) ]
ENDIF
ELSE
IF &fld=0
IF I<FCOUNT()
Cmd = Cmd + "NULL" + [, ]
ELSE
Cmd = Cmd + "NULL" + [ ) ]
ENDIF
else
Dta = ALLTRIM(TRANSFORM ( &Fld ))
Dta = CHRTRAN ( Dta, CHR(39), CHR(146) )
Dlm = IIF ( TYPE ( Fld ) $ [CM],['],;
IIF ( TYPE ( Fld ) $ [DT],['],IIF ( TYPE ( Fld ) $ [IN],[], [])))
IF I<FCOUNT()
Cmd = Cmd + Dlm + Dta + Dlm + [, ]
ELSE
Cmd = Cmd + Dlm + Dta + Dlm + [ ) ]
ENDIF
endif
ENDIF
ELSE
IF I=>FCOUNT()
Cmd = LEFT(Cmd,LEN(Cmd)-2)+ [ ) ]
endif
ENDIF
ELSE
IF I=>FCOUNT()
Cmd = LEFT(Cmd,LEN(Cmd)-2)+ [ ) ]
endif
endif
ENDFOR
REPLACE TEMPDATA.CAMPO WITH TEMPDATA.CAMPO+CMD
CMD=TEMPDATA.CAMPO
SELECT TEMPDATA
USE
SELECT &A1
RETURN CMD
ENDFUNC