DBCOMMIT() EN DBF - SQL AUTOMATICO ?

DBCOMMIT() EN DBF - SQL AUTOMATICO ?

Postby russimicro » Sun Apr 28, 2024 11:13 pm

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
russimicro
 
Posts: 260
Joined: Sun Jan 31, 2010 3:30 pm
Location: Bucaramanga - Colombia

Re: DBCOMMIT() EN DBF - SQL AUTOMATICO ?

Postby Rick Lipkin » Mon Apr 29, 2024 2:34 pm

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

Code: Select all  Expand view

//---------------------------------
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)


 


Rick Lipkin
User avatar
Rick Lipkin
 
Posts: 2665
Joined: Fri Oct 07, 2005 1:50 pm
Location: Columbia, South Carolina USA

Re: DBCOMMIT() EN DBF - SQL AUTOMATICO ?

Postby russimicro » Mon Apr 29, 2024 3:54 pm

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
russimicro
 
Posts: 260
Joined: Sun Jan 31, 2010 3:30 pm
Location: Bucaramanga - Colombia

Re: DBCOMMIT() EN DBF - SQL AUTOMATICO ?

Postby russimicro » Mon Apr 29, 2024 5:07 pm

Code: Select all  Expand view


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

 
russimicro
 
Posts: 260
Joined: Sun Jan 31, 2010 3:30 pm
Location: Bucaramanga - Colombia

Re: DBCOMMIT() EN DBF - SQL AUTOMATICO ?

Postby sysctrl2 » Fri May 03, 2024 6:54 pm

Hace mas de 20 años que no uso DBF me colmaron la paciencia son muy corruptas y no saben de política :D

MySql/MariaDb, es mas sencillo de lo que se piensa.
yo lo haría de esta forma:
Code: Select all  Expand view

#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.)

 


sígueme para mas concejos :D :) :o :lol:
Cesar Cortes Cruz
SysCtrl Software
Mexico

' Sin +- FWH es mejor "
User avatar
sysctrl2
 
Posts: 1020
Joined: Mon Feb 05, 2007 7:15 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Ask Jeeves [Bot] and 59 guests