Buena tarde.
Requiero para proceso de migracion de DBF´S a SQL NATIVO con fivewin - mariadb, interceptar el replace al momento del ALIAS->( dbcommit() ), para poder hacer la actualizacion con sql , sobre la base de datos SQL
La idea es trabajar con tablas DBF de manera temporal , y no alterar la logica actual. Y solo al final afectar la tabla SQL.
seria hacer un # command
#command dbcommit <(AREA)> => dbcommit_SQL( <(AREA)> )
function dbcommit_SQL(area)
// obtener el replace x dbf
// hacer el update (insert) sql
return nil
Gracias
JONSSON RUSSI
DBCOMMIT() EN DBF - SQL AUTOMATICO ?
-
- Posts: 262
- Joined: Sun Jan 31, 2010 3:30 pm
- Location: Bucaramanga - Colombia
- Rick Lipkin
- Posts: 2668
- Joined: Fri Oct 07, 2005 1:50 pm
- Location: Columbia, South Carolina USA
Re: DBCOMMIT() EN DBF - SQL AUTOMATICO ?
There is no ADO Sql "commit" command ... instead when you complete updating all your sql table values .. you would just issue oRsTablename:Update() .. here is a small sample code on how I manage my sql values
Rick Lipkin
Code: Select all | Expand
//---------------------------------
Static FUNC _Doit(cMODE,cUserId,cPassword,;
lReadOnly,lWriteOnly,lSuper,lAdmin,dLastLog,oRsUser,lActive,cFullName )
LOCAL cEID,oCn,oRsPerm,oErr
IF cMODE = 'V'
RETURN(.T.)
ENDIF
IF cMODE = "A"
cEid := _GenEid()
If cEid = "BOGUS"
Saying := "Error in creating Unique Row Id"
MsgInfo( Saying )
Return(.f.)
Endif
oRsUser:AddNew()
oRsUser:Fields("UserEid"):Value := cEid
ENDIF
oRsUser:Fields("UserId"):Value := cUserId
oRsUser:Fields("Password"):Value := Encrypt(cPassword)
oRsUser:Fields("LastLog"):Value := dLastLog
oRsUser:Fields("FullName"):Value := UpperLower( cFullName )
// rights and roles
If lActive = .t.
oRsUser:Fields("Active"):Value := "Y"
Else
oRsUser:Fields("Active"):Value := "N"
Endif
If lReadOnly = .t.
oRsUser:Fields("Readonly"):Value := "Y"
Else
oRsUser:Fields("ReadOnly"):Value := "N"
Endif
If lWriteOnly = .t.
oRsUser:Fields("WriteOnly"):Value := "Y"
Else
oRsUser:Fields("WriteOnly"):Value := "N"
Endif
*If lTech = .t.
* oRsUser:Fields("Tech"):Value := "Y"
*Else
* oRsUser:Fields("Tech"):Value := "N"
*Endif
*If lPoolMgr = .t.
* oRsUser:Fields("Mgr"):Value := "Y"
*Else
* oRsUser:Fields("Mgr"):Value := "N"
*Endif
If lSuper = .t.
oRsUser:Fields("Super"):Value := "Y"
Else
oRsUser:Fields("Super"):Value := "N"
Endif
If lAdmin = .t.
oRsUser:Fields("Admin"):Value := "Y"
Else
oRsUser:Fields("Admin"):Value := "N"
Endif
oRsUser:Update() // does the sql commit
IF cMODE = "A"
oRsUser:Sort := "UserID"
oRsUser:MoveFirst()
oRsUser:Find( "UserEid = '"+cEID+"'")
ENDIF
RETURN(NIL)
-
- Posts: 262
- Joined: Sun Jan 31, 2010 3:30 pm
- Location: Bucaramanga - Colombia
Re: DBCOMMIT() EN DBF - SQL AUTOMATICO ?
Buen día...
En la actualidad uso una metodología similar... pero lo que quiero es no tener que reescribir o generar nuevo código para cada tabla modificada...
pensé el obtener las sentencias internas del commit y aprovecharlas para escribir en un solo método las actualizaciones a cualquier tabla.
Gracias
En la actualidad uso una metodología similar... pero lo que quiero es no tener que reescribir o generar nuevo código para cada tabla modificada...
pensé el obtener las sentencias internas del commit y aprovecharlas para escribir en un solo método las actualizaciones a cualquier tabla.
Gracias
-
- Posts: 262
- Joined: Sun Jan 31, 2010 3:30 pm
- Location: Bucaramanga - Colombia
Re: DBCOMMIT() EN DBF - SQL AUTOMATICO ?
Code: Select all | Expand
Buen dia...
// sentencia actual con dbf
IF EMP->( lRegLock(.f.) )
REPLACE EMP->cNomSucEmp WITH "PRUEBA_SQL4"
EMP->( DBCOMMIT() )
ENDIF
Favor indicar cual es la sintaxis correcta para este seudocodigo : para el #command, como para el replace en el metodo REPLACE_SQL
ya lo del sql... lo tengo solucionado partiendo de estos datos en cada replace.
#command REPLACE <NOMBRE_CAMPO> WITH <VALOR> => REPLACE_SQL( <NOMBRE_CAMPO>,<VALOR> )
#command DBCOMMIT <(AREA)> => DBCOMMIT_SQL((AREA))
FUNCTION REPLACE_SQL( cNomCam, cValCam )
LOCAL cAliAct := ALIAS()
IF M->lXhbComFW // SQL_FW
AADD(M->mTabCommit, {cAliAct,cNomCam,cValCam} )
ELSE // DBF
REPLACE &cNomCam WITH cValCam
ENDIF
RETURN
//*********************************************
FUNCTION DBCOMMIT_SQL( cAliAct )
LOCAL cAliCom := ALIAS()
IF M->lXhbComFW
ALERTA("HACER UPDATE SQL")
//actualizal_SQL(m->mTabCommit)
ELSE
(cAliCom)->( DBCOMMIT() )
ENDIF
RETURN
Re: DBCOMMIT() EN DBF - SQL AUTOMATICO ?
Hace mas de 20 años que no uso DBF me colmaron la paciencia son muy corruptas y no saben de política
MySql/MariaDb, es mas sencillo de lo que se piensa.
yo lo haría de esta forma:
sígueme para mas concejos
MySql/MariaDb, es mas sencillo de lo que se piensa.
yo lo haría de esta forma:
Code: Select all | Expand
#include "fivewin.ch"
function Main()
LOCAL cCodigo := "01"
LOCAL cDescrip := "TOMATE BOLA"
LOCAL nPrecio := 25.00
LOCAL aValores := { cCodigo,cDescrip,nPrecio }
LOCAL aCampos := {"codigo", "descrip", "precio"}
LOCAL cTabla := "artics"
LOCAL cOrder := "codigo"
LOCAL cWhere := "codigo=" ClipValue2SQL(cCodigo) + " ORDER BY codigo LIMIT 1"
InsertUpdate( oCon,cTabla,cOrder,aCampos,aValores, lNew )
return nil
STATIC FUNCTION InsertUpdate( oCon,cTabla,cOrder,aCampos,aValores, lNew )
oCon:BeginTransaction()
if lNew //nuevo registro
oCon:Insert( cTabla, aCampos, aValores )
else //actualiza
oCon:update( cTabla, aCampos, aValores, cWhere )
endif
oCon:CommitTransaction()
RETURN (.T.)
Cesar Cortes Cruz
SysCtrl Software
Mexico
' Sin +- FWH es mejor "
SysCtrl Software
Mexico
' Sin +- FWH es mejor "